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 9F87FC77B7F for ; Tue, 24 Jun 2025 15:17:34 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3B6506B00A2; Tue, 24 Jun 2025 11:17:34 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 366FE6B00A7; Tue, 24 Jun 2025 11:17:34 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2CB286B00AC; Tue, 24 Jun 2025 11:17:34 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 1D9976B00A2 for ; Tue, 24 Jun 2025 11:17:34 -0400 (EDT) Received: from smtpin16.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay07.hostedemail.com (Postfix) with ESMTP id BF2CB160A74 for ; Tue, 24 Jun 2025 15:17:33 +0000 (UTC) X-FDA: 83590648386.16.1BD2318 Received: from mout-p-201.mailbox.org (mout-p-201.mailbox.org [80.241.56.171]) by imf12.hostedemail.com (Postfix) with ESMTP id F22D940015 for ; Tue, 24 Jun 2025 15:17:31 +0000 (UTC) Authentication-Results: imf12.hostedemail.com; spf=pass (imf12.hostedemail.com: domain of cb@df7cb.de designates 80.241.56.171 as permitted sender) smtp.mailfrom=cb@df7cb.de ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1750778252; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:content-transfer-encoding:in-reply-to: references; bh=eg7c66lOYLoOOpdeONn8hEhuhSNVyko7gtApgQD1UkA=; b=iVISUuKA/Kr6V85i/wUdUI3oD9ERfgOZChX/Q6e4z3EFnqKJR1yclaCx5z5Sw75SvyRNDv 9m2pI+8sEvbS673ydS5FyhYe7atT81VBGoKsyrIcJ5EhUOhV+U9zOzuWSUhXUtNLeQiSeJ pDvzGd6G10j7B5umsuPNJpIndcIA0Xw= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1750778252; a=rsa-sha256; cv=none; b=vwjBigt+6wdyvsqKvki4WxYN+o/elVP4hl65Nsieec9PIJ/Hu/zmPgdky+DKnE7XmMlx/J LThYzp1r67vrFQ06mBrZIiIqnQdO9PifF/jB6CvqVTDnuSI1nPbBuwiJO3HUZXPFapUVUz OR6LWb9IWi/89h/SYjehxdB5fXTQnCA= ARC-Authentication-Results: i=1; imf12.hostedemail.com; dkim=none; spf=pass (imf12.hostedemail.com: domain of cb@df7cb.de designates 80.241.56.171 as permitted sender) smtp.mailfrom=cb@df7cb.de; dmarc=none Received: from smtp102.mailbox.org (smtp102.mailbox.org [10.196.197.102]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-201.mailbox.org (Postfix) with ESMTPS id 4bRT8R69NKz9tjN for ; Tue, 24 Jun 2025 17:17:27 +0200 (CEST) Date: Tue, 24 Jun 2025 17:17:27 +0200 From: Christoph Berg To: linux-mm@kvack.org Subject: [PATCH] Fix do_pages_stat to use compat_uptr_t Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="xtOGQCrwAQllLwSy" Content-Disposition: inline X-Rspamd-Queue-Id: F22D940015 X-Rspam-User: X-Rspamd-Server: rspam06 X-Stat-Signature: yta8tpdjh64ftjozmyp93tu7u86711zy X-HE-Tag: 1750778251-257725 X-HE-Meta: U2FsdGVkX18THYd5vfUxhTlewWwsLbRyXjojeaByIrrFT3Ov/NQUJ00EpdJfoWaObqDx+NruwF2e6a6Ne9f72QuuaBF/l0EqarVBvPSrPG4PdX0n6gaULalES+oIy2Haj+GSZgVU1p+pdSwVixTo51du+dKjcteANJUWHd7ET2UqA886t8oQQs3V6c3Bzq83pz5Kaw22FEk7cPuRbDPge8UE5FwxP1AyrP9c9fYPG0OQc4iJIam0p6hkF5V1JNAROq5KXY6pogMct0oCwvyYD7vijPJfKGnoD4m4nArjQbU/TSk/WhrMf2+1Hq1cnSgD3ZGMX3gh2L8f5jx5aPnQ1mRy3YabcmOHYD2yf+oKqF5PHqLToENFuyOPWl9jMDYOC18BMOxGW2J3J+cnLIbbQPWlcQ5FL8I7q20X4Tv2FGRvqRFImjnLVxkZpgx4suNsIdlWBY4XNmsqrs5++syqx4vDVKmhkkBgecXZljrBWkx1AGHXTzsyviUFLY4JfgKtbPR2zCNHcqyjvdJWRfKTvAfVDCJZfMkmsBC+/LveeXRMksiy3bGa+26w5y8q8nRicZZ3TMRSKYpYyz34HrNGspQKN9uX46zQuylBB9JqjvQEzAKsYMkNmBYNHXV66Uv7K8vHbHOuxnjLxaRexaLzmOWvYocF8ENmtEhKDjFfiBNFjUvD1ou/hRvOsry8PG6gwj+32dObbNPtaV3QF/Jb6i5F9XmOuZHgS9IzHf8kMCqQcvAQKaiOk+eGJiMldzrt5pavtwkESgOd5TRQKgv+i75OItIPRG6lRpuPuCEwxRblt64tEc7xn9uIdDvkqRIbqrgmPugtZDpNS3zVmKhzYQzGCK629zsukMK9iZ4UVR+2dfskzY3gxL0Zkx/5tMcih/5GwplXPm7OeEMlJNw5bIWtBRo7qW7ecX7R9DNwkmFHLmMhvHvxvleym3wtSBNGkrnm0N5kJT3bJ6hueax /R+bBaDE DaWCxUCtqLCLUDv7GE9AeQ2FfqQ6hSK5WXPuF8i214cLYSsj6drQ/VLCW67X8NavXcLl7zfK7KVQ9mS//sCeZqET6zDH/f8Xkv+sINZW0qsDHf/WPStANrhafY/BAiwWGu38BBfOoMcX8Y0wlCwEtY0Ann4LK7VNC9H/y3aKu/Top5QIAGmkJ4aeZHrTnfuxigQeLXl662DHPI7Mozjrk+SDOZp7xRmyfeSpUdMe7xQOPtqVUSt2TDlEZjjI688QRGek9shg3Bj2rIbehPmpl+ZE3uG5alhGFNoY8kjS9KWxJGDGOnwOUb5hRNL25ywtrVsLvw1WEkc7zEXE+lfZQTDUzrjnFvmLw6oYIOayl8n0TBpik8idiu5sE0A== 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: --xtOGQCrwAQllLwSy Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Hi, PostgreSQL 18 will feature NUMA introspection of its shared memory structures. The regression tests for this are failing on Debian's 32-bit architectures which are nowadays all built on 64-bit hosts (i386, armel, armhf, x32). Bertrand Drouvot analyzed the issue to be in do_pages_stat: https://www.postgresql.org/message-id/flat/a3a4fe3d-1a80-4e03-aa8e-150ee15f6c35%40vondra.me#6abe7eaa802b5b07bb70cc3229e63a9f do_pages_stat() is already handling the input arrays correctly in 32-bit mode, but at the end of the "while (nr_pages)" loop, it incorrectly advances the pages pointer with the wrong word size. The attached patch fixes the problem. Christoph --xtOGQCrwAQllLwSy Content-Type: text/x-diff; charset=us-ascii Content-Disposition: attachment; filename="0001-Fix-do_pages_stat-to-use-compat_uptr_t.patch" >From 70225fb0be382c3fd443e8331688b88d0e52c04c Mon Sep 17 00:00:00 2001 From: Christoph Berg Date: Tue, 24 Jun 2025 16:44:27 +0200 Subject: [PATCH] Fix do_pages_stat to use compat_uptr_t For arrays with more than 16 entries, the old code would incorrectly advance the pages pointer by 16 words instead of 16 compat_uptr_t. Signed-off-by: Christoph Berg --- mm/migrate.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/mm/migrate.c b/mm/migrate.c index 8cf0f9c9599..542c81ec3ed 100644 --- a/mm/migrate.c +++ b/mm/migrate.c @@ -2444,7 +2444,13 @@ static int do_pages_stat(struct mm_struct *mm, unsigned long nr_pages, if (copy_to_user(status, chunk_status, chunk_nr * sizeof(*status))) break; - pages += chunk_nr; + if (in_compat_syscall()) { + compat_uptr_t __user *pages32 = (compat_uptr_t __user *)pages; + + pages32 += chunk_nr; + pages = (const void __user * __user *) pages32; + } else + pages += chunk_nr; status += chunk_nr; nr_pages -= chunk_nr; } -- 2.47.2 --xtOGQCrwAQllLwSy--