Received: by 2002:a05:6a10:22f:0:0:0:0 with SMTP id 15csp3747630pxk; Tue, 29 Sep 2020 05:24:42 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwnbOBXKV93O6vtd8hSWpatObzVFa80LcazBKNadHFXTZFzm1mx+mSxFqswohNbjiOa9Nmv X-Received: by 2002:a17:906:ae50:: with SMTP id lf16mr3451249ejb.343.1601382282235; Tue, 29 Sep 2020 05:24:42 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1601382282; cv=none; d=google.com; s=arc-20160816; b=raAjFSS/MXcOknE/4GxlkDdIBje32WACZ8h5Wp0kaygSb+yGwC1Gsi+KOF2g6GFn5z IoJlik2DAtVXf7oV4//V+wAZeOnfaN31T+DZnudeZI6yukbljXYwZc2YqIA9oxWZFsJD uxEBdVDpYyxo6TZics1KJIQna3mW10b8sf+niZ71Mh6z5Kx6NVPJuCwzdyuyUnZ5hyyQ YGzFkGoACwWZRRmaFEwD6DpBhu29ywl+HZvitiCfQ1Ey6QjL5cMXzsOChRUrStSbMnep Mp8zGPaFkagwrz8bXCzPj+XTdrnUeks4pBRRLjn/VEmUz2Y7QUpLnWwc7qHVX6UwXJ4G 7ahg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=k5kKBQ+Qqkla12YVhGRy7ZogNeaVCuiLnDorQW/L8Lg=; b=eZvKhOAhS/Q0uF+3aDSjGRb5NvFhqtcRMUIeRHd+a1well75jKmTj6lwfhSqYOYQk4 5JCH0PJ4llzquqgzqg9uSlHnexjGk0e2i4Dw53lmpdt5ZfrthlK6nVoWMw+8rY4eaSFF xMsVQzo0lhNq7oP7RqVVyJDjIm3L4dJbz20QEyEQCY936BTrJDudnzEF4idqBdeXy7/C Ezm0+AEUDphxCkRXZNEke//AahNg1RODQuJ76N/BLyUh2ae0+kYIAtOCKk5HB+wR2PE1 /hzjwvwEE/5jmOfKNQ80ZiqW1RC5g+mCEVy3+SDGvBg5zjJSxqQ/zDD+oPRguPDDJPyl 98kg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=SX2sc9ks; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g17si2714195ejr.649.2020.09.29.05.24.18; Tue, 29 Sep 2020 05:24:42 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=SX2sc9ks; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732392AbgI2MVT (ORCPT + 99 others); Tue, 29 Sep 2020 08:21:19 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45138 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729859AbgI2MVI (ORCPT ); Tue, 29 Sep 2020 08:21:08 -0400 Received: from mail-pg1-x543.google.com (mail-pg1-x543.google.com [IPv6:2607:f8b0:4864:20::543]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 486ACC061755 for ; Tue, 29 Sep 2020 05:21:08 -0700 (PDT) Received: by mail-pg1-x543.google.com with SMTP id 7so3722721pgm.11 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=pTsVHR2uOeV0pzrtpDbJzCILkRWgaGBs5kD04GTC2XDjJG1WPZv7TLLZRy7T6P4IGK 3tAIRisAFKJ50UhN/X32IZxlPZGa9d20uyu9DxAvPU5Cy7PiUyUbTsq5JF4O3cOUuY6I bcO8JmpP57u+NKZ7WU6Mtz5XUSBWEVKksmRAkWEXl563ZE2sHMsQr4214ua9fMY5gvaE BdIK4m1+R42Q0lPw1abDqlekzv2cIvs4WxkttiHuvX2kkFZugtDT0qDJRWUPFiSO/vp4 0MKRzEj4I+FkeahIjUE0noKnWtq9OJbXLmKZCX1QLYKTStYSLbZmcLqREBwee+jBKCXh nfag== X-Gm-Message-State: AOAM531W3H+nlqZidJy3Xn3YZcnote5+RsGvc95QHUICC7QoH9luo+pY dGF0vApX5rGu5a3M72CAdoHJvI/QA9XJEwyo5qqSXg== 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" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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?