lkml.org 
[lkml]   [2021]   [Jul]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Date
    SubjectRe: [PATCH 2/4] kfence: add function to mask address bits
    On Wed, Jul 28, 2021 at 9:03 PM Heiko Carstens <hca@linux.ibm.com> wrote:
    >
    > From: Sven Schnelle <svens@linux.ibm.com>
    >
    > s390 only reports the page address during a translation fault.
    > To make the kfence unit tests pass, add a function that might
    > be implemented by architectures to mask out address bits.
    >
    > Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
    > Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
    > ---
    > mm/kfence/kfence_test.c | 13 ++++++++++++-
    > 1 file changed, 12 insertions(+), 1 deletion(-)
    >
    > diff --git a/mm/kfence/kfence_test.c b/mm/kfence/kfence_test.c
    > index 942cbc16ad26..eb6307c199ea 100644
    > --- a/mm/kfence/kfence_test.c
    > +++ b/mm/kfence/kfence_test.c
    > @@ -23,8 +23,15 @@
    > #include <linux/tracepoint.h>
    > #include <trace/events/printk.h>
    >
    > +#include <asm/kfence.h>
    > +
    > #include "kfence.h"
    >
    > +/* May be overridden by <asm/kfence.h>. */
    > +#ifndef arch_kfence_test_address
    > +#define arch_kfence_test_address(addr) (addr)
    > +#endif
    > +
    > /* Report as observed from console. */
    > static struct {
    > spinlock_t lock;
    > @@ -82,6 +89,7 @@ static const char *get_access_type(const struct expect_report *r)
    > /* Check observed report matches information in @r. */
    > static bool report_matches(const struct expect_report *r)
    > {
    > + unsigned long addr = (unsigned long)r->addr;
    > bool ret = false;
    > unsigned long flags;
    > typeof(observed.lines) expect;
    > @@ -131,22 +139,25 @@ static bool report_matches(const struct expect_report *r)
    > switch (r->type) {
    > case KFENCE_ERROR_OOB:
    > cur += scnprintf(cur, end - cur, "Out-of-bounds %s at", get_access_type(r));
    > + addr = arch_kfence_test_address(addr);

    Can we normalize addr once before (or after) this switch?

    > break;
    > case KFENCE_ERROR_UAF:
    > cur += scnprintf(cur, end - cur, "Use-after-free %s at", get_access_type(r));
    > + addr = arch_kfence_test_address(addr);
    > break;
    > case KFENCE_ERROR_CORRUPTION:
    > cur += scnprintf(cur, end - cur, "Corrupted memory at");
    > break;
    > case KFENCE_ERROR_INVALID:
    > cur += scnprintf(cur, end - cur, "Invalid %s at", get_access_type(r));
    > + addr = arch_kfence_test_address(addr);
    > break;
    > case KFENCE_ERROR_INVALID_FREE:
    > cur += scnprintf(cur, end - cur, "Invalid free of");
    > break;
    > }
    >
    > - cur += scnprintf(cur, end - cur, " 0x%p", (void *)r->addr);
    > + cur += scnprintf(cur, end - cur, " 0x%p", (void *)addr);
    >
    > spin_lock_irqsave(&observed.lock, flags);
    > if (!report_available())
    > --
    > 2.25.1
    >


    --
    Alexander Potapenko
    Software Engineer

    Google Germany GmbH
    Erika-Mann-Straße, 33
    80636 München

    Geschäftsführer: Paul Manicle, Halimah DeLaine Prado
    Registergericht und -nummer: Hamburg, HRB 86891
    Sitz der Gesellschaft: Hamburg

    \
     
     \ /
      Last update: 2021-07-29 14:44    [W:3.376 / U:0.336 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site