From patchwork Wed Mar 1 00:35:44 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Collingbourne X-Patchwork-Id: 13155387 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 6DA5FC64EC4 for ; Wed, 1 Mar 2023 00:36:00 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 05AF56B0074; Tue, 28 Feb 2023 19:36:00 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 00B9D6B0075; Tue, 28 Feb 2023 19:35:59 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E15D96B0078; Tue, 28 Feb 2023 19:35:59 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id D41DE6B0074 for ; Tue, 28 Feb 2023 19:35:59 -0500 (EST) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id A05F2A0D21 for ; Wed, 1 Mar 2023 00:35:59 +0000 (UTC) X-FDA: 80518462038.16.C348393 Received: from mail-yw1-f201.google.com (mail-yw1-f201.google.com [209.85.128.201]) by imf29.hostedemail.com (Postfix) with ESMTP id EAB8A120012 for ; Wed, 1 Mar 2023 00:35:56 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b="N/rvOCTs"; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf29.hostedemail.com: domain of 37J3-YwMKCEk0nnrzzrwp.nzxwty58-xxv6lnv.z2r@flex--pcc.bounces.google.com designates 209.85.128.201 as permitted sender) smtp.mailfrom=37J3-YwMKCEk0nnrzzrwp.nzxwty58-xxv6lnv.z2r@flex--pcc.bounces.google.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1677630956; 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=eey2bWIXShb0HJ2rZd6676jnb6hRL1sBGHfdZHZ/mnM=; b=w4Doax6jXjxBGEPQKuwBnwHdyhZZ9DuC/US881PDwrPGbSt7/lp8yh+OTFlpnp2FwvNf6M UJKQOHtfeiIBxLSZ4PrSLX4EH6f1MJyry6LIyt8YS0potXU9b0jhbRsZu0WYxBjRHnw0E/ zQE/eCKcKUkjhB50g2GiFhDHtLd+NTo= ARC-Authentication-Results: i=1; imf29.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b="N/rvOCTs"; dmarc=pass (policy=reject) header.from=google.com; spf=pass (imf29.hostedemail.com: domain of 37J3-YwMKCEk0nnrzzrwp.nzxwty58-xxv6lnv.z2r@flex--pcc.bounces.google.com designates 209.85.128.201 as permitted sender) smtp.mailfrom=37J3-YwMKCEk0nnrzzrwp.nzxwty58-xxv6lnv.z2r@flex--pcc.bounces.google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677630957; a=rsa-sha256; cv=none; b=u0B8BF+FWrPSBGbrJjmm3GisJCD4M59W5SpVJJ2RMWI9I00C1cW7vN+tj4PGANK0OF6tRC XfxVzN5s0TG8St1U9QCcxVaWQE4Ap7DXBINAPz3dD3MfCnXkdJfa8Fr4T5/Mk+ug3uREcZ ulXKmS9UN9GANSU1TOqGtHsOIjFNr1k= Received: by mail-yw1-f201.google.com with SMTP id 00721157ae682-536c02ed619so249300737b3.8 for ; Tue, 28 Feb 2023 16:35:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1677630956; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=eey2bWIXShb0HJ2rZd6676jnb6hRL1sBGHfdZHZ/mnM=; b=N/rvOCTsechIvNmIOTnBhNoi5KZG22HeDohVgUqyzh51PuL1ed75xihZpysMdEVal2 wARbnZTqVLVUT+MMa3aUDPY8CUUtsciF2YtXI8mkQJo1j345YwGk2XVrdfDAeh9ROK6I dW93rejBHlQb9vozFjw+sZUkqGUcFWgkyukVF/jdROyet4Aln11AfIjPFQzQfkpNw5KB /O7No6saJ5dbQS/1E3L3sj7E357ESb11gEZmhJCkcQO/SUK59W1cL7oZha7+GE5qZeln AMYmyJIVmkWpUfAuGf2PT5aaBSj2iqDJNDL0NEqPy9OouRx/udkBAU7pQ7IA5WKbEXgT KjuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1677630956; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=eey2bWIXShb0HJ2rZd6676jnb6hRL1sBGHfdZHZ/mnM=; b=T05PqigQMNwiLze7yR6IrK5/zbAKwxaKczDsO3mluW6WAnGzy+yNBZdoxrCLvWCg2i T4t5eXa8NfgjtO1CHmHN1qdqeETnYJ6igGXDkdcH8LXvmM0W3U3MIKgULGiw4HA2Mgi/ XOnUv4kiN9unZoGf9XKx889yFNlajN5tXQEpWwzQG4xWx4tGT7Sf4HwDWM8IPX9np9pJ ae6j1tINaEq+2tzb4pdIkco6fut5gCeC8tf8GdY4Pt0+WJNxuggJt1PwNVEZ/zt6XmD3 a5tLvOAtsn121fhoczaQ4ir5S7UiJEdwmVmOqKYe9E9YYw58RuR55LP9LhJbvIejEa8A XMog== X-Gm-Message-State: AO0yUKWUhHJHFh445tC7/B0UAr5SHgMa0oHw9Owgv+Gy+mzsC6SvKFV0 5MIfC9JwnPTcLUnUEjHALSGENCk= X-Google-Smtp-Source: AK7set+WnI/8zx0zNX6UuAbKa7eTpm1PBQ2QsJBRGQ8Ke+NGGxZmEk1/EvIgBz5VBsB310OKC9gx0Ws= X-Received: from pcc-desktop.svl.corp.google.com ([2620:15c:2d3:205:cb8e:e6d0:b612:8d4c]) (user=pcc job=sendgmr) by 2002:a25:ec09:0:b0:aa3:f90f:369b with SMTP id j9-20020a25ec09000000b00aa3f90f369bmr193406ybh.6.1677630956042; Tue, 28 Feb 2023 16:35:56 -0800 (PST) Date: Tue, 28 Feb 2023 16:35:44 -0800 In-Reply-To: <20230301003545.282859-1-pcc@google.com> Message-Id: <20230301003545.282859-2-pcc@google.com> Mime-Version: 1.0 References: <20230301003545.282859-1-pcc@google.com> X-Mailer: git-send-email 2.39.2.722.g9855ee24e9-goog Subject: [PATCH v3 1/2] Revert "kasan: drop skip_kasan_poison variable in free_pages_prepare" From: Peter Collingbourne To: catalin.marinas@arm.com, andreyknvl@gmail.com Cc: Peter Collingbourne , linux-mm@kvack.org, kasan-dev@googlegroups.com, ryabinin.a.a@gmail.com, linux-arm-kernel@lists.infradead.org, vincenzo.frascino@arm.com, will@kernel.org, eugenis@google.com, stable@vger.kernel.org X-Rspamd-Queue-Id: EAB8A120012 X-Rspamd-Server: rspam09 X-Rspam-User: X-Stat-Signature: 6r96b1q1hwf5ra4ohx8ikpqpip9ui1xn X-HE-Tag: 1677630956-898970 X-HE-Meta: U2FsdGVkX1+GQ6l+2xYyaifFxyh5z/BhTCxn0P9yx8elEca/Kz3Kxw1b848KRf0Y2MYIyo3Fe9wKQkuAGf41JRZMZucts1NJ33D8RIlAqQeA/UT36qNtWHi6S00sQO/saw4Gmoh7mqPsAhrm0Vt0J1v2z0n7RAZjcnrHz96pkr20yVm7HFy74CSd5gqwSV+5lY//mQqq+r5rdcz/xwcwPO4UqOdZxwjgHmNmvs7zFwWzv6qhGvnYdX7b2tB5RxrajPJmLvNsKwIiDbQxp7jxVQzdRerWI4ID1auwYRUIhn1+tBIytThb7IzpImEXrpNoJo4QlD8jTXdWdYouAPNCkEaYRknm+DJ7l4NptxCbF78UAAisaHFNR65vkUUSB9SJseebgwWYJf7sW5ZLMgPhHXF1KaCoy7C2u/kJdScJKjbbDP2rPljBGamRmuBVbezU5Y3aD5mUE0gvGTYVvBPv6HVauNPTQr+tBJOxIoyccLkVqzWXy9kXYt884UWhi0gMc3IyH9HIhKwjktI5DxFou5X+pY/jQ8ME/x7lRtvFXITx+ldtC7JYnznZStyJPpbCZaZlIOfzOsNg2evOHK9vuJ05CHQYe1yinzbVuYnBaDOCscdLfQvNczheVcEQq40fvGOOPQuSn9kUNx3Ish29SY43UmWTK8n6E0f61Mu0ei2i63eBfgcejjJZ39z1IRgYKM+/ZmHA2o5pRgSWEQYuK5a4opMOyUZEsGX/6hEEabZmhnkplWv9tLkbXkQhQnkzZrkfDwRl8SHVXPbhwdwIyTfuUQTSns9DbYuDVZltVI3npVicasBKmEUkyy5UOiLhJYb2O0Ck4IZniy5yVNKRxfAPXnPE1u9vmi+wGIT9BGYIlWzsLN/MluMki15ngW1Qrev4dmQ7rFIdFa85w1KCPq5r/VF/xpVV/NigZZfnMFMXLap8DplzQR+gsioTeRW+t9GzkTC2gfnnromjTjw 5Kxmp84x v3mrd/h5muJcMbgaJwWY+8ff9bAv9q/iO3Td5QDUfepdKv9MwNQnNYiQxK0HiiHp86XqCnwan/K2DxR4+j+4J9L5KQ2NNIYB2u69swSNSo9MCIZILEw/ivMXx/5W5reDod9xu2IV7ubpFOEHSmIqmRqWDvbsxEBvsegRpvErirCyZ2Oo3vkSZTEulbSdn3hOk/jZswhoGsqrOn+hHZTlv4ELcs6TjBDUJs6bEIyfNi/yu8j+uYAyeKnURApyzEkK7f/A4nxXGvlbavOpj8NN7+OxpPt2iWjvyQA0PFrfSX4PPFiBUbBD+DnvdNOSFi3r2Whld1IHgOKduzXB3xmJ8kvkjDFoLk/othwRiD5ezK4pacn9CsT7/ovAMSGkk3euEdxaqZm5+QqcuP0vhSfTQvKdqAVjf41HIM69kLDAMfucjV1zqf9u2oFUzAB0mYBgTTw2XsZwAd18bvkm0leflvPk9Y01DrSs+Y6ln0Sv5g60t8sJAFt2hit4z+K/FSimqlAeIYFmtQoy1TDaSoqu9L1kNwPrM971I5e4AsLlxgkLYpi7xE2TtpfZPwvo02i2tuHdARlQ6Ki1e128HMP6r2AswUBzCPppdTCgWDOQmBDv+5/DPlM3I8sQB3d3KaXLpViKvShrtS4c/ZnwCH83t0pqO+1ggCPfAlE0eEWhxpjZjGkxGoug1ZdwyK4HFL7oKpwUTUCPSv70dNsPLO8eZ5Buw3KxfUc/Vy+q48STPra+Ta+pjZKDQ8S+lsnGC0C3ZDOlxWfwhVSnUQeJm/7lCcONdSdFGyVR4P9+Kfpaw2tbxN+ZKSHa/K37QwtOUGVq9BYWJD6zB3tqkgFFXcOCf1mq7FI3PQqNx17mTmmGsAX/5HTw= 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: This reverts commit 487a32ec24be819e747af8c2ab0d5c515508086a. The should_skip_kasan_poison() function reads the PG_skip_kasan_poison flag from page->flags. However, this line of code in free_pages_prepare(): page->flags &= ~PAGE_FLAGS_CHECK_AT_PREP; clears most of page->flags, including PG_skip_kasan_poison, before calling should_skip_kasan_poison(), which meant that it would never return true as a result of the page flag being set. Therefore, fix the code to call should_skip_kasan_poison() before clearing the flags, as we were doing before the reverted patch. Signed-off-by: Peter Collingbourne Fixes: 487a32ec24be ("kasan: drop skip_kasan_poison variable in free_pages_prepare") Cc: # 6.1 Link: https://linux-review.googlesource.com/id/Ic4f13affeebd20548758438bb9ed9ca40e312b79 Reviewed-by: Andrey Konovalov --- mm/page_alloc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index ac1fc986af44..7136c36c5d01 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1398,6 +1398,7 @@ static __always_inline bool free_pages_prepare(struct page *page, unsigned int order, bool check_free, fpi_t fpi_flags) { int bad = 0; + bool skip_kasan_poison = should_skip_kasan_poison(page, fpi_flags); bool init = want_init_on_free(); VM_BUG_ON_PAGE(PageTail(page), page); @@ -1470,7 +1471,7 @@ static __always_inline bool free_pages_prepare(struct page *page, * With hardware tag-based KASAN, memory tags must be set before the * page becomes unavailable via debug_pagealloc or arch_free_page. */ - if (!should_skip_kasan_poison(page, fpi_flags)) { + if (!skip_kasan_poison) { kasan_poison_pages(page, order, init); /* Memory is already initialized if KASAN did it internally. */ From patchwork Wed Mar 1 00:35:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Peter Collingbourne X-Patchwork-Id: 13155388 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 BA6ECC7EE30 for ; Wed, 1 Mar 2023 00:36:01 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3E2F46B0075; Tue, 28 Feb 2023 19:36:01 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 38DA86B0078; Tue, 28 Feb 2023 19:36:01 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 1E1836B007B; Tue, 28 Feb 2023 19:36:01 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 01D8F6B0075 for ; Tue, 28 Feb 2023 19:36:00 -0500 (EST) Received: from smtpin01.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id D5FB7140D10 for ; Wed, 1 Mar 2023 00:36:00 +0000 (UTC) X-FDA: 80518462080.01.1FBE73F Received: from mail-yw1-f202.google.com (mail-yw1-f202.google.com [209.85.128.202]) by imf26.hostedemail.com (Postfix) with ESMTP id 0E519140006 for ; Wed, 1 Mar 2023 00:35:58 +0000 (UTC) Authentication-Results: imf26.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=AuslzdI7; spf=pass (imf26.hostedemail.com: domain of 37p3-YwMKCEs2ppt11tyr.p1zyv07A-zzx8npx.14t@flex--pcc.bounces.google.com designates 209.85.128.202 as permitted sender) smtp.mailfrom=37p3-YwMKCEs2ppt11tyr.p1zyv07A-zzx8npx.14t@flex--pcc.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=1677630959; 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=NjYZ7qGe/4ra9Gc/ryyn0J5hZXPg6ro+BerrGnTKpQ4=; b=QwzG0AGhyxAI6IC0kB61Vp6HpUne3HTmJfZLhdFLtd9FA36LVrrZTsb04bvEcAKczs4dn4 TGTOklg/RVx/amXZW6VQpWrF5EbQRI191/KqIdIOQhlbI01wFPXMc+iXlgPWX83OqtcFqQ RmwxXgTWFhI9FodvzXaCFea37RET5N4= ARC-Authentication-Results: i=1; imf26.hostedemail.com; dkim=pass header.d=google.com header.s=20210112 header.b=AuslzdI7; spf=pass (imf26.hostedemail.com: domain of 37p3-YwMKCEs2ppt11tyr.p1zyv07A-zzx8npx.14t@flex--pcc.bounces.google.com designates 209.85.128.202 as permitted sender) smtp.mailfrom=37p3-YwMKCEs2ppt11tyr.p1zyv07A-zzx8npx.14t@flex--pcc.bounces.google.com; dmarc=pass (policy=reject) header.from=google.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1677630959; a=rsa-sha256; cv=none; b=5Y7VCBQO/3eiPTNEKs+Vm/UBCngUDIxJN8R5t6e3P7D6jc69DlGVO9j3ovAIgS297So1Tq 8mzhlHiX4Y/DVs01sVU27VPmtWrL73C+XQy6DPO6KHTfDFAVXUBN+8ey75F4wD+seq8Zpo U7jAZ/x8kb5AXHZ+Yj8RNbnt4zgvLV4= Received: by mail-yw1-f202.google.com with SMTP id 00721157ae682-536c6ce8d74so245422857b3.9 for ; Tue, 28 Feb 2023 16:35:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; t=1677630958; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=NjYZ7qGe/4ra9Gc/ryyn0J5hZXPg6ro+BerrGnTKpQ4=; b=AuslzdI7Lsye7AuiXCE9HijVJn2TabWr8d2AiXdqfn1JlOpx90zZrieiq80bONgztQ CJwLUtKWZE+aVkoMmIYIV2PBsrHo/bojOWXOrMmCB0Gg9lf2gUtmZBdwY/vlwZZRTjYx YDkinjaduST6gLtIcfAo2tB6nrIEN5uSNQ3ChshtfLIU/pxNvM5v/YI/h+dinhMlh+bc ADbEiezwmUQZZ195g9kvW9uIfQcGbKubKuDNC+O2KNW+GkzpnkgYaTPFBeFATLqcchxu Y1ngxVIb+73DgnCh4ApjgZ/RLqQUQFWnvYIzeQG9paOmfrVPLNmC1+I1a8ehpXinBaws wEmQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1677630958; h=cc:to:from:subject:references:mime-version:message-id:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=NjYZ7qGe/4ra9Gc/ryyn0J5hZXPg6ro+BerrGnTKpQ4=; b=A4e68e5jXzqw4WgEOGKMkBg4XMetb0wPQPWfNJIDNas3HUA/oo28SRd51CuixxeIsK +Wvk4xySiRZUMj9Ktgs/1Lkt+nYvBZtGFPE3FlIgH+ldlreqvLiv92YWtBYqrOvyTUog fLTToH8cmzXpl7mJOMagXw2KDCgo8t0ldYkxjfK/hl2GsLN96b/370i7HJJ2/mV1aNiF btx2BTUwOE6sc7dtRq3JCyPT1fZoOZdnU9LnuPhSPvQMfeW/y7l8uMM3tj13OI6W62sP IStJN2wDvdj7xHgxXzloxBYJS+oQqjgeFePdndRQx4QoRDb1WAJO/qXkim81NvKlY9sT Ky5A== X-Gm-Message-State: AO0yUKUqgPYJ5dcDv+iY1VkMMPXEIHpsKBRsk2LRw06z0lzk3EdajB66 +zM+F/BFZwc032mFqq4cWEI7sds= X-Google-Smtp-Source: AK7set/tzF261rDchLsUaTpxlGzEe6dR1tjCUWZ+8pVfe3nkh4ZTCqa4IyR6P3F8B0e/WomritW2h4w= X-Received: from pcc-desktop.svl.corp.google.com ([2620:15c:2d3:205:cb8e:e6d0:b612:8d4c]) (user=pcc job=sendgmr) by 2002:a5b:892:0:b0:9fe:195a:ce0d with SMTP id e18-20020a5b0892000000b009fe195ace0dmr1054943ybq.10.1677630958111; Tue, 28 Feb 2023 16:35:58 -0800 (PST) Date: Tue, 28 Feb 2023 16:35:45 -0800 In-Reply-To: <20230301003545.282859-1-pcc@google.com> Message-Id: <20230301003545.282859-3-pcc@google.com> Mime-Version: 1.0 References: <20230301003545.282859-1-pcc@google.com> X-Mailer: git-send-email 2.39.2.722.g9855ee24e9-goog Subject: [PATCH v3 2/2] kasan: remove PG_skip_kasan_poison flag From: Peter Collingbourne To: catalin.marinas@arm.com, andreyknvl@gmail.com Cc: Peter Collingbourne , linux-mm@kvack.org, kasan-dev@googlegroups.com, ryabinin.a.a@gmail.com, linux-arm-kernel@lists.infradead.org, vincenzo.frascino@arm.com, will@kernel.org, eugenis@google.com X-Rspamd-Server: rspam07 X-Rspamd-Queue-Id: 0E519140006 X-Rspam-User: X-Stat-Signature: n8wp64tbzu8nah7q5e85434qesnt7t1q X-HE-Tag: 1677630958-681449 X-HE-Meta: U2FsdGVkX18Vck76v/1iRu33w0C7Hdp+Q3DNzwFuArCLEwQfRrqeuuG+nL0ENqLgsPv7Z17eBIlJpzsxYPWFBOxh8ThIy/VfzqO8X3Br3APwZ1ba/EUymF9SOkzN8YAOS07j8Bfi1eeyfpBJUOiyTHRjkzvEkYoGZkdp+AHZ4/H9Oj02ua8SBe2MoAscvapHl3EAy3DbjUh1Z8WWJBva2uRnfi1ps1IyDi1Dg+AzH032zYdyIpaCiIOnA+cPl08nV1EDd8fhDzXw0VIJiMUC2yXhXG2iys3xcCDR6bDSnsZx0BZl6+zwHbksOcfYJypQHgJrXFXQplr824zbG00dS7chY0olcp9DYPFqMVVxO263xyEHBjex/PxAFHVj9CCOPSU/dhPy/maLjVtqNw0+Ls+7k6Qb2CrfQVznqwOs9n5v1i9X3vmscWOkFNLzneJjy4+3V95ooag98p1QXH7XOJS9rs6wxQCOzwTydGV6aWz2Jv8zNqbyhVlVA+8FHzA4/Jp2D+wSYul2Il1UMLz1k661FDzRgSLAFta8slczFG+x/wjFMo8lJi+4V6gtUnoW56HGWunlHV3/Afg2mqxpydMfxzkwjkstqcPcQJBWQ++dqsNttrOXurVdrX/RQ9E5KALKOdryuNnBWgI/Ft2aqSBYM7bGaoxrVfLeUhjeiCm2fNQVR3juIQ8C0Z6OgPd8ZgkeLqxDPS8MIotM/V35r2kRl9DVsQzQPcTdKuCfoCXibkO5Llh3uihHfwdJEiD/T0hscQc9PM8V7+kWcpwlwq6+rK1QLzBzknsVOLOI2v9ynij6ohvvovIAi/btYZDsHof0yMPBP5oowWZFcLLI4jRBjBXybUaWajKD/9SiDZDs+DA88p/Hd8C7Ai2cwfrDaRDrckXMcOszpkp74yk6P4bsGIsCAL40MGEMc96LdPCIpDou75bLQhWqUEjJacfwS13s0a9jktjlsyvHhWo ZHY9PRk7 YXUK4i2fYMp/dM91nZVnHiyVtxqsKXBt9mrlWe9uKbmwsm4rS+QHH64Sa8WPtaipSdWNQ7iRq9e4795Wtags2R4rmx9At9ckUASIFNsa/3HSl04Cs7GAaIAIOlHQBGgCuItNYiJ8oo2PRW0DE+Pt8zU0+Zf1uLUZlGZ3HSJEitnY2KHhm/OuxwBF53TJ4BWwYJBI06Xd3VVtIXBBaj6fNsmtJGn8iDiAjGrmz1R57NNfm1p0m/vPMRrfTAkFGZlkQ7BCp7vY+EuYahbH06vhvcATnhZJUdQV3GSyIHKTsvWkG2psxaBaYsFQrF26AqGhNjUBP15sTF/qU/1cn2eu3jLnsI2AgM4zUxXBLlRr3wQdRRixAugNe083nmXlYrV2NGdJ7ubm+05Sx2T6TxdX47WKth5sW0Os9fwZKV4YF+z0fFGXVy7lbtQlsdYB04Aj/QEw6kr7kGVOmFP6uDm2D4h80Ye11KdUUxpYH9e4rEmZyMxPUOJEp83+iPjHqINLU6qqSZObwsJ8iBUhrwWuyQ1Ewkn0NqIrXotEucTqupZtCiAB1cC4Ynj2p6R8ksC57wCJN/wKg9TBUtexgimoO8h2h5+Pg7sa1f1Wcs6ByZg31qD248B5QeSm778QnfoH5skIcuKzBRg4fOBu/NTS+6o7h/KOWlpji3WFTwOgFBB33D84CPlle0frGLeYRmmFMDA+Y4g1njFiumu9yh2OT9CyDSDqgTZwK8NMJQl5BGYBm8VWSDL0YG+qOW10ID2L8BdhlQzNhZv0f2IquztT+SfI4mQ== 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: Code inspection reveals that PG_skip_kasan_poison is redundant with kasantag, because the former is intended to be set iff the latter is the match-all tag. It can also be observed that it's basically pointless to poison pages which have kasantag=0, because any pages with this tag would have been pointed to by pointers with match-all tags, so poisoning the pages would have little to no effect in terms of bug detection. Therefore, change the condition in should_skip_kasan_poison() to check kasantag instead, and remove PG_skip_kasan_poison and associated flags. Signed-off-by: Peter Collingbourne Link: https://linux-review.googlesource.com/id/I57f825f2eaeaf7e8389d6cf4597c8a5821359838 Reviewed-by: Andrey Konovalov --- v3: - update comments v2: - also remove GFP_SKIP_KASAN_POISON and FPI_SKIP_KASAN_POISON - rename GFP_SKIP_KASAN_UNPOISON to GFP_SKIP_KASAN - update comments - simplify control flow by removing reset_tags include/linux/gfp_types.h | 30 ++++++------- include/linux/page-flags.h | 9 ---- include/trace/events/mmflags.h | 12 +---- mm/kasan/hw_tags.c | 2 +- mm/page_alloc.c | 81 +++++++++++++--------------------- mm/vmalloc.c | 2 +- 6 files changed, 47 insertions(+), 89 deletions(-) diff --git a/include/linux/gfp_types.h b/include/linux/gfp_types.h index 5088637fe5c2..6583a58670c5 100644 --- a/include/linux/gfp_types.h +++ b/include/linux/gfp_types.h @@ -47,16 +47,14 @@ typedef unsigned int __bitwise gfp_t; #define ___GFP_ACCOUNT 0x400000u #define ___GFP_ZEROTAGS 0x800000u #ifdef CONFIG_KASAN_HW_TAGS -#define ___GFP_SKIP_ZERO 0x1000000u -#define ___GFP_SKIP_KASAN_UNPOISON 0x2000000u -#define ___GFP_SKIP_KASAN_POISON 0x4000000u +#define ___GFP_SKIP_ZERO 0x1000000u +#define ___GFP_SKIP_KASAN 0x2000000u #else -#define ___GFP_SKIP_ZERO 0 -#define ___GFP_SKIP_KASAN_UNPOISON 0 -#define ___GFP_SKIP_KASAN_POISON 0 +#define ___GFP_SKIP_ZERO 0 +#define ___GFP_SKIP_KASAN 0 #endif #ifdef CONFIG_LOCKDEP -#define ___GFP_NOLOCKDEP 0x8000000u +#define ___GFP_NOLOCKDEP 0x4000000u #else #define ___GFP_NOLOCKDEP 0 #endif @@ -234,25 +232,24 @@ typedef unsigned int __bitwise gfp_t; * memory tags at the same time as zeroing memory has minimal additional * performace impact. * - * %__GFP_SKIP_KASAN_UNPOISON makes KASAN skip unpoisoning on page allocation. - * Only effective in HW_TAGS mode. - * - * %__GFP_SKIP_KASAN_POISON makes KASAN skip poisoning on page deallocation. - * Typically, used for userspace pages. Only effective in HW_TAGS mode. + * %__GFP_SKIP_KASAN makes KASAN skip unpoisoning on page allocation. + * Used for userspace and vmalloc pages; the latter are unpoisoned by + * kasan_unpoison_vmalloc instead. For userspace pages, results in + * poisoning being skipped as well, see should_skip_kasan_poison for + * details. Only effective in HW_TAGS mode. */ #define __GFP_NOWARN ((__force gfp_t)___GFP_NOWARN) #define __GFP_COMP ((__force gfp_t)___GFP_COMP) #define __GFP_ZERO ((__force gfp_t)___GFP_ZERO) #define __GFP_ZEROTAGS ((__force gfp_t)___GFP_ZEROTAGS) #define __GFP_SKIP_ZERO ((__force gfp_t)___GFP_SKIP_ZERO) -#define __GFP_SKIP_KASAN_UNPOISON ((__force gfp_t)___GFP_SKIP_KASAN_UNPOISON) -#define __GFP_SKIP_KASAN_POISON ((__force gfp_t)___GFP_SKIP_KASAN_POISON) +#define __GFP_SKIP_KASAN ((__force gfp_t)___GFP_SKIP_KASAN) /* Disable lockdep for GFP context tracking */ #define __GFP_NOLOCKDEP ((__force gfp_t)___GFP_NOLOCKDEP) /* Room for N __GFP_FOO bits */ -#define __GFP_BITS_SHIFT (27 + IS_ENABLED(CONFIG_LOCKDEP)) +#define __GFP_BITS_SHIFT (26 + IS_ENABLED(CONFIG_LOCKDEP)) #define __GFP_BITS_MASK ((__force gfp_t)((1 << __GFP_BITS_SHIFT) - 1)) /** @@ -335,8 +332,7 @@ typedef unsigned int __bitwise gfp_t; #define GFP_DMA __GFP_DMA #define GFP_DMA32 __GFP_DMA32 #define GFP_HIGHUSER (GFP_USER | __GFP_HIGHMEM) -#define GFP_HIGHUSER_MOVABLE (GFP_HIGHUSER | __GFP_MOVABLE | \ - __GFP_SKIP_KASAN_POISON | __GFP_SKIP_KASAN_UNPOISON) +#define GFP_HIGHUSER_MOVABLE (GFP_HIGHUSER | __GFP_MOVABLE | __GFP_SKIP_KASAN) #define GFP_TRANSHUGE_LIGHT ((GFP_HIGHUSER_MOVABLE | __GFP_COMP | \ __GFP_NOMEMALLOC | __GFP_NOWARN) & ~__GFP_RECLAIM) #define GFP_TRANSHUGE (GFP_TRANSHUGE_LIGHT | __GFP_DIRECT_RECLAIM) diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index a7e3a3405520..74f81a52e7e1 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -135,9 +135,6 @@ enum pageflags { #ifdef CONFIG_ARCH_USES_PG_ARCH_X PG_arch_2, PG_arch_3, -#endif -#ifdef CONFIG_KASAN_HW_TAGS - PG_skip_kasan_poison, #endif __NR_PAGEFLAGS, @@ -594,12 +591,6 @@ TESTCLEARFLAG(Young, young, PF_ANY) PAGEFLAG(Idle, idle, PF_ANY) #endif -#ifdef CONFIG_KASAN_HW_TAGS -PAGEFLAG(SkipKASanPoison, skip_kasan_poison, PF_HEAD) -#else -PAGEFLAG_FALSE(SkipKASanPoison, skip_kasan_poison) -#endif - /* * PageReported() is used to track reported free pages within the Buddy * allocator. We can use the non-atomic version of the test and set diff --git a/include/trace/events/mmflags.h b/include/trace/events/mmflags.h index 9db52bc4ce19..232bc8efc98e 100644 --- a/include/trace/events/mmflags.h +++ b/include/trace/events/mmflags.h @@ -55,8 +55,7 @@ #ifdef CONFIG_KASAN_HW_TAGS #define __def_gfpflag_names_kasan , \ gfpflag_string(__GFP_SKIP_ZERO), \ - gfpflag_string(__GFP_SKIP_KASAN_POISON), \ - gfpflag_string(__GFP_SKIP_KASAN_UNPOISON) + gfpflag_string(__GFP_SKIP_KASAN) #else #define __def_gfpflag_names_kasan #endif @@ -96,12 +95,6 @@ #define IF_HAVE_PG_ARCH_X(flag,string) #endif -#ifdef CONFIG_KASAN_HW_TAGS -#define IF_HAVE_PG_SKIP_KASAN_POISON(flag,string) ,{1UL << flag, string} -#else -#define IF_HAVE_PG_SKIP_KASAN_POISON(flag,string) -#endif - #define __def_pageflag_names \ {1UL << PG_locked, "locked" }, \ {1UL << PG_waiters, "waiters" }, \ @@ -130,8 +123,7 @@ IF_HAVE_PG_HWPOISON(PG_hwpoison, "hwpoison" ) \ IF_HAVE_PG_IDLE(PG_young, "young" ) \ IF_HAVE_PG_IDLE(PG_idle, "idle" ) \ IF_HAVE_PG_ARCH_X(PG_arch_2, "arch_2" ) \ -IF_HAVE_PG_ARCH_X(PG_arch_3, "arch_3" ) \ -IF_HAVE_PG_SKIP_KASAN_POISON(PG_skip_kasan_poison, "skip_kasan_poison") +IF_HAVE_PG_ARCH_X(PG_arch_3, "arch_3" ) #define show_page_flags(flags) \ (flags) ? __print_flags(flags, "|", \ diff --git a/mm/kasan/hw_tags.c b/mm/kasan/hw_tags.c index d1bcb0205327..bb4f56e5bdec 100644 --- a/mm/kasan/hw_tags.c +++ b/mm/kasan/hw_tags.c @@ -318,7 +318,7 @@ void *__kasan_unpoison_vmalloc(const void *start, unsigned long size, * Thus, for VM_ALLOC mappings, hardware tag-based KASAN only tags * the first virtual mapping, which is created by vmalloc(). * Tagging the page_alloc memory backing that vmalloc() allocation is - * skipped, see ___GFP_SKIP_KASAN_UNPOISON. + * skipped, see ___GFP_SKIP_KASAN. * * For non-VM_ALLOC allocations, page_alloc memory is tagged as usual. */ diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 7136c36c5d01..0db33faf760d 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -112,17 +112,6 @@ typedef int __bitwise fpi_t; */ #define FPI_TO_TAIL ((__force fpi_t)BIT(1)) -/* - * Don't poison memory with KASAN (only for the tag-based modes). - * During boot, all non-reserved memblock memory is exposed to page_alloc. - * Poisoning all that memory lengthens boot time, especially on systems with - * large amount of RAM. This flag is used to skip that poisoning. - * This is only done for the tag-based KASAN modes, as those are able to - * detect memory corruptions with the memory tags assigned by default. - * All memory allocated normally after boot gets poisoned as usual. - */ -#define FPI_SKIP_KASAN_POISON ((__force fpi_t)BIT(2)) - /* prevent >1 _updater_ of zone percpu pageset ->high and ->batch fields */ static DEFINE_MUTEX(pcp_batch_high_lock); #define MIN_PERCPU_PAGELIST_HIGH_FRACTION (8) @@ -1355,13 +1344,19 @@ static int free_tail_pages_check(struct page *head_page, struct page *page) /* * Skip KASAN memory poisoning when either: * - * 1. Deferred memory initialization has not yet completed, - * see the explanation below. - * 2. Skipping poisoning is requested via FPI_SKIP_KASAN_POISON, - * see the comment next to it. - * 3. Skipping poisoning is requested via __GFP_SKIP_KASAN_POISON, - * see the comment next to it. - * 4. The allocation is excluded from being checked due to sampling, + * 1. For generic KASAN: deferred memory initialization has not yet completed. + * Tag-based KASAN modes skip pages freed via deferred memory initialization + * using page tags instead (see below). + * 2. For tag-based KASAN modes: the page has a match-all KASAN tag, indicating + * that error detection is disabled for accesses via the page address. + * + * Pages will have match-all tags in the following circumstances: + * + * 1. Pages are being initialized for the first time, including during deferred + * memory init; see the call to page_kasan_tag_reset in __init_single_page. + * 2. The allocation was not unpoisoned due to __GFP_SKIP_KASAN, with the + * exception of pages unpoisoned by kasan_unpoison_vmalloc. + * 3. The allocation was excluded from being checked due to sampling, * see the call to kasan_unpoison_pages. * * Poisoning pages during deferred memory init will greatly lengthen the @@ -1377,10 +1372,10 @@ static int free_tail_pages_check(struct page *head_page, struct page *page) */ static inline bool should_skip_kasan_poison(struct page *page, fpi_t fpi_flags) { - return deferred_pages_enabled() || - (!IS_ENABLED(CONFIG_KASAN_GENERIC) && - (fpi_flags & FPI_SKIP_KASAN_POISON)) || - PageSkipKASanPoison(page); + if (IS_ENABLED(CONFIG_KASAN_GENERIC)) + return deferred_pages_enabled(); + + return page_kasan_tag(page) == 0xff; } static void kernel_init_pages(struct page *page, int numpages) @@ -1754,7 +1749,7 @@ void __free_pages_core(struct page *page, unsigned int order) * Bypass PCP and place fresh pages right to the tail, primarily * relevant for memory onlining. */ - __free_pages_ok(page, order, FPI_TO_TAIL | FPI_SKIP_KASAN_POISON); + __free_pages_ok(page, order, FPI_TO_TAIL); } #ifdef CONFIG_NUMA @@ -2456,9 +2451,9 @@ static inline bool should_skip_kasan_unpoison(gfp_t flags) /* * With hardware tag-based KASAN enabled, skip if this has been - * requested via __GFP_SKIP_KASAN_UNPOISON. + * requested via __GFP_SKIP_KASAN. */ - return flags & __GFP_SKIP_KASAN_UNPOISON; + return flags & __GFP_SKIP_KASAN; } static inline bool should_skip_init(gfp_t flags) @@ -2477,7 +2472,6 @@ inline void post_alloc_hook(struct page *page, unsigned int order, bool init = !want_init_on_free() && want_init_on_alloc(gfp_flags) && !should_skip_init(gfp_flags); bool zero_tags = init && (gfp_flags & __GFP_ZEROTAGS); - bool reset_tags = true; int i; set_page_private(page, 0); @@ -2511,37 +2505,22 @@ inline void post_alloc_hook(struct page *page, unsigned int order, /* Take note that memory was initialized by the loop above. */ init = false; } - if (!should_skip_kasan_unpoison(gfp_flags)) { - /* Try unpoisoning (or setting tags) and initializing memory. */ - if (kasan_unpoison_pages(page, order, init)) { - /* Take note that memory was initialized by KASAN. */ - if (kasan_has_integrated_init()) - init = false; - /* Take note that memory tags were set by KASAN. */ - reset_tags = false; - } else { - /* - * KASAN decided to exclude this allocation from being - * (un)poisoned due to sampling. Make KASAN skip - * poisoning when the allocation is freed. - */ - SetPageSkipKASanPoison(page); - } - } - /* - * If memory tags have not been set by KASAN, reset the page tags to - * ensure page_address() dereferencing does not fault. - */ - if (reset_tags) { + if (!should_skip_kasan_unpoison(gfp_flags) && + kasan_unpoison_pages(page, order, init)) { + /* Take note that memory was initialized by KASAN. */ + if (kasan_has_integrated_init()) + init = false; + } else { + /* + * If memory tags have not been set by KASAN, reset the page + * tags to ensure page_address() dereferencing does not fault. + */ for (i = 0; i != 1 << order; ++i) page_kasan_tag_reset(page + i); } /* If memory is still not initialized, initialize it now. */ if (init) kernel_init_pages(page, 1 << order); - /* Propagate __GFP_SKIP_KASAN_POISON to page flags. */ - if (kasan_hw_tags_enabled() && (gfp_flags & __GFP_SKIP_KASAN_POISON)) - SetPageSkipKASanPoison(page); set_page_owner(page, order, gfp_flags); page_table_check_alloc(page, order); diff --git a/mm/vmalloc.c b/mm/vmalloc.c index ef910bf349e1..b0c84847e9b6 100644 --- a/mm/vmalloc.c +++ b/mm/vmalloc.c @@ -3170,7 +3170,7 @@ void *__vmalloc_node_range(unsigned long size, unsigned long align, * pages backing VM_ALLOC mapping. Memory is instead * poisoned and zeroed by kasan_unpoison_vmalloc(). */ - gfp_mask |= __GFP_SKIP_KASAN_UNPOISON | __GFP_SKIP_ZERO; + gfp_mask |= __GFP_SKIP_KASAN | __GFP_SKIP_ZERO; } /* Take note that the mapping is PAGE_KERNEL. */