Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp3542555pxb; Mon, 24 Jan 2022 11:49:42 -0800 (PST) X-Google-Smtp-Source: ABdhPJx86yTwJ0fzYi1NI66DDATtuoUgzqqRzWuIjadiNt89iLRiTd0GLRmO0+E8mEF0Rp2Gfca+ X-Received: by 2002:a17:902:bb87:b0:148:a2e7:fb52 with SMTP id m7-20020a170902bb8700b00148a2e7fb52mr15945639pls.147.1643053782476; Mon, 24 Jan 2022 11:49:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1643053782; cv=none; d=google.com; s=arc-20160816; b=riLXK0Ux4btd/bMUhso7YB9g3iUK/ebQMqLL0Jjqf4Y5Z6BpfQzI8r/7Zyvag3kBRX ME4B2i0rEtfFmxYsuPd0wKsC1c5PzuAklAbopT0ySV5SXCx9jQVq1MuIYLmfKDAIEaEA qaMKTTYC9g0y/EVlOCJshsNTfMRCYPyINJxjcTcaV4jykBXYzini/Qc6Qchw+p8ZgEYR fRSyK/9f6Cp50h7cLTsdL7YzxCUaT8p5XLcLOFzzJmXinMSsTpKHTioQ8oTwDUqY7CCf zBbpXLzlAo9EmIjrfLt8mMH8XkrpzrfRGedmUUcvUvlh4JqlxnB5G61/UUELrKCECQdk l8GQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=lu+d0FvmlGAoYbgcSnAcHnve/JGZrRKgqG6H2fXAm3E=; b=Jr59cyjjk8vmuyHUgju2YuP+qWarlwIitNVjV358I3C7kcr/Ip1pdHhRX+Q2wFNiIu K9ZGGTSZFYh10XcQBccK8zyNZL/XKB53i6+Hd0ILhi96u0ah3SbPH/9M0mCYD2TArQfw 21f06M48nnwET9eHHIjTMQ9tCeGTBJW1fdX9zX6x/PHLy5dwDjE+3euVBNljV/MMoXOV Sjzaua236XlmJM/M5bDFzSyF6+v+lsCrvrPABhn83aVQq+Ieu223X9lCxLTl5MT2XRfo CE9qzcjI2WLUSjfrOwq36o+mjHxfhwkvlvCWNSy0Pvo835I2Uxut+Tjypds4iRmW227d SHag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=jk1sGMKw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id my13si262847pjb.171.2022.01.24.11.49.30; Mon, 24 Jan 2022 11:49:42 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linux.dev header.s=key1 header.b=jk1sGMKw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linux.dev Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S244845AbiAXSDG (ORCPT + 99 others); Mon, 24 Jan 2022 13:03:06 -0500 Received: from out0.migadu.com ([94.23.1.103]:17236 "EHLO out0.migadu.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S241599AbiAXSC6 (ORCPT ); Mon, 24 Jan 2022 13:02:58 -0500 X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1643047377; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=lu+d0FvmlGAoYbgcSnAcHnve/JGZrRKgqG6H2fXAm3E=; b=jk1sGMKwhwoZgx3UbKB/QI1h3DEwu01knIbZzdZW+9BQ1CAv9uVk/0kNprUvOZwmzqPWVh oIr5aVYPe4721mJRO4psY0m5/WXFgd80rBHDJYkiFvOTd47C7rev723tpFZDGqzEXSdHgP WZMkZakZustuhHBV37ABcRHukwEYlKU= From: andrey.konovalov@linux.dev To: Andrew Morton Cc: Andrey Konovalov , Marco Elver , Alexander Potapenko , Dmitry Vyukov , Andrey Ryabinin , kasan-dev@googlegroups.com, linux-mm@kvack.org, Vincenzo Frascino , Catalin Marinas , Will Deacon , Mark Rutland , linux-arm-kernel@lists.infradead.org, Peter Collingbourne , Evgenii Stepanov , linux-kernel@vger.kernel.org, Andrey Konovalov Subject: [PATCH v6 05/39] kasan, page_alloc: init memory of skipped pages on free Date: Mon, 24 Jan 2022 19:02:13 +0100 Message-Id: <1d97df75955e52727a3dc1c4e33b3b50506fc3fd.1643047180.git.andreyknvl@google.com> In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Migadu-Flow: FLOW_OUT X-Migadu-Auth-User: linux.dev Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Andrey Konovalov Since commit 7a3b83537188 ("kasan: use separate (un)poison implementation for integrated init"), when all init, kasan_has_integrated_init(), and skip_kasan_poison are true, free_pages_prepare() doesn't initialize the page. This is wrong. Fix it by remembering whether kasan_poison_pages() performed initialization, and call kernel_init_free_pages() if it didn't. Reordering kasan_poison_pages() and kernel_init_free_pages() is OK, since kernel_init_free_pages() can handle poisoned memory. Signed-off-by: Andrey Konovalov --- Changes v2->v3: - Drop Fixes tag, as the patch won't cleanly apply to older kernels anyway. The commit is mentioned in the patch description. Changes v1->v2: - Reorder kasan_poison_pages() and free_pages_prepare() in this patch instead of doing it in the previous one. --- mm/page_alloc.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 60bc838a4d85..f994fd68e3b1 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -1375,11 +1375,16 @@ 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 (init && !kasan_has_integrated_init()) - kernel_init_free_pages(page, 1 << order); - if (!skip_kasan_poison) + if (!skip_kasan_poison) { kasan_poison_pages(page, order, init); + /* Memory is already initialized if KASAN did it internally. */ + if (kasan_has_integrated_init()) + init = false; + } + if (init) + kernel_init_free_pages(page, 1 << order); + /* * arch_free_page() can make the page's contents inaccessible. s390 * does this. So nothing which can access the page's contents should -- 2.25.1