lkml.org 
[lkml]   [2022]   [Sep]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    Subject[PATCH v5 07/22] lkdtm: Emit an indirect call for CFI tests
    From
    Clang can convert the indirect calls in lkdtm_CFI_FORWARD_PROTO into
    direct calls. Move the call into a noinline function that accepts the
    target address as an argument to ensure the compiler actually emits an
    indirect call instead.

    Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
    Reviewed-by: Nick Desaulniers <ndesaulniers@google.com>
    Tested-by: Kees Cook <keescook@chromium.org>
    Tested-by: Nathan Chancellor <nathan@kernel.org>
    Acked-by: Kees Cook <keescook@chromium.org>
    ---
    drivers/misc/lkdtm/cfi.c | 15 +++++++++------
    1 file changed, 9 insertions(+), 6 deletions(-)

    diff --git a/drivers/misc/lkdtm/cfi.c b/drivers/misc/lkdtm/cfi.c
    index 71483cb1e422..5245cf6013c9 100644
    --- a/drivers/misc/lkdtm/cfi.c
    +++ b/drivers/misc/lkdtm/cfi.c
    @@ -20,6 +20,13 @@ static noinline int lkdtm_increment_int(int *counter)

    return *counter;
    }
    +
    +/* Don't allow the compiler to inline the calls. */
    +static noinline void lkdtm_indirect_call(void (*func)(int *))
    +{
    + func(&called_count);
    +}
    +
    /*
    * This tries to call an indirect function with a mismatched prototype.
    */
    @@ -29,15 +36,11 @@ static void lkdtm_CFI_FORWARD_PROTO(void)
    * Matches lkdtm_increment_void()'s prototype, but not
    * lkdtm_increment_int()'s prototype.
    */
    - void (*func)(int *);
    -
    pr_info("Calling matched prototype ...\n");
    - func = lkdtm_increment_void;
    - func(&called_count);
    + lkdtm_indirect_call(lkdtm_increment_void);

    pr_info("Calling mismatched prototype ...\n");
    - func = (void *)lkdtm_increment_int;
    - func(&called_count);
    + lkdtm_indirect_call((void *)lkdtm_increment_int);

    pr_err("FAIL: survived mismatched prototype function call!\n");
    pr_expected_config(CONFIG_CFI_CLANG);
    --
    2.37.2.789.g6183377224-goog
    \
     
     \ /
      Last update: 2022-09-08 23:57    [W:4.382 / U:0.028 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site