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 B308DD10F5A for ; Mon, 18 Nov 2024 04:10:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id E5FF08D0018; Sun, 17 Nov 2024 23:10:57 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id E0EE58D000D; Sun, 17 Nov 2024 23:10:57 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id CD7768D0018; Sun, 17 Nov 2024 23:10:57 -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 ABAB68D000D for ; Sun, 17 Nov 2024 23:10:57 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id 65C38160154 for ; Mon, 18 Nov 2024 04:10:57 +0000 (UTC) X-FDA: 82797889146.18.5B68501 Received: from casper.infradead.org (casper.infradead.org [90.155.50.34]) by imf19.hostedemail.com (Postfix) with ESMTP id CB74F1A0002 for ; Mon, 18 Nov 2024 04:09:54 +0000 (UTC) Authentication-Results: imf19.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=gsFjVtvP; dmarc=none; spf=none (imf19.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1731902873; a=rsa-sha256; cv=none; b=0SchSaP+vndMhUSn4hubn/3ECHH62+C78PaWN3VLd6V5GeY3mwR5rbTdjfN+z6LNnpSsxV dGdK5WQUzqR64nVT/v1atYrjdV+IifXYdqkhdCyiablZoenAE2VDCD0PrxquOzoHfr3yv8 CTEeu+OcUpoAiCsTszRNGjXWcbgSdwA= ARC-Authentication-Results: i=1; imf19.hostedemail.com; dkim=pass header.d=infradead.org header.s=casper.20170209 header.b=gsFjVtvP; dmarc=none; spf=none (imf19.hostedemail.com: domain of willy@infradead.org has no SPF policy when checking 90.155.50.34) smtp.mailfrom=willy@infradead.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1731902873; 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=9ZDIRBgFpCZrfxRdrYUTcVGYUj9o3eyEGynCSyQQ3T0=; b=21Qazb+0JCK4xibFoZu+FqR60AV2TZWuz63b6XZXXf/f9rsh1nbY1R41MSfHFNAm4BsNlE Z0SLS6g01UYlxYFjWpuRwrp/flsf7m6RczACZ5R3emM9Mj2lGKpofgwiVKdY+YA2vdL5vQ A7Ua58UjJA08VijG+0nPKyErjMBiyPI= DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=casper.20170209; h=In-Reply-To:Content-Type:MIME-Version: References:Message-ID:Subject:Cc:To:From:Date:Sender:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description; bh=9ZDIRBgFpCZrfxRdrYUTcVGYUj9o3eyEGynCSyQQ3T0=; b=gsFjVtvPA+fXkbHMP/RPM0jP46 tDXOZSgUnV459KQB1ZQjuJEeFNGjI+s+P62y9TFp6jw2NvncM8m36M1P9qjXE09AzuHuRKBNnFQh3 D9wNVHaWAaThvlKum/I3rJQemxX4ko8zxtv08KxG8Gt8p9dO9MgHgghdPQ6TcmvttVCjUYkU8Inal MGIy4afnUEKInO2HRLDGKT5fOiiCJjs9Le0BVQ+rIansKkvkd1NRgZ0zhLT7nyUOIrD1KTAgJi7GJ il7IB26XiEKeX+eVIX4YNgs0hpM0ABvn7SVDwKY/GpwrN7afCLVd7AaSHp9PWUGAnR3J/45DCP2sa OWS8B8+Q==; Received: from willy by casper.infradead.org with local (Exim 4.98 #2 (Red Hat Linux)) id 1tCt6D-00000002YNw-0LVn; Mon, 18 Nov 2024 04:10:53 +0000 Date: Mon, 18 Nov 2024 04:10:52 +0000 From: Matthew Wilcox To: Kees Cook Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-hardening@vger.kernel.org Subject: Re: [PATCH] mm: Handle compound pages better in __dump_page() Message-ID: References: <20241117055243.work.907-kees@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20241117055243.work.907-kees@kernel.org> X-Stat-Signature: quaj1ooqtoxfdjc1ut5dnyhn4r416r6z X-Rspamd-Queue-Id: CB74F1A0002 X-Rspamd-Server: rspam08 X-Rspam-User: X-HE-Tag: 1731902994-800682 X-HE-Meta: U2FsdGVkX1/V6hR/cz9mHVKPiuubi6y4FSvoNjPC332ynmJQsAO//DfHOYjfjwZ26yWOlHunevZwHNfvdhdIBhStUhkkzIIr7lspbk+B6gZPcHRVLLdv6DJMcsgdbdx87WV9i3Rf86voxOX697GDBsHzMy7JJQ6wpxB7TkDYAlMcblwZIpoiKwL3lGyAe16SGOU7a6bibil0QI0PBnMOjf4Pw57pem0ld+VwryFJ2WDKEifyEuXv6BaqGVG4tJGmJ0gKgYcKnEXeF6l9be49Voaty9ScNc+tQMsbs6PQwq5tAH99R7NJvZGfP7Icjnj1qiPX8AS1hX6sxbV+Su+aFhaZJQxcXY1MLmY7xTfTA4X8lG6bIZJbwzrkbjkAypFO5SOOSbD++BvfE9O6EzwzI3a2ntffjGjBAY0a6ixwZe/24L+KH4FhbMxt7ocXbgwlztFknbmdVZJKFS2pzQQmg9CuXCJy1xsnQyMHj3WTbw4xqa68ts/MsiR7MNU/4AJ0QfPeDdbdwLGm3++8gLlr8zh89psQ7H6qu83+g7VdllFrl2BupgeYZn/KbxkFhdwpunftlJfNsWbM1aZSevKPA86hLIUOZzNXttgOCQdY37o76E7hSYb6F+74eBmNDMZV4JgoMVWURl15epYr7OnDAgskp79XJfTxGOScHHyZSIRjs0lgMTyi8EWT2LSPe1VBp0J6VIXIX/UaDaI0xyaKyoJVqPF4rbE8SXOOgpc8/o/TgqmHtPXaM+Hl4nk1gAcHw/9qeNYwvg1m+1ISPAQa6ivzE3pFGhpPRDRcT5ViSbPy9O4ToXzLxSuZ68yiY1BOcVFjVYmlzmz6xXfWCxSZNwCT2KJ6okM2Y7P1K3+oIAnN+/g+LG7pW8rmgpun5HsF+ARL4TDypFLLEkmYPhqcDoFVqwpB7I3FOcPtXd/5fy3tahNYdmIKdu2H0Sd3EDJKoEVcsYoDRBKm9H1rCcG tgVbbN8Y FcqTFxqXJr+oQtj4DrtZKuEHpVZKgwRl5WmaLnKWdl+T8byyyYgfY5vm5OWex4CtnCZOYVSnMp71XfkA7MWwx0qQdrjDBbx1TWb80CfCshZ8yLkp064egz5YKwUy5XjW8QQaWgWBHLFIrfZmFC56xLvzbT+Th6gdBaayCCozBn6DRxnQlZE9eiOH6XIm60Ugpd1Sd+EviYdiUxSyBOQARLA8TyffSUCgpFOucdRS70HrLoJSria21DatzdZD13mpp0Qxbgj7ru/pKkqyuxYBTmtMDSw== 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 Sat, Nov 16, 2024 at 09:52:44PM -0800, Kees Cook wrote: > GCC 15's -Warray-bounds reports: > > In function 'page_fixed_fake_head', > inlined from '_compound_head' at ../include/linux/page-flags.h:251:24, > inlined from '__dump_page' at ../mm/debug.c:123:11: > ../include/asm-generic/rwonce.h:44:26: warning: array subscript 9 is outside array bounds of 'struct page[1]' [-Warray-bounds=] Thanks for bringing this back up. I have a somewhat orphaned patch in my tree that has a terrible commit message which was no help. That said, this patch is definitely wrong because it's unsafe to call page_fixed_fake_head(). > (Not noted in this warning is that the code passes through page_folio() > _Generic macro.) > > It may not be that "precise" is always 1 page, so accessing "page[1]" > in either page_folio() or folio_test_large() may cause problems. folio_test_large() does not touch page[1]. Look: static inline bool folio_test_large(const struct folio *folio) { return folio_test_head(folio); static __always_inline bool folio_test_head(const struct folio *folio) { return test_bit(PG_head, const_folio_flags(folio, FOLIO_PF_ANY)); #define FOLIO_PF_ANY 0 static const unsigned long *const_folio_flags(const struct folio *folio, unsigned n) { const struct page *page = &folio->page; VM_BUG_ON_PGFLAGS(PageTail(page), page); VM_BUG_ON_PGFLAGS(n > 0 && !test_bit(PG_head, &page->flags), page); return &page[n].flags; so we only look at page[0]. > Instead, explicitly make precise 2 pages. Just open-coding page_folio() > isn't sufficient to avoid the warning[1]. Why not? What goes wrong? I'm trying to get gcc-15 installed here now ...