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 9AE67CF258D for ; Sun, 13 Oct 2024 20:25:54 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 919296B0082; Sun, 13 Oct 2024 16:25:53 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8A25D6B0083; Sun, 13 Oct 2024 16:25:53 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 71B6C6B0085; Sun, 13 Oct 2024 16:25:53 -0400 (EDT) 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 52E826B0082 for ; Sun, 13 Oct 2024 16:25:53 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 0384C1C539A for ; Sun, 13 Oct 2024 20:25:44 +0000 (UTC) X-FDA: 82669710018.10.07EBA95 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) by imf16.hostedemail.com (Postfix) with ESMTP id A9E8E180008 for ; Sun, 13 Oct 2024 20:25:45 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=CVMRtAsC; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf16.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.221.53 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1728851036; a=rsa-sha256; cv=none; b=tXngRzNMM+cq4N+DD1lNUfzVb9Nml1TxtuzDi7c+opE5FAmRye9Kw5P5TAlfyW/bqT4O4j h0d83KDKAIO1ELpXqND3sbUpT5wUMEC2BWmWEj59jqcWUC78n9fgYKn7IE7uovYxeg/cOH 7B0UWZxP2TRgoi4kBhDJsGvBjGeFe4U= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=CVMRtAsC; dmarc=pass (policy=none) header.from=gmail.com; spf=pass (imf16.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.221.53 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=1728851036; 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:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=f5zRtO73AocajQx7Xa+tWyH6u9NWSUZX7hX+fOXXues=; b=dGragoIBaaO7qEli87Wod9zCOIq+RJEuWvcL4TAa2EXHAhWFkTfeBWA2Ymb5TfVhDaT2nJ RCKpnOVi5ho2ctpcaSNdLYPfTrwwpMKPl4kINLEFZevW06IuBu+S4DY9ZOaU+Potpv6T26 L4VR+147d2PnlNr4g9FwI9xe5J6k1L8= Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-37d6ff1cbe1so456768f8f.3 for ; Sun, 13 Oct 2024 13:25:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1728851149; x=1729455949; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=f5zRtO73AocajQx7Xa+tWyH6u9NWSUZX7hX+fOXXues=; b=CVMRtAsC268I8R082Tbpo8iLEGF1TUZ19P7T3OMhIEHEq0v7vRef5g4jd9KTfMnn1f G75fJOtp3j5kA+9bdjm7kc9kFqTV4ZTiSOkT+hQrte/F6x9/y138x6OqbXtijDOFE7WI v39p8BbVs+Js0P0mvXZj/zrrAVbTjAjCQriRwx8iPE1fnXChKYeRbEjn80yXf4dulquI TGQ8EMORKya5pwR2GwHj/f6ihbPrKd6qNdgqxjw67MxZ/v88b5lJsBM6Jl4Mybdg1jgE 5lzrL1DqmaVekLHCjDW522WSVMonmouy6uBl6cUsF47IFsGDylIUuEmqAgjyeMwP/M5R /vpg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1728851149; x=1729455949; h=content-transfer-encoding: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=f5zRtO73AocajQx7Xa+tWyH6u9NWSUZX7hX+fOXXues=; b=hpN3qoDD9wPsvz1HxikI8BxzUf8XCSeCjD1HAe7A6D6UEeX/WtRHMo1+offwtDn0UW M9Q4MtFgGBY17qqYQPSN+r2oy65rrHjDYcqkrOTyy+CJCuq1Ib5jZ/ViYsOpX28OvxXC KE2uruBXB8/ACXSCM7Ai4pfuceMWTHRuihQLAH5tComGVNfTmwaPLRAHBoHUgceksNk/ EUVxbVr7io8f+Z+jTCrRF5vz6TL8cL0cJkjfbJOp8vfcwUR6WmnZdjLK6dd1TGH7LXl/ CctcrA6O30hMO6ln0q48U41S9FBbe6PzTcKmcBYMPlI/ygzSeEVmW6nY9Zmqd2ndPEAr rEdA== X-Forwarded-Encrypted: i=1; AJvYcCX842i9i5EHUldoBNcn+9RPNtlilxcQ1wmYj9M5ezph+MPhJxeUvF+P+k62dJ0Wu+4a8A33aRsc4Q==@kvack.org X-Gm-Message-State: AOJu0Yw6vu16YdWmqHhPtGTnyodTSyFiEGVJV9dKjEZsuxZPL4+7j1pk B8Z7TbNzPjdhyIWkjQyHHJPCmQa1rup8BkEks/pIPZVb2EXp7J2BiNMWI09fKhKzprhQI8yNxty zSltIickMUYMXOu3HuygVUjGF0d8= X-Google-Smtp-Source: AGHT+IEjZMjl50s/lfMm6uwfkL1WmKWSGOg222nFhzF18Y0Ijdn+/ZeiBOf5r4n2hq3PNHRlc/xh9hik8x6HqBx/5Rc= X-Received: by 2002:adf:b351:0:b0:37d:354e:946a with SMTP id ffacd0b85a97d-37d552d8d62mr6067449f8f.50.1728851148978; Sun, 13 Oct 2024 13:25:48 -0700 (PDT) MIME-Version: 1.0 References: <20241013182016.3074875-1-snovitoll@gmail.com> In-Reply-To: <20241013182016.3074875-1-snovitoll@gmail.com> From: Andrey Konovalov Date: Sun, 13 Oct 2024 22:25:37 +0200 Message-ID: Subject: Re: [PATCH v3 2/3] kasan: migrate copy_user_test to kunit To: Sabyrzhan Tasbolatov Cc: 2023002089@link.tyut.edu.cn, akpm@linux-foundation.org, alexs@kernel.org, corbet@lwn.net, dvyukov@google.com, elver@google.com, glider@google.com, kasan-dev@googlegroups.com, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, ryabinin.a.a@gmail.com, siyanteng@loongson.cn, vincenzo.frascino@arm.com, workflows@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: A9E8E180008 X-Stat-Signature: eh88ztb7tarr6iyjrcxcmseii3raed8b X-Rspam-User: X-HE-Tag: 1728851145-3291 X-HE-Meta: U2FsdGVkX1++h9cocjchGpEkUz6lgOxCLdAiKv2VgjDfLfdTbHNgVuhuERIPIowouin5FSsKE0gSZ32ysAwfcpEbu9ExftF5FGeXVMZb+sjkizMIw/jk+lIVZLduiPjBiYCbq8+UbD4R2qOkClJuPik0pRcDFjv7YNoetPoymC3ge2PtKhtZ1QVB5MrDSLm3aE0/TSfl07Y2Nq1iij8VOdhKaiLjA1P/KANElXn9u8TiBi6waKJqD0uBY8qVWOoiXDdc+F8cRBLajMu+rTgKiPwEGg92s1lMlMZAN9HrxU5DElGPhFQk7yjeXyu03moMWE+1U/58RjkWSrOAZ+W38RvtcBendsLcCKV3tBXTVHXEqByxOWcMy7DmLF/l1wrKGBQPsSq4tXNjij1QjVYc1fhzkzj6vHYVnslrgSBLIvyZtKxR7qoXWjBVyYnoz+gCb+/7xIg62JBoRqmlZ5XCqPNGqtWu5XcfjskMDQ3E+sMxcdHxX+MRJmUZMd12FCDD1q5+U2RQdJ6LjKdgwU0bH2rIurfbdjA+rtIbtMyJVM+vJb5PiqjcKPC/N/3OOb0iRB12usdoS74oSTymch7StBJQk/0WevBjzgalaueNXVEfpsmXDx9L9iPok+YKw561hOyHbQ00F3IabqtWQfBO+6FtV5Cx2CYvAglIFsKrzttnAAJZCyKFgmsZeq9N8bVqmBl0HBH084AZBTmSqXXD299cLBq+0UOoj1H8rXyvdR6p9NOpFXMmgVHRjkIOzLizkht1CsBWT5O39t3LgyeRQt4jtAj55cJdgovgK2MpXBpmeGPuwJ1gk+h66qolYN1qySc6VwaIg7xzC8acEFLAqim4LH6FcwVleg1mJcaVg+bww5E4f0aXZZztbXXI0nc6u3qQgpVqkgi1vSATiByIAChmhq+5Wl33dRhn99vM80nE3lygW/eKxHxfCTITdWWho7wTu39lPRrEofhCcN3 +iVEutbr 4gETOdkaSQf901sCBqCfChKqgb/4b7UQg9IEjsdofFoQ8EM62ydwBh4Y5AoMZV4J8GOrbonIYqTi28po5dU+/vHLbtvyp3+uyBR9mZMX3vjVn34F1Ik0Z2zB2bQ8O0vJK89TdbUPUVn9ov8JKHNAJHFnNH/nFR7XwEjyVufAFjWpWRQujis29bdtOekL5HBNOOhpWvf3HSYZ0T6hXWCgz4d/kxvZW9Np0EOjZsT2SdIrNs5r+zEna0PR0sZdVplm2N5sLJJUax7QC51XcDNSsa0HJxjJBMsDt1KxoPBNUNrY8oYqamZReGu8iYTzDnZNCN3X9zyH+c+emH4Qa9q2Qs2LpwB5gWSrmyVQiDJGGec/GUsWUEqPMEjT7xeWDP+xpaE1rj5XrE10e7fuH3SL6EM0THF302k5IUcVUzMaWsoBg95UQ5a9BueC3DTy40bV80hKP4s5lRXvcRnq7sUF7stgKvUupqlDFzX4LFzfJEeUrNJc= 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: List-Subscribe: List-Unsubscribe: On Sun, Oct 13, 2024 at 8:19=E2=80=AFPM Sabyrzhan Tasbolatov wrote: > > Migrate the copy_user_test to the KUnit framework to verify out-of-bound > detection via KASAN reports in copy_from_user(), copy_to_user() and > their static functions. > > This is the last migrated test in kasan_test_module.c, therefore delete > the file. > > Signed-off-by: Sabyrzhan Tasbolatov > --- > Changes v2 -> v3: > - added a long string in usermem for strncpy_from_user. Suggested by Andr= ey. > --- > mm/kasan/Makefile | 2 - > mm/kasan/kasan_test_c.c | 47 +++++++++++++++++++++ > mm/kasan/kasan_test_module.c | 81 ------------------------------------ > 3 files changed, 47 insertions(+), 83 deletions(-) > delete mode 100644 mm/kasan/kasan_test_module.c > > diff --git a/mm/kasan/Makefile b/mm/kasan/Makefile > index b88543e5c0c..1a958e7c8a4 100644 > --- a/mm/kasan/Makefile > +++ b/mm/kasan/Makefile > @@ -46,7 +46,6 @@ endif > > CFLAGS_kasan_test_c.o :=3D $(CFLAGS_KASAN_TEST) > RUSTFLAGS_kasan_test_rust.o :=3D $(RUSTFLAGS_KASAN) > -CFLAGS_kasan_test_module.o :=3D $(CFLAGS_KASAN_TEST) > > obj-y :=3D common.o report.o > obj-$(CONFIG_KASAN_GENERIC) +=3D init.o generic.o report_generic.o shado= w.o quarantine.o > @@ -59,4 +58,3 @@ ifdef CONFIG_RUST > endif > > obj-$(CONFIG_KASAN_KUNIT_TEST) +=3D kasan_test.o > -obj-$(CONFIG_KASAN_MODULE_TEST) +=3D kasan_test_module.o > diff --git a/mm/kasan/kasan_test_c.c b/mm/kasan/kasan_test_c.c > index a181e4780d9..382bc64e42d 100644 > --- a/mm/kasan/kasan_test_c.c > +++ b/mm/kasan/kasan_test_c.c > @@ -1954,6 +1954,52 @@ static void rust_uaf(struct kunit *test) > KUNIT_EXPECT_KASAN_FAIL(test, kasan_test_rust_uaf()); > } > > +static void copy_user_test_oob(struct kunit *test) > +{ > + char *kmem; > + char __user *usermem; > + unsigned long useraddr; > + size_t size =3D 128 - KASAN_GRANULE_SIZE; > + int __maybe_unused unused; > + > + kmem =3D kunit_kmalloc(test, size, GFP_KERNEL); > + KUNIT_ASSERT_NOT_ERR_OR_NULL(test, kmem); > + > + useraddr =3D kunit_vm_mmap(test, NULL, 0, PAGE_SIZE, > + PROT_READ | PROT_WRITE | PROT_EXE= C, > + MAP_ANONYMOUS | MAP_PRIVATE, 0); > + KUNIT_ASSERT_NE_MSG(test, useraddr, 0, > + "Could not create userspace mm"); > + KUNIT_ASSERT_LT_MSG(test, useraddr, (unsigned long)TASK_SIZE, > + "Failed to allocate user memory"); > + > + OPTIMIZER_HIDE_VAR(size); > + usermem =3D (char __user *)useraddr; > + > + KUNIT_EXPECT_KASAN_FAIL(test, > + unused =3D copy_from_user(kmem, usermem, size + 1)); > + KUNIT_EXPECT_KASAN_FAIL(test, > + unused =3D copy_to_user(usermem, kmem, size + 1)); > + KUNIT_EXPECT_KASAN_FAIL(test, > + unused =3D __copy_from_user(kmem, usermem, size + 1)); > + KUNIT_EXPECT_KASAN_FAIL(test, > + unused =3D __copy_to_user(usermem, kmem, size + 1)); > + KUNIT_EXPECT_KASAN_FAIL(test, > + unused =3D __copy_from_user_inatomic(kmem, usermem, size = + 1)); > + KUNIT_EXPECT_KASAN_FAIL(test, > + unused =3D __copy_to_user_inatomic(usermem, kmem, size + = 1)); > + > + /* > + * Prepare a long string in usermem to avoid the strncpy_from_user= test > + * bailing out on '\0' before it reaches out-of-bounds. > + */ > + memset(kmem, 'a', size); > + KUNIT_EXPECT_EQ(test, copy_to_user(usermem, kmem, size), 0); > + > + KUNIT_EXPECT_KASAN_FAIL(test, > + unused =3D strncpy_from_user(kmem, usermem, size + 1)); > +} > + > static struct kunit_case kasan_kunit_test_cases[] =3D { > KUNIT_CASE(kmalloc_oob_right), > KUNIT_CASE(kmalloc_oob_left), > @@ -2028,6 +2074,7 @@ static struct kunit_case kasan_kunit_test_cases[] = =3D { > KUNIT_CASE(match_all_ptr_tag), > KUNIT_CASE(match_all_mem_tag), > KUNIT_CASE(rust_uaf), > + KUNIT_CASE(copy_user_test_oob), > {} > }; > > diff --git a/mm/kasan/kasan_test_module.c b/mm/kasan/kasan_test_module.c > deleted file mode 100644 > index 27ec22767e4..00000000000 > --- a/mm/kasan/kasan_test_module.c > +++ /dev/null > @@ -1,81 +0,0 @@ > -// SPDX-License-Identifier: GPL-2.0-only > -/* > - * > - * Copyright (c) 2014 Samsung Electronics Co., Ltd. > - * Author: Andrey Ryabinin > - */ > - > -#define pr_fmt(fmt) "kasan: test: " fmt > - > -#include > -#include > -#include > -#include > -#include > - > -#include "kasan.h" > - > -static noinline void __init copy_user_test(void) > -{ > - char *kmem; > - char __user *usermem; > - size_t size =3D 128 - KASAN_GRANULE_SIZE; > - int __maybe_unused unused; > - > - kmem =3D kmalloc(size, GFP_KERNEL); > - if (!kmem) > - return; > - > - usermem =3D (char __user *)vm_mmap(NULL, 0, PAGE_SIZE, > - PROT_READ | PROT_WRITE | PROT_EXEC, > - MAP_ANONYMOUS | MAP_PRIVATE, 0); > - if (IS_ERR(usermem)) { > - pr_err("Failed to allocate user memory\n"); > - kfree(kmem); > - return; > - } > - > - OPTIMIZER_HIDE_VAR(size); > - > - pr_info("out-of-bounds in copy_from_user()\n"); > - unused =3D copy_from_user(kmem, usermem, size + 1); > - > - pr_info("out-of-bounds in copy_to_user()\n"); > - unused =3D copy_to_user(usermem, kmem, size + 1); > - > - pr_info("out-of-bounds in __copy_from_user()\n"); > - unused =3D __copy_from_user(kmem, usermem, size + 1); > - > - pr_info("out-of-bounds in __copy_to_user()\n"); > - unused =3D __copy_to_user(usermem, kmem, size + 1); > - > - pr_info("out-of-bounds in __copy_from_user_inatomic()\n"); > - unused =3D __copy_from_user_inatomic(kmem, usermem, size + 1); > - > - pr_info("out-of-bounds in __copy_to_user_inatomic()\n"); > - unused =3D __copy_to_user_inatomic(usermem, kmem, size + 1); > - > - pr_info("out-of-bounds in strncpy_from_user()\n"); > - unused =3D strncpy_from_user(kmem, usermem, size + 1); > - > - vm_munmap((unsigned long)usermem, PAGE_SIZE); > - kfree(kmem); > -} > - > -static int __init kasan_test_module_init(void) > -{ > - /* > - * Temporarily enable multi-shot mode. Otherwise, KASAN would onl= y > - * report the first detected bug and panic the kernel if panic_on= _warn > - * is enabled. > - */ > - bool multishot =3D kasan_save_enable_multi_shot(); > - > - copy_user_test(); > - > - kasan_restore_multi_shot(multishot); > - return -EAGAIN; > -} > - > -module_init(kasan_test_module_init); > -MODULE_LICENSE("GPL"); > -- > 2.34.1 > Reviewed-by: Andrey Konovalov However, I didn't get a cover letter for v3. Normally, when sending a new version of a patch series, you need to resend all patches with the new version tag (even if not all of them were changed). Since you didn't resend them all, as it seems, at this point, I would recommend to resend the whole v3 series tagged as [PATCH RESEND v3]. Thank you!