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 Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0A85BC636D4 for ; Fri, 17 Feb 2023 11:07:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 83A076B0072; Fri, 17 Feb 2023 06:07:29 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7C2ED6B0073; Fri, 17 Feb 2023 06:07:29 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 63BF56B0074; Fri, 17 Feb 2023 06:07:29 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 51AC36B0072 for ; Fri, 17 Feb 2023 06:07:29 -0500 (EST) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 0867C41605 for ; Fri, 17 Feb 2023 11:07:29 +0000 (UTC) X-FDA: 80476507818.21.FBDDCD4 Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) by imf10.hostedemail.com (Postfix) with ESMTP id 5680AC0025 for ; Fri, 17 Feb 2023 11:07:27 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=qZoB6rRn; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf10.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.214.178 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1676632047; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=QZTCpwoqSxAuHWQ6Ualf+NSmhnZey5ULzRU2vpqw9C0=; b=Y8w4nKdTVackYVdLGu6BAEMa75Aylcfe1upV5LJplbve4C+y5ePAOV78nm1ExHSAxPkuLh aaZBBBevRCNPabfHVuT/jeRoGdAWKWt/H6t796tHqE+NVcMqIDT7/E6qzutTLsKKaFbPxI cA9nquTsT9UXSIbzF5yTHcz63uO78aE= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=pass header.d=gmail.com header.s=20210112 header.b=qZoB6rRn; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf10.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.214.178 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1676632047; a=rsa-sha256; cv=none; b=6e4dJ0fohPMMa1pvMjQaNICD+7sYi4YPLL9mRCtAf687Z9eWeJLNpeEed4J2pI/1c4W1zu 2o0mkoKJEDMK3OB5Dj9HrnriJeXyYRp0mtMj1HlbOJlfOtt1/64wrxvp2rEHhqzrmuZlZB osTx49x4ALuIfA4tNkZhKTrGia1swA4= Received: by mail-pl1-f178.google.com with SMTP id 19so1126989plo.7 for ; Fri, 17 Feb 2023 03:07:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=QZTCpwoqSxAuHWQ6Ualf+NSmhnZey5ULzRU2vpqw9C0=; b=qZoB6rRnFYOY7dryuDkENPi95+rHGBcbjSiPeGYSwwaIMKwGvzOL8gFCfeccKmvvUe VCOrN+aWxyswoIM+nJ9ByeSKhP1Qn6OeTmiyKV3QstDycY6Eyde2EZhjYXEkA11sUBdY 2PJ4RvE0WTPJYv7wbsUtn3PJDuw/qYUjIECmCKHD7tT594wDF5orRAiCCJpkh8JNLvGg SxDRIMXKBMyQA/Bky4Pr19xUkzaF/0oQ+pJrg96SBlPTBTpNFa6stJQwphW9fHO3vic/ j05wXTtO2RfLi6p2i6yz6PXy3fwqLN2+VFBZAjMrQf/8RAlit1JV745byRDm6cjFccrX rCew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=QZTCpwoqSxAuHWQ6Ualf+NSmhnZey5ULzRU2vpqw9C0=; b=GmbOeZSRW3WQobWyTccnVDifS8yCZw7o3imdYjU5J+2gvne1FQISZ4WweNp5qB8DqT Z35Puqe4X4dhJgBHkUvySKwFrY471qzpuPIHKVIs0bi/OC0S7RR0hqLjuCk1NwZJ8pL0 ydMFhOoxL99GKDgs0pXA1qpw4DFFKD9027rY8/o6kR2KXuYI9C3umUGg+5P6wj9nb0nP 8nWSk185M8djvTxIGGBTsOVu7Kk8iCiCkTJB9tcnK0wrH2Ikcu6MN8wBBiF1jLINQM3L N57LbA5WE7ZxppOGgbl/E3MBXTLGTEY3GN+GbO9F/El198uElw7sIQE6HaCicqoUDg5X rSPw== X-Gm-Message-State: AO0yUKUGtXP3OEdMUbyafOZGp6nFTscruOKBElvartlwOlGCHrpXfeog AMCGyqXPGajMch/mQR97S3Lc4/h2nFfSh42zBZ4= X-Google-Smtp-Source: AK7set+OctLbWFyx5cca3jqHlyQ/eW4S7hLEL2flbX6wuF24mitWOag4ez7LaEr+2z2Sf1CgfI7KR9byU3gyzzjw10w= X-Received: by 2002:a17:90b:1f8f:b0:233:3c5a:b41b with SMTP id so15-20020a17090b1f8f00b002333c5ab41bmr1428877pjb.133.1676632046068; Fri, 17 Feb 2023 03:07:26 -0800 (PST) MIME-Version: 1.0 References: <20230216234522.3757369-1-elver@google.com> In-Reply-To: <20230216234522.3757369-1-elver@google.com> From: Andrey Konovalov Date: Fri, 17 Feb 2023 12:07:15 +0100 Message-ID: Subject: Re: [PATCH -tip v4 1/3] kasan: Emit different calls for instrumentable memintrinsics To: Marco Elver Cc: Peter Zijlstra , Ingo Molnar , Jakub Jelinek , linux-toolchains@vger.kernel.org, Andrey Ryabinin , Alexander Potapenko , Dmitry Vyukov , Andrew Morton , Nathan Chancellor , Nick Desaulniers , kasan-dev@googlegroups.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-kbuild@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Rspamd-Queue-Id: 5680AC0025 X-Rspamd-Server: rspam09 X-Rspam-User: X-Stat-Signature: xs5imaguihg67tnin46q714guzjh6ebs X-HE-Tag: 1676632047-787311 X-HE-Meta: U2FsdGVkX18H7sJ0UmVLNpocaBjMIkapb+wjdcI0X5R0ERXdu+kExFDLKudYGeHn+Mrnim8Y5b7LsR/UeX45Izw0pglsm/AS+w26Cy+8lmMHW/fnHfHSJYOMQz1DDar3DoDVrrdh+o3ogk+kc/vspaS7qnM9oNMnpGuHFF6f1sDbJGxC8Evgq8jAOXPtSp9Sa9SAm2yvWzFQuf7SvlxBK3eMMqQW3e/wvSbPPaKmKU6B6xt8ULHG2FJNNY5wIuEklxi5tCkMRCpJA/lT60cb0gpzpem8VT3X6FZsxZbxapUa7ROJlg1ggzeKKqdTVtGq3DxZ5CxMZuS9HR1q1WiSSw5Dwiyku5p7Tu/dX0LDPNzP/Ikll8qI1SLoB/OEL0U8STKzUp/vQGjzpfUHTwuBJyf6KdE+tsZkAm933tUOo+6Wuuo2bKLhTuVOrs6OWCZRa290KJD6CSsfWnOI5oyKQ5Qvp9iBRs9HuZiNnHV+kuoaO6zbzOAxvN38db14O3ujfXwIkq2wIbNP13JrY1eey218SUxAylkrR0NueS6m5BV4w4FiPk15S+YqB1fv6dpbFD/pgD8nH0ruOAr0iKE5iNG1WAh88+ludwlAlimbYT63dU/mQHvRffE0yBAs0QQngli9pE+ESPjDvODiSw8y5cFpjHzitMyfOJjRHp9Uc3YZj7BesUadspJj8R1ieMgdF3Z1syUzqhzy1DQMG/37g8siJ+VuV0ccEsA5xN50akegUPvFxeycY6Hm0WWphUXjxfGzBg1N4Zm0G4hDFi1rItTxbETMhH+iMtFb7n7VQwIF9dFRYhafSa7mpvHZhxxjpTLgco8MBYpz1R+UKPkPCuzLjnwxHSThEenfVgnGkWJpK33opdCN3I6nrphkyjVon5vmSu6XKL11MB9ldD4Pxxx4zNsHyikOHS1iuR7xafT/bKa4FQXbZeTnEej+Ppo6cf0P0u/9W7iztW3VVgO /jPndYO6 xVs7ynsT35iXJUi6mK25933OFovrM6tPn5h4Yd8DfaSyF1XY/bIe2yHNyCnHiTcuVczumAz04wBxOFlVVKPmu+nwcQsQKwxq39PJ33j+h+qGa4TmLbtcyVpX+RnixiEDKefvy5rIZqb94xesnunOqv2EMSR2DJhRXuENNn1xJWqGPgkWOOgIRgFRyt4fL1SgyiG18svT3YMBzgNHVsdSJ/HQ9BfRLAwXtxS8h8IKSWT2R7tVbvSussC5Y2yfortoKWSA9sXIgjt/srrkUJ4Zc2ffwrwD/2NneHQX/7v/onuns0C8QIztC91B0CXAFhRLC7VmljWKktgxBAUEaUrpuzCiQrdkjmYiVyT/naFidrVNN2veur9UzU7jI9Lo5LUuf+aXsQKYaR++TkvrP0zYUS5aPQ+kKw/YMCAaoSRDmYTc9i1c2WaDalPfkso2K23oizw6FwRFzEQ2QcfVswLVqUMqnVZFdXOr012NZd0qPMFnZzb7+HD1P70mo3qZ/7Gh1jxt8aVYQq5cx6SNYZvIGMYS+8cuhlSMdkpaQ4VeR/ssr8j06jZtHKQQ/rUFEiDRCpuL0 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 Fri, Feb 17, 2023 at 12:45 AM Marco Elver wrote: > > Clang 15 provides an option to prefix memcpy/memset/memmove calls with > __asan_/__hwasan_ in instrumented functions: https://reviews.llvm.org/D122724 > > GCC will add support in future: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108777 > > Use it to regain KASAN instrumentation of memcpy/memset/memmove on > architectures that require noinstr to be really free from instrumented > mem*() functions (all GENERIC_ENTRY architectures). > > Fixes: 69d4c0d32186 ("entry, kasan, x86: Disallow overriding mem*() functions") > Signed-off-by: Marco Elver > Acked-by: Peter Zijlstra (Intel) > --- > v4: > * Also enable it for KASAN_SW_TAGS (__hwasan_mem*). > > v3: > * No change. > > v2: > * Use asan-kernel-mem-intrinsic-prefix=1, so that once GCC supports the > param, it also works there (it needs the =1). > > The Fixes tag is just there to show the dependency, and that people > shouldn't apply this patch without 69d4c0d32186. > --- > mm/kasan/kasan.h | 4 ++++ > mm/kasan/shadow.c | 11 +++++++++++ > scripts/Makefile.kasan | 8 ++++++++ > 3 files changed, 23 insertions(+) > > diff --git a/mm/kasan/kasan.h b/mm/kasan/kasan.h > index 71c15438afcf..172713b87556 100644 > --- a/mm/kasan/kasan.h > +++ b/mm/kasan/kasan.h > @@ -637,4 +637,8 @@ void __hwasan_storeN_noabort(unsigned long addr, size_t size); > > void __hwasan_tag_memory(unsigned long addr, u8 tag, unsigned long size); > > +void *__hwasan_memset(void *addr, int c, size_t len); > +void *__hwasan_memmove(void *dest, const void *src, size_t len); > +void *__hwasan_memcpy(void *dest, const void *src, size_t len); > + > #endif /* __MM_KASAN_KASAN_H */ > diff --git a/mm/kasan/shadow.c b/mm/kasan/shadow.c > index 98269936a5e4..f8a47cb299cb 100644 > --- a/mm/kasan/shadow.c > +++ b/mm/kasan/shadow.c > @@ -107,6 +107,17 @@ void *__asan_memcpy(void *dest, const void *src, size_t len) > } > EXPORT_SYMBOL(__asan_memcpy); > > +#ifdef CONFIG_KASAN_SW_TAGS > +void *__hwasan_memset(void *addr, int c, size_t len) __alias(__asan_memset); > +EXPORT_SYMBOL(__hwasan_memset); > +#ifdef __HAVE_ARCH_MEMMOVE > +void *__hwasan_memmove(void *dest, const void *src, size_t len) __alias(__asan_memmove); > +EXPORT_SYMBOL(__hwasan_memmove); > +#endif > +void *__hwasan_memcpy(void *dest, const void *src, size_t len) __alias(__asan_memcpy); > +EXPORT_SYMBOL(__hwasan_memcpy); > +#endif > + > void kasan_poison(const void *addr, size_t size, u8 value, bool init) > { > void *shadow_start, *shadow_end; > diff --git a/scripts/Makefile.kasan b/scripts/Makefile.kasan > index b9e94c5e7097..fa9f836f8039 100644 > --- a/scripts/Makefile.kasan > +++ b/scripts/Makefile.kasan > @@ -38,6 +38,11 @@ endif > > CFLAGS_KASAN += $(call cc-param,asan-stack=$(stack_enable)) > > +# Instrument memcpy/memset/memmove calls by using instrumented __asan_mem*() > +# instead. With compilers that don't support this option, compiler-inserted > +# memintrinsics won't be checked by KASAN on GENERIC_ENTRY architectures. > +CFLAGS_KASAN += $(call cc-param,asan-kernel-mem-intrinsic-prefix=1) > + > endif # CONFIG_KASAN_GENERIC > > ifdef CONFIG_KASAN_SW_TAGS > @@ -54,6 +59,9 @@ CFLAGS_KASAN := -fsanitize=kernel-hwaddress \ > $(call cc-param,hwasan-inline-all-checks=0) \ > $(instrumentation_flags) > > +# Instrument memcpy/memset/memmove calls by using instrumented __hwasan_mem*(). > +CFLAGS_KASAN += $(call cc-param,hwasan-kernel-mem-intrinsic-prefix=1) > + > endif # CONFIG_KASAN_SW_TAGS > > export CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE > -- > 2.39.2.637.g21b0678d19-goog > Reviewed-by: Andrey Konovalov