From patchwork Fri Feb 24 08:59:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marco Elver X-Patchwork-Id: 13151046 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 AB5CDC64ED8 for ; Fri, 24 Feb 2023 09:00:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id F3C306B0072; Fri, 24 Feb 2023 04:00:02 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id EEC8E6B0073; Fri, 24 Feb 2023 04:00:02 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id DB4626B0074; Fri, 24 Feb 2023 04:00:02 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id CC0AE6B0072 for ; Fri, 24 Feb 2023 04:00:02 -0500 (EST) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 79B4016173D for ; Fri, 24 Feb 2023 09:00:02 +0000 (UTC) X-FDA: 80501588244.10.1529608 Received: from mail-ed1-f74.google.com (mail-ed1-f74.google.com [209.85.208.74]) by imf13.hostedemail.com (Postfix) with ESMTP id B961620012 for ; Fri, 24 Feb 2023 08:59:59 +0000 (UTC) Authentication-Results: imf13.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=nsiAeT3s; spf=pass (imf13.hostedemail.com: domain of 3jnz4YwUKCI8x4ExAz77z4x.v75416DG-553Etv3.7Az@flex--elver.bounces.google.com designates 209.85.208.74 as permitted sender) smtp.mailfrom=3jnz4YwUKCI8x4ExAz77z4x.v75416DG-553Etv3.7Az@flex--elver.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1677229199; 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: references:dkim-signature; bh=utTJOkvRGl0nLL0ic/scm4HYcaWRO/7AK96vkAXGENA=; b=asFDm4AZEPW301rOscy93j/hfeHY+QeWPhv/zPVOhhShvSmAy0TtUbe0ZP0zE3PQr5RRaW pgiH9K+NAv7BQUwP1AmKk00JYZHPV9A2QBryJGp00dhgJnZHC7KsMDBggJE87UG9d+ruLr 8NuXLZh4i0Jfd4z9bAc7MZdjiOhI3MY= ARC-Authentication-Results: i=1; imf13.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=nsiAeT3s; spf=pass (imf13.hostedemail.com: domain of 3jnz4YwUKCI8x4ExAz77z4x.v75416DG-553Etv3.7Az@flex--elver.bounces.google.com designates 209.85.208.74 as permitted sender) smtp.mailfrom=3jnz4YwUKCI8x4ExAz77z4x.v75416DG-553Etv3.7Az@flex--elver.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677229199; a=rsa-sha256; cv=none; b=vwu7jFlxsxl+lljWn6QqZ9bFSKv/0q6TGdImK85OR0mOJOsjeD0unSbSrtZnc6frKTpvue 7JwukpF1smcny905L5aRm8cQgASTUsrsY34gwx0mYpI9TzCcDI8pU+QxHEBw1qKu2GgtcW iLffOm1VNzaboEZnGq2Zb1TLP1dIkZY= Received: by mail-ed1-f74.google.com with SMTP id ec13-20020a0564020d4d00b004a621e993a8so18498103edb.13 for ; Fri, 24 Feb 2023 00:59:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:mime-version:date:from:to:cc:subject :date:message-id:reply-to; bh=utTJOkvRGl0nLL0ic/scm4HYcaWRO/7AK96vkAXGENA=; b=nsiAeT3sqIcbbasW+A96bARZ2VdXg782ZVWDGh5Re7HD9f4mYtT+ysgkT9VaSYSDrH Rt4TDQx49hmvv3dcUub42jH8GPt5vPl0M/QeQG2yLn5WWBP/FQw+2Yan4s6yH0Ro/ji+ qS04eow8+5dPkdqHVrlo7OrazijhFKLKXddf6vGB5bcrovGys+5MHMKJGlr3sX0g+aeK HJKPaB6YSIopEMkopNcvfHJzy5rQ3+3mg6ey/bGzmAV3npR1fWi4TbHzdXQXTxHDub6b LPjWI4kXgF5wO0d9LH+hU9z9czrjgeeciuNaAms6fH57FV7NV3wEL+gW76aoozJ6QbnN vFGw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:mime-version:date:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=utTJOkvRGl0nLL0ic/scm4HYcaWRO/7AK96vkAXGENA=; b=s8Ry2ohoWVmDxiqrwde4X7SkCtArGMglfVzzU/8x8MofMm/2w0cezSh4LqEqrV9yXS Lo8w7vxzH3wg3d38byZPDXZoWItDt37utDFpvHqSJjYaD74WvMVCmIEiSD1OF++f0Jg6 B18MqcacDIOqnMwtlhJfDG8keBeTF90ce2me+T3SPW0f6HXExHPRqLdIq/PuOTcaHfR3 Tqt6C1XI/OZYoG6nevKYu0FSu7oHJHvzMfBOovHlZ3eXGDMfF86RcEryEqFanytu2L1V 79vxYFYcdnOyvU/8AiokIKv6dr4VndWGjKaxQ0H4OquvlM0y8RXOSmAU5CJbty86BJgw VlxQ== X-Gm-Message-State: AO0yUKXFP+ZdmadkVl42/caFv75iwZS4PdidSnp2M3/sXM4U6AfcUvGD oD5GlNm6v5p6BpvRL7FOAX5+kVFZ4g== X-Google-Smtp-Source: AK7set9s24s+5VohUfii+zFTuaQPsjyDds6x0J8bwgW3veskTcuKrcCryCoVd2C3OOn3WOO7VsqdRu1bog== X-Received: from elver.muc.corp.google.com ([2a00:79e0:9c:201:53eb:6453:f5f5:3bb9]) (user=elver job=sendgmr) by 2002:a50:d682:0:b0:4af:70a5:55af with SMTP id r2-20020a50d682000000b004af70a555afmr2075203edi.1.1677229198008; Fri, 24 Feb 2023 00:59:58 -0800 (PST) Date: Fri, 24 Feb 2023 09:59:39 +0100 Mime-Version: 1.0 X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230224085942.1791837-1-elver@google.com> Subject: [PATCH v5 1/4] kasan: Emit different calls for instrumentable memintrinsics From: Marco Elver To: elver@google.com, Andrew Morton Cc: Peter Zijlstra , Jakub Jelinek , linux-toolchains@vger.kernel.org, Alexander Potapenko , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Andrey Ryabinin , Andrey Konovalov , Dmitry Vyukov , Vincenzo Frascino , Nathan Chancellor , Nick Desaulniers , Nicolas Schier , Kees Cook , linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org, linux-kbuild@vger.kernel.org, linux-hardening@vger.kernel.org, Linux Kernel Functional Testing , Naresh Kamboju X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: B961620012 X-Stat-Signature: etfa8tfouei8aw5sxx4dbp1c578zsu1a X-HE-Tag: 1677229199-340659 X-HE-Meta: U2FsdGVkX1+dKtiAeWMQEdF9zATFnBSB21ZbCPuEpdzIgb79/sWBWthJiYu5BtfMT4zyQFG54hj15BUcVw2FhgliSp3PoDCKZVwN9c+hV1vdvARcio6ENaz9tVgZWmod4Il+5QRF17iIfgn0roh2QvO6+svtnmZoNAq9vY19oNkJqppPQqpxxKesbLPoq6GKRYMgCkhdiRx8jq2ARurDBbTvQEqy0PmZlAtQDuFUr+HRiCxCTt5F/DJINVSaNV834f8LlGF42HChamZ4fbsp1Sjio1tp2+XXw+g+/2Zo9AsjKgad7B8V2oZU4nPulTl4gADbkxG7vkypkoj9eJ7qN+Xyne6l+VwhjfqFcVKJmj1bjEI2FtMAghsNFikAF9dnCie+gz5Gom9n/4z0dByBUadLU52B3Jii65MJaNCC9/YqZuHqEqcvBsuhsvcnDrFx+pGuHnNwSgYFfikRkt0/sk62+i/HWDdh2TAqWD50dEqhaE+1APBlMkO7H/yx2mHTdNejNoi2SPLhrgNn+A0BaKW763Z7HcL+MU30P9IodQg2nXcC1oUNkx1WR7YYEJ/sFfcIJYYZHNFUBfSyj4IrYdbpWUXVaziTQ/pi1l1bPoyaCXIbS1B8PgAu4EkHIMYzwmn5sxzRchnI7vGg2ll58XchxeHQwJ49P9L0eABgPw5AAnGq+oRGJnCy2W/ZWtAAoZP5ycB4cJpVPsQbg63CPY/ym3zB8iNvFIG2BOXxZdqDawnQ8S1vEo7Xr3omSl0Oy35j7zJR3Vc1fCc4fGE/QRSTL+glbuW1+R/SFOBWHMpzLQKah9e27XoiUHVrd2UHSr5UqK0KufaYxLmW/1Ho6tyV5RQnEWaXAs1LIlAIwp2bdaKGtxh8GZFftxkZEgGRZdBndwuLs/Of8yi11nPCWH6Nn0lAZAmBfwx0jh6njKoqnkQq63ZptPIh4TVZTJu9zjsBfvvCvTFAOBGC+LP SJrdJK3p pos850CNCL/DItkwtzlK5IYo7yaDhfuAwYy2CMITwfVlV54XInokRFBNkL9QMz9Ju2+szsjaMMBO/MNgM18XN9VP596VMSsLgK4+r8D9hjJNAVjEJUrpc7RV6+Pe42buw4lTtj8h8I3V9V1zwzfbsdGAh+umk2cgcuPG6duWVIR2Z48BqSNgQCiCowWh6KtSUTWhze9d9SyxeLA95CHF8199bkMDcnKH+oRnRPw3mkclER9Ngvml1roAfLZFlcrDLsrJ7XO4FkSfLm1VbSBKs/xhOIY9wLoMosx+chLczJqmNH9WcOvSdsxp8+9DZIyAvwlGgG+MFfRqbXsVq9WcXqVlXjo4tByYLGrN/3K1b8jsgETqQrTiurqGf/jNP0CvHMSI2x8n9o0PW+PU5/y4cm6t1jz+W3Hp2OQRI/bxOukKh2NyJdlRJbrIispZzoUXB1shHvziOGB8VtK1iYdQlKZFl8Veqr/cXbFeQtnpg2AYKS9QidS+xy+UvNXlQr9LS4d66+ldZ3xHg6xY1sIUoo8alyKC8JkZH1mDhLzdWvOr0Kgrr0Zfw6E3U11B0AdG8q1mdE6wEaQUCSjjdsQMyiPYaNtMOtT6JdFE7ANzySa5chnGEI9R4g6XIved5tFr15ophNu1OQwqkjswc/6+pO49BPqPj7WT6abGGPGVWYUZ00cAWA+2EiqT5m4e9IjA3bC9HaD5vNqMxVjeqe+Syf2KoIguKLCFAToQ7ouKlGp2CfaY3ykwOr68khkprUJfaK3TKZzW5bgEUUoV2paV76FTTMoOInl/+cg1BHXdywnfjnv3KDDsXsvH9dFBj3Koj6494iC2Eh5kIUs0LqflDZlcmupWXI0tjQLT6 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: 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) Reviewed-by: Andrey Konovalov Tested-by: Linux Kernel Functional Testing Tested-by: Naresh Kamboju --- 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 From patchwork Fri Feb 24 08:59:40 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marco Elver X-Patchwork-Id: 13151047 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 34C6FC61DA3 for ; Fri, 24 Feb 2023 09:00:06 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 8D4076B0073; Fri, 24 Feb 2023 04:00:05 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 8841D6B0074; Fri, 24 Feb 2023 04:00:05 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6FE416B0075; Fri, 24 Feb 2023 04:00:05 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 634C86B0073 for ; Fri, 24 Feb 2023 04:00:05 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay06.hostedemail.com (Postfix) with ESMTP id 05721AC108 for ; Fri, 24 Feb 2023 09:00:04 +0000 (UTC) X-FDA: 80501588370.09.D7E593F Received: from mail-ed1-f74.google.com (mail-ed1-f74.google.com [209.85.208.74]) by imf04.hostedemail.com (Postfix) with ESMTP id 2C7A24001E for ; Fri, 24 Feb 2023 09:00:02 +0000 (UTC) Authentication-Results: imf04.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=KNP4d6RV; spf=pass (imf04.hostedemail.com: domain of 3kXz4YwUKCJI07H0D2AA270.yA8749GJ-886Hwy6.AD2@flex--elver.bounces.google.com designates 209.85.208.74 as permitted sender) smtp.mailfrom=3kXz4YwUKCJI07H0D2AA270.yA8749GJ-886Hwy6.AD2@flex--elver.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1677229203; 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=Ni0X0/loZejzrEM3ahtyHsQ4czmgqm9WNAw1TT3btvM=; b=0yBqfQHgQlCAaAMPza7eBCDAaa6RuLC+j3qbnK4ljS+opry1A+4CeFGEiMtPSEpTnKu5XW ul4Q+NX2OQ11ig1g4Qq1LF8fYQX6BXhzYOdtnURpvJ6Y0VSteE0P5zM47n4MepZgAECSNi 5RxJg7Tq4aZ4DhIzfoxFmvAcDzBWC5M= ARC-Authentication-Results: i=1; imf04.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=KNP4d6RV; spf=pass (imf04.hostedemail.com: domain of 3kXz4YwUKCJI07H0D2AA270.yA8749GJ-886Hwy6.AD2@flex--elver.bounces.google.com designates 209.85.208.74 as permitted sender) smtp.mailfrom=3kXz4YwUKCJI07H0D2AA270.yA8749GJ-886Hwy6.AD2@flex--elver.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677229203; a=rsa-sha256; cv=none; b=MxD+jXutWItE0KvuJJAbeqqc3ytnCrYJwFAF/Y5qA8BXy7tjkxO22oZE1EF87KjC45m+LO bsRjlKfa7kaNTincs7wa7KbmIxNDFLXZh3DpszRAN4XlTobcA1ez2PBdvqrzKJsKkXDgLt QYWigKVoVhTfteAnIwDxZxzhSKFjfq8= Received: by mail-ed1-f74.google.com with SMTP id b1-20020aa7dc01000000b004ad062fee5eso18442516edu.17 for ; Fri, 24 Feb 2023 01:00:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=Ni0X0/loZejzrEM3ahtyHsQ4czmgqm9WNAw1TT3btvM=; b=KNP4d6RVhpEjbQC3l2fT7kAl4C3wq4IJLBgd79IVsMNh23YbWQPxqNeNp4PNlX68dW rVjsIqPdml9xCdbYExTQnHkglHOraVKUHi8/qeMC3A0BjfhF00nI7oV0i9lYvUjp+3Jy 06s7+Vsgaq+qITEL4UlWWmUEyFOmvxmbI33WEdvg/44hzTfS1YsYyJIlEIoO1pADPPyI wUvDfvgb4DtiXPJvyc4ll/OFNetXkSHQURg/uKU+DyYrlA7oBOh6BQ/bmc0NaIgLL9F7 fa7+HKeZezfK5A1GpEJhWgtD/OGQgow/R7raRNgP6kyn44OIn90x9bADVFlDj7e3pksb GLRg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Ni0X0/loZejzrEM3ahtyHsQ4czmgqm9WNAw1TT3btvM=; b=bTB69VVYxa03scLIRIzU8yc5UKmIK8X4JuhRviIOa13gUaUWlkkokPRsBaxgGCd4mw gmk2MnS43WaO/CHFxLeck2mWRlzoWYU39DYTGlO0QUxlc34NngFUXveFi5VEwpfI+FB8 vZiolHK9Oa6gRzLUQuKUKaAJX3UjzSMpuPAT0zKL1TbzL9QuhB1FnsLknaLlDvUVhray CQ0HqLSk5rTojVme6wmq/SQzobQUarObtkMaIXkh2oXuFzhLgmvFmJ9JYBxZ3Mt5Rn6l +9OQH/YabZcF4a2/fkRsiTY8KY/SHMmUMxuhD4j65xrWh7PZuBIMKau6+KZfDMOPNePa Ew6w== X-Gm-Message-State: AO0yUKXSuEihchIvSnr78VpOa3F/WUXslzCFaqbJHx9hRi/L4Z24kqjr o/zJtcY0XKAFaZ9WURrYduAQt9qkAw== X-Google-Smtp-Source: AK7set9rZ9eUb7bGWTMJ7DQioL+NOIJFyBh22lkV7CejLhB9j4FRWsGV+zy8NVqE9CeBwZV5bua6ewKcaw== X-Received: from elver.muc.corp.google.com ([2a00:79e0:9c:201:53eb:6453:f5f5:3bb9]) (user=elver job=sendgmr) by 2002:a50:d544:0:b0:4ad:6e3e:7da6 with SMTP id f4-20020a50d544000000b004ad6e3e7da6mr7001699edj.6.1677229201684; Fri, 24 Feb 2023 01:00:01 -0800 (PST) Date: Fri, 24 Feb 2023 09:59:40 +0100 In-Reply-To: <20230224085942.1791837-1-elver@google.com> Mime-Version: 1.0 References: <20230224085942.1791837-1-elver@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230224085942.1791837-2-elver@google.com> Subject: [PATCH v5 2/4] kasan: Treat meminstrinsic as builtins in uninstrumented files From: Marco Elver To: elver@google.com, Andrew Morton Cc: Peter Zijlstra , Jakub Jelinek , linux-toolchains@vger.kernel.org, Alexander Potapenko , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Andrey Ryabinin , Andrey Konovalov , Dmitry Vyukov , Vincenzo Frascino , Nathan Chancellor , Nick Desaulniers , Nicolas Schier , Kees Cook , linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org, linux-kbuild@vger.kernel.org, linux-hardening@vger.kernel.org, Linux Kernel Functional Testing , Naresh Kamboju X-Rspamd-Queue-Id: 2C7A24001E X-Stat-Signature: pbns15fkkftjuoxzraawbd7nj4qh3nhm X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1677229202-683957 X-HE-Meta: U2FsdGVkX1/ZAzWA8XVDIZWX5TkgHHSworIPMZgyzEuhKAX2vvx4aXwpjKJ4atM4bplZJFsHbsrWhCjUBQFtrdpXES9K8rAg52Yr+mnBQySQCTEKVjl6YVOoAqEc9MuWMy0by+ZCBEZ/hnKhVc92CeTfNCSwIFmsrxf+4Q0dnpOih/0Yj6L/3LvyFWItNTWFUfa/jNtKPJT/10iAd2/vOL0TUhcUlJArotnZhJ6ne3mnb/qriUKNxQ4TiunEbHQZaLaBTmwI4I6QIbZivPALCwfo9Bv3tg8UL9+ZJmwCP4wp42R/t5fbO2mVfUy23PLVdgzcMGW3Mr1QWMlLM+Eos2tfnnyYofNmYehfruFkjfTezLo5QlUpBN+WGSWk0cdHvq346GWuKNkSeXA0MqNUx8EetPw8NJ0jEXIFfCEB16LCx9S0YKeU6836oKmDWElpbTzNhRwI7Nm5xHYV6rRYj4QE3VBgHoRoY8IMG/MhO/Vhvh0hx16jB2DRvrdcmPbQrnDUGubiMLXnhMnDIK6cjlCAnLxFPgil0Hbust2Evvm8rIaJUVoa8I0fo9UF/p4EUekm2ZQmwOMZ0MZIG1k5LR+pUjcqoFK7ASh8kp2ra0fz/i3IzmPKp3tJtXzP6/zPWDXA76aHSzRxhz2SZvBBuZMdv172yOanIp7GI9VQl1xsXvWmDpJEaUavm8Vb9g3wyyIRBL6k4MwDewS+0255EelOAmW7nVyUhTaJvDH/6tjdZu4Aa0Ep2upRGRmmEmII46AVJkQ5Q/SGjo02+F9UBu35EzlpJu68zLVEV5z+s4clHfadKrIxJ5TU26CEvoWyqe2XohgjnxIz2dL8vN0M4I0l6C0zUwHZuQIxotEuiM6iMqCaxCI/JcY8Q4sstNtC8Zbe+tNlO9Fj059VB01t6u/fBUzW9u9fqf5ECNmmWNaqQSJeUAPcEsxqhoTDWtTSaMmn+/6/IMmHozzZara ugCnADR8 ici7+itDsbScBAWMa+PVTKsRCex65WauB5Ffpwu09kc5gG/rHj3y4mstttztLmdllUZEfLZdlr5nzN5gDh1Ixwtp/5bXkppticBU9lc8Oy++ngCZVlWRhykAdnHhqAwElH4aLGN+55PqYwYx6nWb+jsviL4hy59nLoqR9A0iUMwmP9DkfWmpU8zCP6CbP3fQUYpi951Aq51X6+VLFG+JtgqXUtcawFOQZfwuIHlxYljCdizY0qhYAYULtGVh6n9M4ga1h3+DOFyANmDhMfEpgyNbngSl+UQAzery/R1LYMmgGm9x6po71jEQ5nkcjyRlXBKRz6F1euwKDA1Jl7QlZ77EulqUZnb+HaLvSM3Cwb0ysjMsxFNBVTAKP0PXbCsY8uekyM+VqUHWhmH28j4fVpJQgPU90D/u/XhxKixa4Padbh7DnRjSkC3LFHP0pAWPOf0meXHV/bRosyhpA0Bfzwvb0tNnICETQD6cosGxiKrLBxQ2arPFhkLofqvusrSjcxwfnf8CE2GB/Y8gunGvbEi8TxtsdXPq2L8+qp0GzJpXnLO8weIqqcyuZwOzjQAMjT9IUsS5wCyJIzf7mIbIEgYzaiKCvanB4QubTGgOHK1JzLmBjdfV6Vnv0Jlz5xvFjjaSvXf0tlT3DxYem3hvoIIp6ZWH/yaim/fzNrBepJSmkH70= 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: Where the compiler instruments meminstrinsics by generating calls to __asan/__hwasan_ prefixed functions, let the compiler consider memintrinsics as builtin again. To do so, never override memset/memmove/memcpy if the compiler does the correct instrumentation - even on !GENERIC_ENTRY architectures. Fixes: 69d4c0d32186 ("entry, kasan, x86: Disallow overriding mem*() functions") Signed-off-by: Marco Elver Reviewed-by: Andrey Konovalov Tested-by: Linux Kernel Functional Testing Tested-by: Naresh Kamboju --- v4: * New patch. --- lib/Kconfig.kasan | 9 +++++++++ mm/kasan/shadow.c | 5 ++++- scripts/Makefile.kasan | 9 +++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/Kconfig.kasan b/lib/Kconfig.kasan index be6ee6020290..fdca89c05745 100644 --- a/lib/Kconfig.kasan +++ b/lib/Kconfig.kasan @@ -49,6 +49,15 @@ menuconfig KASAN if KASAN +config CC_HAS_KASAN_MEMINTRINSIC_PREFIX + def_bool (CC_IS_CLANG && $(cc-option,-fsanitize=kernel-address -mllvm -asan-kernel-mem-intrinsic-prefix=1)) || \ + (CC_IS_GCC && $(cc-option,-fsanitize=kernel-address --param asan-kernel-mem-intrinsic-prefix=1)) + # Don't define it if we don't need it: compilation of the test uses + # this variable to decide how the compiler should treat builtins. + depends on !KASAN_HW_TAGS + help + The compiler is able to prefix memintrinsics with __asan or __hwasan. + choice prompt "KASAN mode" default KASAN_GENERIC diff --git a/mm/kasan/shadow.c b/mm/kasan/shadow.c index f8a47cb299cb..43b6a59c8b54 100644 --- a/mm/kasan/shadow.c +++ b/mm/kasan/shadow.c @@ -38,11 +38,14 @@ bool __kasan_check_write(const volatile void *p, unsigned int size) } EXPORT_SYMBOL(__kasan_check_write); -#ifndef CONFIG_GENERIC_ENTRY +#if !defined(CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX) && !defined(CONFIG_GENERIC_ENTRY) /* * CONFIG_GENERIC_ENTRY relies on compiler emitted mem*() calls to not be * instrumented. KASAN enabled toolchains should emit __asan_mem*() functions * for the sites they want to instrument. + * + * If we have a compiler that can instrument meminstrinsics, never override + * these, so that non-instrumented files can safely consider them as builtins. */ #undef memset void *memset(void *addr, int c, size_t len) diff --git a/scripts/Makefile.kasan b/scripts/Makefile.kasan index fa9f836f8039..c186110ffa20 100644 --- a/scripts/Makefile.kasan +++ b/scripts/Makefile.kasan @@ -1,5 +1,14 @@ # SPDX-License-Identifier: GPL-2.0 + +ifdef CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX +# Safe for compiler to generate meminstrinsic calls in uninstrumented files. +CFLAGS_KASAN_NOSANITIZE := +else +# Don't let compiler generate memintrinsic calls in uninstrumented files +# because they are instrumented. CFLAGS_KASAN_NOSANITIZE := -fno-builtin +endif + KASAN_SHADOW_OFFSET ?= $(CONFIG_KASAN_SHADOW_OFFSET) cc-param = $(call cc-option, -mllvm -$(1), $(call cc-option, --param $(1))) From patchwork Fri Feb 24 08:59:41 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marco Elver X-Patchwork-Id: 13151048 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 9FFCAC677F1 for ; Fri, 24 Feb 2023 09:00:08 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 06F396B0074; Fri, 24 Feb 2023 04:00:08 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0204F6B0075; Fri, 24 Feb 2023 04:00:07 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E03336B0078; Fri, 24 Feb 2023 04:00:07 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id CFDCA6B0074 for ; Fri, 24 Feb 2023 04:00:07 -0500 (EST) Received: from smtpin13.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 9B9DB161735 for ; Fri, 24 Feb 2023 09:00:07 +0000 (UTC) X-FDA: 80501588454.13.23C45E7 Received: from mail-ed1-f74.google.com (mail-ed1-f74.google.com [209.85.208.74]) by imf29.hostedemail.com (Postfix) with ESMTP id BDC1B120011 for ; Fri, 24 Feb 2023 09:00:05 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b="MeczQ9i/"; spf=pass (imf29.hostedemail.com: domain of 3lHz4YwUKCJU3AK3G5DD5A3.1DBA7CJM-BB9Kz19.DG5@flex--elver.bounces.google.com designates 209.85.208.74 as permitted sender) smtp.mailfrom=3lHz4YwUKCJU3AK3G5DD5A3.1DBA7CJM-BB9Kz19.DG5@flex--elver.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1677229205; 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=U+KSe6yW61OhH8F5xK9sHNFGGyhwmdu+LoC5TlHU1sA=; b=lLqaKC7gqUr0xjS97c4qs5EgVazubYOj8D0Yv1lx6pe99TcoAUPHHRJqYmaDYda4tk5JOM YJjZrobwShkDdhdfyiZejWmaadXtzjCH1REJuOTNXgGnZ6wRNhSBdgDaEKUnXAqdfmKzGZ yL8emyObcYET23kuA1o2XM31wrv8bqw= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b="MeczQ9i/"; spf=pass (imf29.hostedemail.com: domain of 3lHz4YwUKCJU3AK3G5DD5A3.1DBA7CJM-BB9Kz19.DG5@flex--elver.bounces.google.com designates 209.85.208.74 as permitted sender) smtp.mailfrom=3lHz4YwUKCJU3AK3G5DD5A3.1DBA7CJM-BB9Kz19.DG5@flex--elver.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677229205; a=rsa-sha256; cv=none; b=eEjPm+uaVxKRoboVjj/SXAS+kTWQBdIeicsC2KBS3KVUchEahmE4cgrXSKNWarqejAFGGK 2LTEdKaJaualZjdXtB4KFCB8ppdsKKf8zfe3CLOCSDIPipcPKH/jjCfxCawdHojM6snU6f PlOydAapOerMq4YuoQmexBNF7Nx0XA4= Received: by mail-ed1-f74.google.com with SMTP id c1-20020a0564021f8100b004acbe232c03so18238037edc.9 for ; Fri, 24 Feb 2023 01:00:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=U+KSe6yW61OhH8F5xK9sHNFGGyhwmdu+LoC5TlHU1sA=; b=MeczQ9i/Gh5ybhKSh6LHvUv3XoWphMzafnUqnCe84CpugDhL780/nnP4v86GRpxut3 fN83m3TjZfUfh40XNOmFhKFmdEqHFqEVZmuhpk3Tlq5HdyAFoH1GpaVMlfTlB9Lj27L0 5bHOtC8kl5EXXZfaVzoBwKtBYrvNBPogX+U10Qu55u5F6kaBmMS4LWai8CnqIxTtePbJ r5WOcRQcj4QKFbLshIPoCj3NywHr80ZOAwMDfB2al588iDlEXtct6RN7xY79W1bHTy7a IqsyMT2L4sF1zgurIlgG2HNGoVkEKVSau31sfRUAOzTckgDPykx8WLBc2nLSHcolzkQf +4AA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=U+KSe6yW61OhH8F5xK9sHNFGGyhwmdu+LoC5TlHU1sA=; b=3P9tHpCG2VNGmIYJKfozuLdW/hGNgGeniRY2pCw2+CKjPje9i/ZKRE2UwrwSQkmiJH PiCoyZkpHCvSmHVyWZ9jHhZyNtr5frv4AHoALEowzct2KuSGmHfIr7f9hDTzlvfXeZTx sS6EkskmSPXEtQFLLSH29BJuoOu1RldNy8qUw+v2hITSpQ8NiMveUqHwbzVLHWgTqBDo KhNwaS2d8pHfC376tFFzqm+TJ4H+zTI//ZMR+kdt7MUd5w+SdKYejARm/ExgRkRg/gft oEpV8ZmlU8MBZoUAhz3qNOQHd7+WzHCvBb5DleGfCfnIdSLVZ+X6wltlFQ7UvDvS71pP /LbA== X-Gm-Message-State: AO0yUKX78waxr2vnFhhsv2tepMnTqrGvHydyk0HfoIgT8KYwQ4Gfw2RB e/LdMhdwQ951U1i7EDSt1qfz+40puQ== X-Google-Smtp-Source: AK7set8yeA9c9phELQWpHGJcxcfHs4Ohf8boIVTjey61Dmo3Jly/lRrvnHxnoJmxBuCnZumHAIuEQLl2Dg== X-Received: from elver.muc.corp.google.com ([2a00:79e0:9c:201:53eb:6453:f5f5:3bb9]) (user=elver job=sendgmr) by 2002:a50:c301:0:b0:49d:ec5e:1e9a with SMTP id a1-20020a50c301000000b0049dec5e1e9amr7086377edb.7.1677229204289; Fri, 24 Feb 2023 01:00:04 -0800 (PST) Date: Fri, 24 Feb 2023 09:59:41 +0100 In-Reply-To: <20230224085942.1791837-1-elver@google.com> Mime-Version: 1.0 References: <20230224085942.1791837-1-elver@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230224085942.1791837-3-elver@google.com> Subject: [PATCH v5 3/4] kasan: test: Fix test for new meminstrinsic instrumentation From: Marco Elver To: elver@google.com, Andrew Morton Cc: Peter Zijlstra , Jakub Jelinek , linux-toolchains@vger.kernel.org, Alexander Potapenko , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Andrey Ryabinin , Andrey Konovalov , Dmitry Vyukov , Vincenzo Frascino , Nathan Chancellor , Nick Desaulniers , Nicolas Schier , Kees Cook , linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org, linux-kbuild@vger.kernel.org, linux-hardening@vger.kernel.org, Linux Kernel Functional Testing , Naresh Kamboju X-Rspamd-Queue-Id: BDC1B120011 X-Stat-Signature: taq97hw81nmi8actpucw5sepoqu9zjgn X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1677229205-566362 X-HE-Meta: U2FsdGVkX19PpyDiqSZ6e8Bry5VlH0W7PAFzcgQqKnWbxvM+4p5te/8TgA9529vIa7bu/nU66w+GsgA+wQGdxS+N6Gcn9CB3NuXMFl5hyy/kWC2B8J0Mz1kpXzS1lfZ16WnCOZJ7ceriapYlGmreimsM84WIllCbjXw5lGJD35G4AsxqTL7gE4pUviAP7VWkZH0m2oATEdrqcMH2g8KfKWkNPvuHYL6WFMr2n+1a22a8mv0kkW3aIvjzvtRl3Lnk5KbeE24kopKHoYN/v5lzEe0lFaIGNfZeKZBA5QvutidFMklC4ZRDbvh5LsFOPvq1o9GBo/HyzUtBA0OMOfV5u2ttn/J+rAmMg+4POLTv6k5oW8CKVmxOiLfPFdHQeSlAjBqyOy8+ABO8aLD5Et7Uczb03HDLXEv5w0esEY34sQOtN4vnMp/4GydDkcKUVEJJEscxP2b5vaKudErd9Iyj4fK/6UL+8O3zZRzVffEwSALw2PH7XGxkDYr4sSnnHOEttRElUbl1iUDxfZYnN/tIfHcs/PTiuP9QOinkBjuoPNKJBUPPfI9ssTQOhdybenT/wlNd+4PeHN9oTx8zhMbV922M3aQ3otDScXyeA/wVwHkxF082aWTIK0S4QxbXhazQ7n2fz1vTDxmxCBOrP/b/xmacflUlVdAHPgEH1DbFreHB9Ow6hmj2eS8VHaXiiCej+CD1/7hojbgw28u9+hp+Uw8pyaR4XSCGhAIBMmnGHVbdB6cmJFhT/Erx9p5JUsZG8SZY1d3G3VPyeA00VXlArvLMDETGWBXLpNI1Lvsh8u/1F0EBwM54XFU9BxjGbOigGRYayNim6zPqtVHegSzY2Epj604j5WxpnyjMy2hIBGUVKLWrx2usHOzZCUf8NQ5k4IHkoWa6LzULPb2pGV4h4UGxELu2E5D/V67ooU8p8bfWCyc0b636Efstr8Pr186jDbytzzMFm+tYMR81Io5 jGKyitMz bpiRazL44Yji19JXmCCVW0mLjWFn6cZ11c4rQUVfE8qDvn7Okw9m04pGT4R9Dna7PDMJz7Hc3IcfYHGL+hu2vtCPiTV0EjYzAsgmXhQUpMt+2Pvo9JsTDQxzb8i/fUGyEYsgBLqaR1wNf72wdeWerM+0WJkEaUXlBUQHrb1uGfWBupavbqPAQbvMEl7VWExVxOqCrqfM84AbvdszbxBysAWIm9LHsVpWb8taZjwxDWzzrPvAiFFVhVYXEUXWgyxSE+GpCp77QCkmAaI6ejLSeRttNr6CgtFYTycmHP1m+iYtlBNwMR1g9I5ClCUealeV9hT8VkeE6oGNl+l+7uDN0X1k57f905d4QyMa9v2bkoUzlHWQDccPFKxMc50UWHNurUf79NmoFxfkOZ2VQkh62fKpzqT5aBsdWk03G/yk7ESrTyz0AN5JdrccEcaav1Rw728A1HjpxCuM4TThaX7ZuFct3WkeeCVRtbdo42bHYUETn0lnVT2KwfJTMuZWrFvZMMG+PMJkH+ugBerAozQ6Rr6YW6smjQBB1Spnw4ZUUdDvnl2fs1T5StKjs3YwQkhFVZId6/leHMQsPkmyBRypyVLgxBmE8sGDdTKEv5s6Tzenx9tvdd1dI2FITsS/UQQN2TORRxkuSlBejue2OzEpUhUxqDBKy0V/cUEEzyInDjXOj79Y= 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: The tests for memset/memmove have been failing since they haven't been instrumented in 69d4c0d32186. Fix the test to recognize when memintrinsics aren't instrumented, and skip test cases accordingly. We also need to conditionally pass -fno-builtin to the test, otherwise the instrumentation pass won't recognize memintrinsics and end up not instrumenting them either. Fixes: 69d4c0d32186 ("entry, kasan, x86: Disallow overriding mem*() functions") Reported-by: Linux Kernel Functional Testing Signed-off-by: Marco Elver Reviewed-by: Andrey Konovalov Tested-by: Linux Kernel Functional Testing Tested-by: Naresh Kamboju --- v4: * New patch. --- mm/kasan/Makefile | 9 ++++++++- mm/kasan/kasan_test.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/mm/kasan/Makefile b/mm/kasan/Makefile index d4837bff3b60..7634dd2a6128 100644 --- a/mm/kasan/Makefile +++ b/mm/kasan/Makefile @@ -35,7 +35,14 @@ CFLAGS_shadow.o := $(CC_FLAGS_KASAN_RUNTIME) CFLAGS_hw_tags.o := $(CC_FLAGS_KASAN_RUNTIME) CFLAGS_sw_tags.o := $(CC_FLAGS_KASAN_RUNTIME) -CFLAGS_KASAN_TEST := $(CFLAGS_KASAN) -fno-builtin $(call cc-disable-warning, vla) +CFLAGS_KASAN_TEST := $(CFLAGS_KASAN) $(call cc-disable-warning, vla) +ifndef CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX +# If compiler instruments memintrinsics by prefixing them with __asan/__hwasan, +# we need to treat them normally (as builtins), otherwise the compiler won't +# recognize them as instrumentable. If it doesn't instrument them, we need to +# pass -fno-builtin, so the compiler doesn't inline them. +CFLAGS_KASAN_TEST += -fno-builtin +endif CFLAGS_kasan_test.o := $(CFLAGS_KASAN_TEST) CFLAGS_kasan_test_module.o := $(CFLAGS_KASAN_TEST) diff --git a/mm/kasan/kasan_test.c b/mm/kasan/kasan_test.c index 74cd80c12b25..627eaf1ee1db 100644 --- a/mm/kasan/kasan_test.c +++ b/mm/kasan/kasan_test.c @@ -165,6 +165,15 @@ static void kasan_test_exit(struct kunit *test) kunit_skip((test), "Test requires " #config "=n"); \ } while (0) +#define KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test) do { \ + if (IS_ENABLED(CONFIG_KASAN_HW_TAGS)) \ + break; /* No compiler instrumentation. */ \ + if (IS_ENABLED(CONFIG_CC_HAS_KASAN_MEMINTRINSIC_PREFIX)) \ + break; /* Should always be instrumented! */ \ + if (IS_ENABLED(CONFIG_GENERIC_ENTRY)) \ + kunit_skip((test), "Test requires checked mem*()"); \ +} while (0) + static void kmalloc_oob_right(struct kunit *test) { char *ptr; @@ -454,6 +463,8 @@ static void kmalloc_oob_16(struct kunit *test) u64 words[2]; } *ptr1, *ptr2; + KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); + /* This test is specifically crafted for the generic mode. */ KASAN_TEST_NEEDS_CONFIG_ON(test, CONFIG_KASAN_GENERIC); @@ -476,6 +487,8 @@ static void kmalloc_uaf_16(struct kunit *test) u64 words[2]; } *ptr1, *ptr2; + KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); + ptr1 = kmalloc(sizeof(*ptr1), GFP_KERNEL); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr1); @@ -498,6 +511,8 @@ static void kmalloc_oob_memset_2(struct kunit *test) char *ptr; size_t size = 128 - KASAN_GRANULE_SIZE; + KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); + ptr = kmalloc(size, GFP_KERNEL); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); @@ -511,6 +526,8 @@ static void kmalloc_oob_memset_4(struct kunit *test) char *ptr; size_t size = 128 - KASAN_GRANULE_SIZE; + KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); + ptr = kmalloc(size, GFP_KERNEL); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); @@ -524,6 +541,8 @@ static void kmalloc_oob_memset_8(struct kunit *test) char *ptr; size_t size = 128 - KASAN_GRANULE_SIZE; + KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); + ptr = kmalloc(size, GFP_KERNEL); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); @@ -537,6 +556,8 @@ static void kmalloc_oob_memset_16(struct kunit *test) char *ptr; size_t size = 128 - KASAN_GRANULE_SIZE; + KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); + ptr = kmalloc(size, GFP_KERNEL); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); @@ -550,6 +571,8 @@ static void kmalloc_oob_in_memset(struct kunit *test) char *ptr; size_t size = 128 - KASAN_GRANULE_SIZE; + KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); + ptr = kmalloc(size, GFP_KERNEL); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); @@ -566,6 +589,8 @@ static void kmalloc_memmove_negative_size(struct kunit *test) size_t size = 64; size_t invalid_size = -2; + KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); + /* * Hardware tag-based mode doesn't check memmove for negative size. * As a result, this test introduces a side-effect memory corruption, @@ -590,6 +615,8 @@ static void kmalloc_memmove_invalid_size(struct kunit *test) size_t size = 64; size_t invalid_size = size; + KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); + ptr = kmalloc(size, GFP_KERNEL); KUNIT_ASSERT_NOT_ERR_OR_NULL(test, ptr); @@ -618,6 +645,8 @@ static void kmalloc_uaf_memset(struct kunit *test) char *ptr; size_t size = 33; + KASAN_TEST_NEEDS_CHECKED_MEMINTRINSICS(test); + /* * Only generic KASAN uses quarantine, which is required to avoid a * kernel memory corruption this test causes. From patchwork Fri Feb 24 08:59:42 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marco Elver X-Patchwork-Id: 13151049 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 39DEAC61DA3 for ; Fri, 24 Feb 2023 09:00:11 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 885676B0075; Fri, 24 Feb 2023 04:00:10 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 836F76B0078; Fri, 24 Feb 2023 04:00:10 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6FFE86B007B; Fri, 24 Feb 2023 04:00:10 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 610C56B0075 for ; Fri, 24 Feb 2023 04:00:10 -0500 (EST) Received: from smtpin14.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 2E25D416F2 for ; Fri, 24 Feb 2023 09:00:10 +0000 (UTC) X-FDA: 80501588580.14.AFD03A6 Received: from mail-ed1-f74.google.com (mail-ed1-f74.google.com [209.85.208.74]) by imf09.hostedemail.com (Postfix) with ESMTP id 52CDB14001A for ; Fri, 24 Feb 2023 09:00:08 +0000 (UTC) Authentication-Results: imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=EAGIOwQG; spf=pass (imf09.hostedemail.com: domain of 3lnz4YwUKCJc5CM5I7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--elver.bounces.google.com designates 209.85.208.74 as permitted sender) smtp.mailfrom=3lnz4YwUKCJc5CM5I7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--elver.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1677229208; 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=AjV3k78q3XXhT1GHWCKfTuGEDWgoZOrO6Fv+xEYetZM=; b=KSZCCA4ziTxm3gZnhA3ZfzVMPvm7TDupveWLq4FWs237KvOnSbyff3qQpFdm29P4cIfxgH lm/2wBvrXUEbLado2pWbK9mncQ7TCYFVKPBsbiyXz+ESCer33tHqJUn0w/1AWpN7VKKL6p v5vtDH5nkEbAYH+TnsMJQVBn6sXwjWM= ARC-Authentication-Results: i=1; imf09.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=EAGIOwQG; spf=pass (imf09.hostedemail.com: domain of 3lnz4YwUKCJc5CM5I7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--elver.bounces.google.com designates 209.85.208.74 as permitted sender) smtp.mailfrom=3lnz4YwUKCJc5CM5I7FF7C5.3FDC9ELO-DDBM13B.FI7@flex--elver.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677229208; a=rsa-sha256; cv=none; b=6ftd04kKHpJjzyFSdTI22lcH0G0Ef9b4ipwEsqhBmrBICQi75Ujglv4lPqioUPtCEy0XdV 6Wf8AM2ORJop7Cy8qIkQk9cruHDK2U5Tw3Ts2VxjRVdNxcWTrwiR7B6KB1tqhbi/kWCXW3 vAmClgxyHPPKzI7dbburAyOq7QpPFoI= Received: by mail-ed1-f74.google.com with SMTP id da15-20020a056402176f00b004ace822b750so18883169edb.20 for ; Fri, 24 Feb 2023 01:00:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=AjV3k78q3XXhT1GHWCKfTuGEDWgoZOrO6Fv+xEYetZM=; b=EAGIOwQG78YZ4s5FvVIyWmJSdj/9+oRp2Z+JOiSUHX7UEHTavbHpWoSCToIN25ZVBh adJIFeTdGpgUgUlgPbR4Ed7A8vOy6wisOboBbYRYTdNzBqbwUwCAPRSSvoPl6Bh2MdOs DxBjn4j0OaOB/g65HjuRXZVQ1recSusgjrsuNkNrBC2P4Rnt9uhiw7JBjRqIzDCLljyl RPUozPvaTPHrb+3qYhJ4gLVhfC9eX0jRr0iYQ685BfQTxNz35kPbfNpdQBbihXcZZQ/x MfmXpF+Z0ozIFxGcdCWnKbZF7Ky7Dr+DKmP+UpWWa7yzYqJWwtqt9X0IGq+6o/8Df7+R thCA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=AjV3k78q3XXhT1GHWCKfTuGEDWgoZOrO6Fv+xEYetZM=; b=S8abL7KWM6TbBmazzdoANXzJFzVFXgBKMEf6hfaXUfvI58bDChrvMT+QZdU0hp7V8F ilRjxewyW63BD5Q/1TdmQC4kTl5+DtOoAh+4HyHQBtwFPT/YwwlCctfAvOeDwCLKvLEG ipTCzj45DkGJV0ggAuNGMAGydkmCY2/bqtJIX89YUsqG9wAJBoMhbtXkU/wwQ14bV6kd CRmtASKyGsoVe16BY+ySO4G/wnNlr9mUWtFM9+P8wibChDFKFk7bKBDxYLclvgPcd+RQ nAy0dy4CAT1hXshXhaDLv7QqweUAngvqdvuxRoepDutES0ns1a9cTDdsFr+azv7hbtXE qK5Q== X-Gm-Message-State: AO0yUKXCMfO2BeyEKQuU1nQJgrcd9jP4I/SEd2uPNCrcr0LPGdLXcHs3 fDNRjGzU4HYPW/CdM1tgpozOXA90oQ== X-Google-Smtp-Source: AK7set+F0E0+hHGoUz0EDxGYty9hHOhM9cQA2n6bHMhFaQ+TBLOYuMWa+x6cFVA/P5UZsJl9kORIJ4SYdA== X-Received: from elver.muc.corp.google.com ([2a00:79e0:9c:201:53eb:6453:f5f5:3bb9]) (user=elver job=sendgmr) by 2002:a05:6402:3216:b0:4ad:7bb2:eefb with SMTP id g22-20020a056402321600b004ad7bb2eefbmr9255387eda.3.1677229206892; Fri, 24 Feb 2023 01:00:06 -0800 (PST) Date: Fri, 24 Feb 2023 09:59:42 +0100 In-Reply-To: <20230224085942.1791837-1-elver@google.com> Mime-Version: 1.0 References: <20230224085942.1791837-1-elver@google.com> X-Mailer: git-send-email 2.39.2.637.g21b0678d19-goog Message-ID: <20230224085942.1791837-4-elver@google.com> Subject: [PATCH v5 4/4] kasan, x86: Don't rename memintrinsics in uninstrumented files From: Marco Elver To: elver@google.com, Andrew Morton Cc: Peter Zijlstra , Jakub Jelinek , linux-toolchains@vger.kernel.org, Alexander Potapenko , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , x86@kernel.org, Andrey Ryabinin , Andrey Konovalov , Dmitry Vyukov , Vincenzo Frascino , Nathan Chancellor , Nick Desaulniers , Nicolas Schier , Kees Cook , linux-kernel@vger.kernel.org, kasan-dev@googlegroups.com, linux-mm@kvack.org, linux-kbuild@vger.kernel.org, linux-hardening@vger.kernel.org X-Rspamd-Queue-Id: 52CDB14001A X-Stat-Signature: yk3r8ogc1dzn7fkzozezby9mksfj1q5x X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1677229208-118752 X-HE-Meta: U2FsdGVkX1+O0i8tjg3Dann2f/fvsJWdbqW41e5yZ+GZTr+07cXGRRSV7TufIr6vIACueNLnErvnVBv1F6md44SSaA/I+SroomM/0vT7A1rL7A8mV/5KorjfSeiG5u7TvymW7TJiwL6bAKdAA832bLR6KhmTslcQTJZNsD6usoyS/KsHH8+v9Z61Qq5aqNhDeWZXNrFDIQB17eTINnDgCrXBd9WCz1s6hAdtZcxFYVRmHu4dk6JS1ZqCMA+2zSHMIi8NJH6LE2ozM2of6r3rzZhEk4wqiPhdnn6hz525gu2JLmNKcD0sOdrGOGmA/SNq2BJuudqM1a/W0B5NK0AkYXa4degUKWAPZCLSD6LhjUwba8qQ4EyMOGs0eeuzlj6+bFpRQRRSqV4dNTHg2Vy58GmFs+C1lZvuaaUXZWh4P7AFZQHsPo24o+b3rKxa0n3JD3vGOEQ7eAxsL6coMKA9PKTSGZjBxhQnW19qYSzWMovqoBntmy+PKc1a4QVVe79tvvKdG4+ACYsVNb/IrAMyd3LaKvk13tNeCXIzKALfwmzNtj5kYumCbxmPZCqpIuONAtWMStd4gqFzxaHvpJHHnk/vahV7pGZIWKTYPTT9qtvzzaaLcKb/IVvcJnrwYTS5oxsIsiYjEcFXE/2MiWRr1BummbBayOlKCe9RiKsxHPLhlvwmnkqdCicHnR3RHQNGrCxcmc5XP3VAQE5qaRE/ovxP5K3QSG4hlOaaJXKgYA1pr/fVtYvclbkxaWOoo5v3MVHDjrS85c9p7NrGab/E0K/i/iAMWIIMY5YbN7yTf01CWPXmEGWosVcHbvErxstYm8WwMnEs8HRxS/hESDznzrziwMzH99HtiXcI5GL4cz6bWpibHsJNY9n36CedTqGC+yQA6SAyDrzxjNNvPQX3WNx5+xh3xWXbd14teLQ9M8Zf2GBbEwIPMZQYJKuFGV8kjp/eVJU+PJ/jhvoBU6G cDJEYJhp EpUE6kSn53ZIpbsx0QRdOqCRXa8734X/tUe1UbnjHpY4OgNG1oZvev4zW7ETfok8gRHu9P9E95uFt/dM11JqvTdWunmqrzXSVDxqFsmmghHFO9dH94GdB72TaiQYaDjroKVYI8snpgLN+xWmUWXTJoq3YV88d/C+Jyb3VfHqIGSgpep3BEfGy0tBZwA9zKkmLVO3frfkfkvPV39K6zEgOBQRWraxXtHzyg1EuERrN5zQuqtsDFjXlefEoWzpPWDTTlrCONs+B5+vJ/bCMwU4WKZXXAcLLmPIWAVEzRQNu3io2XHpbodEk9rIaTkoywIdcG5ZWGTWgNkIV/6vNENutU6C6IkD8OHzE3U2IHMytKQ88U0OczXJ/J/sjAshF9SVOuiwODP+tam7BfWZ12P/IaOhpvPNOzbt31m65ZI/Jx/N1rSIr91MdI79wpvE6qSdIQNwJ7cFzv507mcxCRRCvB8TU4lf8j67F5joDm4mPb/mJ4IfJ3L1yq6n2TwxFN3Q8RX1gF/Xh4bjyo0SJK37MS91hk4Ri4/GkyUTOrcbc+xeLIpAcsnYwAATlWls9VBfB4bdopTzeIvdsFrC3LTsfKfJrqxeGtgH/+s7WeOSDiul1Ppzj0U7TedbkmQ== 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: Now that memcpy/memset/memmove are no longer overridden by KASAN, we can just use the normal symbol names in uninstrumented files. Drop the preprocessor redefinitions. Fixes: 69d4c0d32186 ("entry, kasan, x86: Disallow overriding mem*() functions") Signed-off-by: Marco Elver Reviewed-by: Andrey Konovalov --- v5: * New patch. --- arch/x86/include/asm/string_64.h | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/arch/x86/include/asm/string_64.h b/arch/x86/include/asm/string_64.h index 888731ccf1f6..c1e14cee0722 100644 --- a/arch/x86/include/asm/string_64.h +++ b/arch/x86/include/asm/string_64.h @@ -85,25 +85,6 @@ char *strcpy(char *dest, const char *src); char *strcat(char *dest, const char *src); int strcmp(const char *cs, const char *ct); -#if (defined(CONFIG_KASAN) && !defined(__SANITIZE_ADDRESS__)) -/* - * For files that not instrumented (e.g. mm/slub.c) we - * should use not instrumented version of mem* functions. - */ - -#undef memcpy -#define memcpy(dst, src, len) __memcpy(dst, src, len) -#undef memmove -#define memmove(dst, src, len) __memmove(dst, src, len) -#undef memset -#define memset(s, c, n) __memset(s, c, n) - -#ifndef __NO_FORTIFY -#define __NO_FORTIFY /* FORTIFY_SOURCE uses __builtin_memcpy, etc. */ -#endif - -#endif - #ifdef CONFIG_ARCH_HAS_UACCESS_FLUSHCACHE #define __HAVE_ARCH_MEMCPY_FLUSHCACHE 1 void __memcpy_flushcache(void *dst, const void *src, size_t cnt);