lkml.org 
[lkml]   [2022]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 349/390] kselftest/arm64: Fix validatation termination record after EXTRA_CONTEXT
    Date
    From: Mark Brown <broonie@kernel.org>

    [ Upstream commit 5c152c2f66f9368394b89ac90dc7483476ef7b88 ]

    When arm64 signal context data overflows the base struct sigcontext it gets
    placed in an extra buffer pointed to by a record of type EXTRA_CONTEXT in
    the base struct sigcontext which is required to be the last record in the
    base struct sigframe. The current validation code attempts to check this
    by using GET_RESV_NEXT_HEAD() to step forward from the current record to
    the next but that is a macro which assumes it is being provided with a
    struct _aarch64_ctx and uses the size there to skip forward to the next
    record. Instead validate_extra_context() passes it a struct extra_context
    which has a separate size field. This compiles but results in us trying
    to validate a termination record in completely the wrong place, at best
    failing validation and at worst just segfaulting. Fix this by passing
    the struct _aarch64_ctx we meant to into the macro.

    Signed-off-by: Mark Brown <broonie@kernel.org>
    Link: https://lore.kernel.org/r/20220829160703.874492-4-broonie@kernel.org
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    tools/testing/selftests/arm64/signal/testcases/testcases.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/tools/testing/selftests/arm64/signal/testcases/testcases.c b/tools/testing/selftests/arm64/signal/testcases/testcases.c
    index 61ebcdf63831..a3ac5c2d8aac 100644
    --- a/tools/testing/selftests/arm64/signal/testcases/testcases.c
    +++ b/tools/testing/selftests/arm64/signal/testcases/testcases.c
    @@ -33,7 +33,7 @@ bool validate_extra_context(struct extra_context *extra, char **err)
    return false;

    fprintf(stderr, "Validating EXTRA...\n");
    - term = GET_RESV_NEXT_HEAD(extra);
    + term = GET_RESV_NEXT_HEAD(&extra->head);
    if (!term || term->magic || term->size) {
    *err = "Missing terminator after EXTRA context";
    return false;
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-10-24 22:17    [W:4.019 / U:0.788 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site