From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.9 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 71068C4727F for ; Tue, 29 Sep 2020 12:21:11 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id D363E20773 for ; Tue, 29 Sep 2020 12:21:10 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="SX2sc9ks" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D363E20773 Authentication-Results: mail.kernel.org; dmarc=fail (p=reject dis=none) header.from=google.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id 018368E0001; Tue, 29 Sep 2020 08:21:10 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id F0B936B005D; Tue, 29 Sep 2020 08:21:09 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DFA8F8E0001; Tue, 29 Sep 2020 08:21:09 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0195.hostedemail.com [216.40.44.195]) by kanga.kvack.org (Postfix) with ESMTP id C9BC36B005C for ; Tue, 29 Sep 2020 08:21:09 -0400 (EDT) Received: from smtpin17.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay03.hostedemail.com (Postfix) with ESMTP id 821BA8249980 for ; Tue, 29 Sep 2020 12:21:09 +0000 (UTC) X-FDA: 77316008658.17.band96_0d09ed42718a Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin17.hostedemail.com (Postfix) with ESMTP id 550BD180D0180 for ; Tue, 29 Sep 2020 12:21:09 +0000 (UTC) X-HE-Tag: band96_0d09ed42718a X-Filterd-Recvd-Size: 7042 Received: from mail-pg1-f193.google.com (mail-pg1-f193.google.com [209.85.215.193]) by imf40.hostedemail.com (Postfix) with ESMTP for ; Tue, 29 Sep 2020 12:21:08 +0000 (UTC) Received: by mail-pg1-f193.google.com with SMTP id 197so3731021pge.8 for ; Tue, 29 Sep 2020 05:21:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=k5kKBQ+Qqkla12YVhGRy7ZogNeaVCuiLnDorQW/L8Lg=; b=SX2sc9ksvtIkXUBGDPsan+1J1Enlck2Gs9xWJRjb0TZ4XlzM+PfRs7yD3PfT3WGpj/ 70k/+6UbTWf2E6C+WKu2kRq2+ga2ef7dJWAKX4wS+ZH/zUQmscp7qdbgDy3UsZefs63T lbhiJeknylvPB93DNsTQaKRFN/ty7oXkYeCSYiPX3FDzAuOLJ4mPdqPAoCRi1wmITNfO Yj3A+HIgoJ0UvnQmCHoD8lHPNzlLgdSUMZM8hZhO7RYQYnkv9hQcUEsg0bwL6mP+zCfV Vp82CQSDrfdBgT+Os7J4gWKu+0HWkC0SDA20UUvwzRema6vQ/SCEfyBEV6K2b4+XaVzx eoKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=k5kKBQ+Qqkla12YVhGRy7ZogNeaVCuiLnDorQW/L8Lg=; b=FFRxMG8Wto50gzlj5uOS2ukRGCRqDw6pd6qDsv+XP64WeWxqp1XF6Ka7DuRLD0WqVP CbhDD7E0FibQcPnslZ1m9gqKvwfaTFSWePsGry+FgMCalJW5H4vzDiFj1wZ+iGghTYgd hEqyIgyn8YkgSMLT/kak9scsUWUwAzxZj1bdGFcwYYTjoQ46jUVuI6TtIGOR+r7MPzHq gLw7vWVHfTrtFajS7VSJkjM8Sg+WZ7tdOVeh5ys4QctXnV5cqiinDyFGiLyMFaWrNzuE pnZgqz7t4VbumfKodOcFxC/IS1YDjhfjsoSa6XiRzfcAl/iL/ceS48HAw/IdE7ScOd1G l0Zw== X-Gm-Message-State: AOAM531qD1F8L2pQ+C8vZfq91QMokZFMbUhi6P6ehIsSiOocSTsdhvqR Ju6tAInYhKV3qPa2ibTmD/gOCskEPUAbZnRnS14Q8g== X-Google-Smtp-Source: ABdhPJzjmFcv8nAu4i4hfq2V8vemDcfsL5n2zLKWlSW1h5kBa930xplRFRegKu5vXOahPaWbsy6DjmDS3znEbhfd9Sw= X-Received: by 2002:a62:ee10:0:b029:142:2501:3972 with SMTP id e16-20020a62ee100000b029014225013972mr3782717pfi.55.1601382067482; Tue, 29 Sep 2020 05:21:07 -0700 (PDT) MIME-Version: 1.0 References: <20200921132611.1700350-1-elver@google.com> <20200921132611.1700350-7-elver@google.com> In-Reply-To: <20200921132611.1700350-7-elver@google.com> From: Andrey Konovalov Date: Tue, 29 Sep 2020 14:20:53 +0200 Message-ID: Subject: Re: [PATCH v3 06/10] kfence, kasan: make KFENCE compatible with KASAN To: Marco Elver Cc: Andrew Morton , Alexander Potapenko , "H. Peter Anvin" , "Paul E . McKenney" , Andrey Ryabinin , Andy Lutomirski , Borislav Petkov , Catalin Marinas , Christoph Lameter , Dave Hansen , David Rientjes , Dmitry Vyukov , Eric Dumazet , Greg Kroah-Hartman , Hillf Danton , Ingo Molnar , Jann Horn , Jonathan.Cameron@huawei.com, Jonathan Corbet , Joonsoo Kim , Kees Cook , Mark Rutland , Pekka Enberg , Peter Zijlstra , sjpark@amazon.com, Thomas Gleixner , Vlastimil Babka , Will Deacon , "the arch/x86 maintainers" , "open list:DOCUMENTATION" , LKML , kasan-dev , Linux ARM , Linux Memory Management List Content-Type: text/plain; charset="UTF-8" X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: On Mon, Sep 21, 2020 at 3:26 PM Marco Elver wrote: > > From: Alexander Potapenko > > We make KFENCE compatible with KASAN for testing KFENCE itself. In > particular, KASAN helps to catch any potential corruptions to KFENCE > state, or other corruptions that may be a result of freepointer > corruptions in the main allocators. > > To indicate that the combination of the two is generally discouraged, > CONFIG_EXPERT=y should be set. It also gives us the nice property that > KFENCE will be build-tested by allyesconfig builds. > > Reviewed-by: Dmitry Vyukov > Co-developed-by: Marco Elver > Signed-off-by: Marco Elver > Signed-off-by: Alexander Potapenko > --- > lib/Kconfig.kfence | 2 +- > mm/kasan/common.c | 7 +++++++ > 2 files changed, 8 insertions(+), 1 deletion(-) > > diff --git a/lib/Kconfig.kfence b/lib/Kconfig.kfence > index 4c2ea1c722de..6825c1c07a10 100644 > --- a/lib/Kconfig.kfence > +++ b/lib/Kconfig.kfence > @@ -10,7 +10,7 @@ config HAVE_ARCH_KFENCE_STATIC_POOL > > menuconfig KFENCE > bool "KFENCE: low-overhead sampling-based memory safety error detector" > - depends on HAVE_ARCH_KFENCE && !KASAN && (SLAB || SLUB) > + depends on HAVE_ARCH_KFENCE && (!KASAN || EXPERT) && (SLAB || SLUB) > depends on JUMP_LABEL # To ensure performance, require jump labels > select STACKTRACE > help > diff --git a/mm/kasan/common.c b/mm/kasan/common.c > index 950fd372a07e..f5c49f0fdeff 100644 > --- a/mm/kasan/common.c > +++ b/mm/kasan/common.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -396,6 +397,9 @@ static bool __kasan_slab_free(struct kmem_cache *cache, void *object, > tagged_object = object; > object = reset_tag(object); > > + if (is_kfence_address(object)) > + return false; > + > if (unlikely(nearest_obj(cache, virt_to_head_page(object), object) != > object)) { > kasan_report_invalid_free(tagged_object, ip); > @@ -444,6 +448,9 @@ static void *__kasan_kmalloc(struct kmem_cache *cache, const void *object, > if (unlikely(object == NULL)) > return NULL; > > + if (is_kfence_address(object)) > + return (void *)object; > + > redzone_start = round_up((unsigned long)(object + size), > KASAN_SHADOW_SCALE_SIZE); > redzone_end = round_up((unsigned long)object + cache->object_size, > -- > 2.28.0.681.g6f77f65b4e-goog > With KFENCE + KASAN both enabled we need to bail out in all KASAN hooks that get called from the allocator, right? Do I understand correctly that these two are the only ones that are called for KFENCE-allocated objects due to the way KFENCE is integrated into the allocator?