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 87874C678D4 for ; Thu, 2 Mar 2023 11:19:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 079A96B0071; Thu, 2 Mar 2023 06:19:01 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 0297B6B0073; Thu, 2 Mar 2023 06:19:00 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E33ED6B0074; Thu, 2 Mar 2023 06:19:00 -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 D4F126B0071 for ; Thu, 2 Mar 2023 06:19:00 -0500 (EST) Received: from smtpin15.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id AB697140EE7 for ; Thu, 2 Mar 2023 11:19:00 +0000 (UTC) X-FDA: 80523711240.15.8C5989B Received: from mail-vs1-f46.google.com (mail-vs1-f46.google.com [209.85.217.46]) by imf27.hostedemail.com (Postfix) with ESMTP id D53B840016 for ; Thu, 2 Mar 2023 11:18:58 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=XSmgGg4V; spf=pass (imf27.hostedemail.com: domain of elver@google.com designates 209.85.217.46 as permitted sender) smtp.mailfrom=elver@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=1677755938; 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=TQxxCnZY2j28H3XZXEchjSlFpSlW7FKHIgkQwAfvbPo=; b=wLNHUPg1rtmYD5J89H6xCQpBq6heUjFE9T199NnW5Dn1HLtt4S1bw2W8blcUxeBgEXgkBt G4M4QMdSRGQpsqMHbI+lLdzATX4MlEvy9y0yqQEVdfF5AIPmcNvKV7wYgLNw0OWakLulQW hL3/GOEPcFPEOd73ylGAW4vLc5ywnbs= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=XSmgGg4V; spf=pass (imf27.hostedemail.com: domain of elver@google.com designates 209.85.217.46 as permitted sender) smtp.mailfrom=elver@google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677755938; a=rsa-sha256; cv=none; b=JlnIQ3E2H3ZqJ/5OPLtwQDCrqwtroj5pgxnbuc979oWwVqukMyvQHNOSpQAq5GBz1p8uOd 4jrmOmCDT0RbEwFcbvjdcHwRR3C29llVdOfEYesGxNKidwLGeoDRtztak4Ibp9IOrdk6ld WV842omMiorab4cSW2jlDwbFKaNLbjU= Received: by mail-vs1-f46.google.com with SMTP id x14so22045602vso.9 for ; Thu, 02 Mar 2023 03:18:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.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=TQxxCnZY2j28H3XZXEchjSlFpSlW7FKHIgkQwAfvbPo=; b=XSmgGg4Vhrwx13LxakImOuKcP8Hd8srPhxRdcA2XGuHU+ItKVJ1SpzMTDYcHLVaovG ADHAclwU84yGKH/3HdKEkT6bt/kUPx4NO98aFacuvHlcaoYHaOMmLFxjS6ycdYEFQJWD xxad3ExG8GXZzCw003iIfJ+36QV6S64/++uOboC8I1MjIY/K+nfLehgmc1dtyohZL5eF xOi9GdSoVsOAPq3C2C/gTD6z4g/0v8vlD+4JH1jjzkSWi8bXCmrRzk+6Oeotq4sGzjwI c9Q7MVhyxi9dCfP4W+rSPgs/wgdLcWau+rUxxKoMgKzwAjrdn6hNIGSW+LP3b45VbuRN xDEA== 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=TQxxCnZY2j28H3XZXEchjSlFpSlW7FKHIgkQwAfvbPo=; b=x3m6nYNHMSrhgi5O+sa3en+STwHsNYaIC4gpvcnjZ//asaZJLIlo84qmKFy5zoDBFB 1CL96HoKtMw8lBmTgTww9rdYCGV2SH9Phyu55z1H0yIQapqGaw3/g82PUs/BQs00LlzR 7/UXwJ+mhrVEK2NCvbUKneyZcBJqKw3EP43Sab8AWMZgY8Ju3E5u6/Z3K9VAMI+7Ghq3 QeEQ2/2mun8TlY7BnM9IVHY1SvVCVfSggQicC1hGTBWb0k04QcAqVnGCbKW0Qwdey83Y 5qbx2SDPIFFeK7vH2U4o4Am5a7tFVRAL9ub5WfHMRk7RkMApMkos/Y4iETW7UcOANCQb iNig== X-Gm-Message-State: AO0yUKXaSxDB0VHZ6sDMWg2Tv+Eh5YyPHvlhgREM3OacYniyOFni8ASQ VgG35bVLuAH3WerRJu6rC5oyrKwXcfk2INK50105hg== X-Google-Smtp-Source: AK7set9rSD1tUqVXc5Q87+BIpd8fSrw6HHVOuJMjEBoDuqqy3fkg6Oa7DqbHlEMIQ+ZtCEmxoXCQnMEqkF1KyaESJoY= X-Received: by 2002:a67:cb06:0:b0:402:99ce:1d9f with SMTP id b6-20020a67cb06000000b0040299ce1d9fmr6216969vsl.4.1677755937832; Thu, 02 Mar 2023 03:18:57 -0800 (PST) MIME-Version: 1.0 References: <20230301143933.2374658-1-glider@google.com> <20230301143933.2374658-2-glider@google.com> In-Reply-To: <20230301143933.2374658-2-glider@google.com> From: Marco Elver Date: Thu, 2 Mar 2023 12:18:21 +0100 Message-ID: Subject: Re: [PATCH 2/4] kmsan: another take at fixing memcpy tests To: Alexander Potapenko Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, x86@kernel.org, dave.hansen@linux.intel.com, hpa@zytor.com, akpm@linux-foundation.org, dvyukov@google.com, nathan@kernel.org, ndesaulniers@google.com, kasan-dev@googlegroups.com Content-Type: text/plain; charset="UTF-8" X-Stat-Signature: wp5bzg6i6a6r16mme8qokq7uub5briym X-Rspam-User: X-Rspamd-Queue-Id: D53B840016 X-Rspamd-Server: rspam06 X-HE-Tag: 1677755938-153030 X-HE-Meta: U2FsdGVkX1/1xYvJ+7vKa2HcVdCqyGPbi/Sg0gQbqazjlFQjd6RSh0ojzwEAQO7TIMd8bFCp2XpGTMLwiO71iS6OU4Gp11PNq0ir2j7To82KxwxAWmled4wpVTGhXz9LuqsMbkiM41qR3PFT7w5Rgg/j7QL4+04R4bwkbDj6nSYQRwmHebgONr3mU/zgJ3PgWPpKYT/0nPMQ0vzaczc92ymqeEW0+JtGAdXnllVkw3M0ApLh5mEkA4wIlPRe6X9nWSrYTMDk/rQDjhx7AmobcXz+PBWNTbNf+I6EO7vpcFPjF0Poheyf+WjBp9UX3FKgTVPuaK7etzxjcacUSo/rEAsc/aodo/Us/rxzpiYTSnOua4vJ+07+J8PJVhiBystz7D68+SYCkrIsaa0H3cdr08jRKtGP65yG5glWFvg3hfKvkOVSrt0jZd7WvK6wpg/gzL76dUwlN0UaemD3cD5+P+4GK9UhCz3sMFdRHqORXmyuhadN+ABM0WHgLUdLbsNuy74KTkeiM68IKCGL/LukVZZQDTYCa+DEGbS8ZaDhu2fVOwegzmRKUaUACCO1mHTMeMzbWTzlSdGG5ZWPpVtUpWVI4eE5pa8xWgINJaK8Q/8/YqNV1t2KAUQfhWHClbqQ4iCvVWBHnCTtSehxjY5ol8MUrgvsYZeFSNe5D0jn3S+Z5Pw/dEsdrK55uV+EfTdaDEUXd/gtZLYcZsaXi1Fhli9v8TRj5gEhdz/Fjo6KLT2P2vuuaXXt8wbv9aVNL+Hgx1I4fVX7ixOy+muxYEOVctg1TPNQdv/nzfXayeWmOAtYr02vHxXJx7cJbIjKNucW20sDM3f07k4xT7l+hhxlUJrfTXsaxWg30w+IAf9tcBcUNthTzvqDiv4wkMwrdZ4u+HrgyxRYwja71FHs7CH9szgR7PO6B/VXjyU1nBb+hPJg12X+yrtGQwkp72Nh9k5YUPi8HgacIwDZRVFacHF J+O0DnzI 4mZOcez4mjqIXJm+6PHdNtn5OhR0Hf49SeFlhdDlnzKT+A+bS7qnKzl8UjtNxCWc7+C+NRofmgyy5Zl70QBuW/LYJAWWzOSF6zmk53lpHX0GuO6mlqHm8B5U67N+7Iy7R0MxVZ5t9zghxzy5RzIAHgKoIDHNRY/jvY6pjFV9AYJk6KMAIZvcJB+k0xfVNL7nTNDBD03eZJffqt11NZcXZkIy3U7Z1td2iDg48Su6Q9L+PfXp1XuJ6JYYdZ7cSnuJdN2Hi8IpmloQU24Mqq58MTav41ri9CTIIwa0RjaRMwUn8yZufhWNtAsG4xqOdbVDzZed5FbKoIacCnAUrfp0V+wNFQtb4t51JXxOX9PvXrUaQ3LezZ0avjhsQSFSyAMBaG9uS 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 Wed, 1 Mar 2023 at 15:39, 'Alexander Potapenko' via kasan-dev wrote: > > 5478afc55a21 ("kmsan: fix memcpy tests") uses OPTIMIZER_HIDE_VAR() to > hide the uninitialized var from the compiler optimizations. > > However OPTIMIZER_HIDE_VAR(uninit) enforces an immediate check of > @uninit, so memcpy tests did not actually check the behavior of memcpy(), > because they always contained a KMSAN report. > > Replace OPTIMIZER_HIDE_VAR() with a file-local asm macro that just > clobbers the memory, and add a test case for memcpy() that does not > expect an error report. > > Also reflow kmsan_test.c with clang-format. > > Signed-off-by: Alexander Potapenko > --- > mm/kmsan/kmsan_test.c | 43 +++++++++++++++++++++++++++++++++++++------ > 1 file changed, 37 insertions(+), 6 deletions(-) > > diff --git a/mm/kmsan/kmsan_test.c b/mm/kmsan/kmsan_test.c > index 088e21a48dc4b..cc98a3f4e0899 100644 > --- a/mm/kmsan/kmsan_test.c > +++ b/mm/kmsan/kmsan_test.c > @@ -407,6 +407,36 @@ static void test_printk(struct kunit *test) > KUNIT_EXPECT_TRUE(test, report_matches(&expect)); > } > > +/* > + * Prevent the compiler from optimizing @var away. Without this, Clang may > + * notice that @var is uninitialized and drop memcpy() calls that use it. > + * > + * There is OPTIMIZER_HIDE_VAR() in linux/compier.h that we cannot use here, > + * because it is implemented as inline assembly receiving @var as a parameter > + * and will enforce a KMSAN check. > + */ > +#define DO_NOT_OPTIMIZE(var) asm("" ::: "memory") That's just a normal "barrier()" - use that instead? > +/* > + * Test case: ensure that memcpy() correctly copies initialized values. > + */ > +static void test_init_memcpy(struct kunit *test) > +{ > + EXPECTATION_NO_REPORT(expect); > + volatile int src; > + volatile int dst = 0; > + > + // Ensure DO_NOT_OPTIMIZE() does not cause extra checks. ^^ this comment seems redundant now, given DO_NOT_OPTIMIZE() has a comment (it's also using //-style comment). > + DO_NOT_OPTIMIZE(src); > + src = 1; > + kunit_info( > + test, > + "memcpy()ing aligned initialized src to aligned dst (no reports)\n"); > + memcpy((void *)&dst, (void *)&src, sizeof(src)); > + kmsan_check_memory((void *)&dst, sizeof(dst)); > + KUNIT_EXPECT_TRUE(test, report_matches(&expect)); > +} > + > /* > * Test case: ensure that memcpy() correctly copies uninitialized values between > * aligned `src` and `dst`. > @@ -420,7 +450,7 @@ static void test_memcpy_aligned_to_aligned(struct kunit *test) > kunit_info( > test, > "memcpy()ing aligned uninit src to aligned dst (UMR report)\n"); > - OPTIMIZER_HIDE_VAR(uninit_src); > + DO_NOT_OPTIMIZE(uninit_src); > memcpy((void *)&dst, (void *)&uninit_src, sizeof(uninit_src)); > kmsan_check_memory((void *)&dst, sizeof(dst)); > KUNIT_EXPECT_TRUE(test, report_matches(&expect)); > @@ -443,7 +473,7 @@ static void test_memcpy_aligned_to_unaligned(struct kunit *test) > kunit_info( > test, > "memcpy()ing aligned uninit src to unaligned dst (UMR report)\n"); > - OPTIMIZER_HIDE_VAR(uninit_src); > + DO_NOT_OPTIMIZE(uninit_src); > memcpy((void *)&dst[1], (void *)&uninit_src, sizeof(uninit_src)); > kmsan_check_memory((void *)dst, 4); > KUNIT_EXPECT_TRUE(test, report_matches(&expect)); > @@ -467,13 +497,14 @@ static void test_memcpy_aligned_to_unaligned2(struct kunit *test) > kunit_info( > test, > "memcpy()ing aligned uninit src to unaligned dst - part 2 (UMR report)\n"); > - OPTIMIZER_HIDE_VAR(uninit_src); > + DO_NOT_OPTIMIZE(uninit_src); > memcpy((void *)&dst[1], (void *)&uninit_src, sizeof(uninit_src)); > kmsan_check_memory((void *)&dst[4], sizeof(uninit_src)); > KUNIT_EXPECT_TRUE(test, report_matches(&expect)); > } > > -static noinline void fibonacci(int *array, int size, int start) { > +static noinline void fibonacci(int *array, int size, int start) > +{ > if (start < 2 || (start == size)) > return; > array[start] = array[start - 1] + array[start - 2]; > @@ -482,8 +513,7 @@ static noinline void fibonacci(int *array, int size, int start) { > > static void test_long_origin_chain(struct kunit *test) > { > - EXPECTATION_UNINIT_VALUE_FN(expect, > - "test_long_origin_chain"); > + EXPECTATION_UNINIT_VALUE_FN(expect, "test_long_origin_chain"); > /* (KMSAN_MAX_ORIGIN_DEPTH * 2) recursive calls to fibonacci(). */ > volatile int accum[KMSAN_MAX_ORIGIN_DEPTH * 2 + 2]; > int last = ARRAY_SIZE(accum) - 1; > @@ -515,6 +545,7 @@ static struct kunit_case kmsan_test_cases[] = { > KUNIT_CASE(test_uaf), > KUNIT_CASE(test_percpu_propagate), > KUNIT_CASE(test_printk), > + KUNIT_CASE(test_init_memcpy), > KUNIT_CASE(test_memcpy_aligned_to_aligned), > KUNIT_CASE(test_memcpy_aligned_to_unaligned), > KUNIT_CASE(test_memcpy_aligned_to_unaligned2), > -- > 2.39.2.722.g9855ee24e9-goog > > -- > You received this message because you are subscribed to the Google Groups "kasan-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an email to kasan-dev+unsubscribe@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/msgid/kasan-dev/20230301143933.2374658-2-glider%40google.com.