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 A8285C02195 for ; Wed, 29 Jan 2025 11:54:24 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 23E90280007; Wed, 29 Jan 2025 06:54:23 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 1EEB0280011; Wed, 29 Jan 2025 06:54:23 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 067E2280007; Wed, 29 Jan 2025 06:54:22 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id D22DB280011 for ; Wed, 29 Jan 2025 06:54:22 -0500 (EST) Received: from smtpin29.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 6F8DFC0C4C for ; Wed, 29 Jan 2025 11:54:22 +0000 (UTC) X-FDA: 83060331564.29.353AC7E Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf03.hostedemail.com (Postfix) with ESMTP id 3611720007 for ; Wed, 29 Jan 2025 11:54:19 +0000 (UTC) Authentication-Results: imf03.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=QRxQBC4G; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf03.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1738151660; a=rsa-sha256; cv=none; b=2h5EzPVPiQQA+f1Ezt/4XsNdzVyKeoj7FXIGOjkEPEv4ZeEgAesx+ZJS1WV2h9ko+ghrgj pG4+wH1EQaH8QDzBpbBmQX+hIDtbupV/9dDDhA2AynaCGAnJWXZ4Ph6Iqdy6tHO97/Eygt P3a0S9o2Fi+p/ZXcox/g57KPrUYHES0= ARC-Authentication-Results: i=1; imf03.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=QRxQBC4G; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf03.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1738151660; 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=hZQr+sWP4JJuuRk9zHd8B8Ps+AYS2S2IVxxQCmOGAGE=; b=8EM3LZMbNGhzt5XrWK8dIm4YsoGB/frt/Yq+hAO9/YU8mW9JGDtIBuOBM+IF3PPEdkOVXk GkvUFkwGqK9AkyKVuuw5pOLN4wx7Ng4Pqyksb0wJgHzo+wrjUsijlN1fC7ujNXSxwXmR+b yuvkB1LtY6HKANnrDknF3ZEjC2dOg6A= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1738151659; h=from:from: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; bh=hZQr+sWP4JJuuRk9zHd8B8Ps+AYS2S2IVxxQCmOGAGE=; b=QRxQBC4Gvv3LeLJDN6XffFnhQq2gUXBzy10P6j5xBouUcKzkpq76oeXt5JEQO6iK7fgO4K 9oxmmUp2pOojiSw7uDlqOQ8JD6Mw2dNvl4FFcF8g7eTnEubx71Q0ebOGtFYOg88N3iFV5C r7QkZD01Sm/gocvkvaONHW5ujvzIc9A= Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-103-xW0QirazOAapg1lfP6WyYw-1; Wed, 29 Jan 2025 06:54:18 -0500 X-MC-Unique: xW0QirazOAapg1lfP6WyYw-1 X-Mimecast-MFC-AGG-ID: xW0QirazOAapg1lfP6WyYw Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-4361ecebc5bso34369965e9.1 for ; Wed, 29 Jan 2025 03:54:18 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1738151657; x=1738756457; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hZQr+sWP4JJuuRk9zHd8B8Ps+AYS2S2IVxxQCmOGAGE=; b=az1MKrPLppf0Xcnut94rFbBpi0Rh1h3d2VDc35ug0A9ywd+427aKyuQ3OV31gq1SDL ijAcOpab3ZwkaD3J/XjIbWAgq6C9l6HfRbl4rSzMgGcmPZ8416oMUNb6LTN8MDVhp5GZ zBqYvKViQkhoVGHvR6664nsoH4v21BobycvJnUlevOC42CoDaKscYqoLb5yMN3fBOj6m IaPnyAbwqC2A8Cbs1aE5f9XROoJTou2J+kOCl5mRexWmGWri7wUyNt7UM3ubNVvgOtgz 2aK+A4dbAhIKWcKngZoO1P/pAUJFhKoLkUkKptU6aHvSuk6vBy/3w1a0lRXDgi+vjH5k cunA== X-Forwarded-Encrypted: i=1; AJvYcCUYCcur2mZ1Chxnf01GW7Xq76AHOK9ZFt4VRxgIBzBj9+6/e5yJEv+3bUtaIUOQPReOpQCG26rOVA==@kvack.org X-Gm-Message-State: AOJu0Yxw38uBS/iqDuPLwYpXxUqRCd6wsOCrpd4/JtwYKyJ22DUPoFwf nwFJ1BQM+jJjnsMtX+U+5QgnXkf7M1CCoFi1lwYmlSvxpHD2Y9xxqKNBXVq5e3ECV7XrNLqeWn/ Jgn5NNyGP8xaSZ7n++E4VL7y8oLQO9oKjiEH2sdRqLKcB+gGH X-Gm-Gg: ASbGncvZbzWsmy60gK5P7t3qm+PlAmLwyhlo5F5m96QSonyMuJsfNGGoQBGN22kzWB4 kOxYMsP8mxl3DVzVc42PkQInoDQNYX3l4X1GFFhqJ5EESBzq13D5tNCpoOtUqDMbwgGta8nWDma Hnw0NjJv9dyhwQCNjfoPBJQAmSZbG3jUUSl0QflYe6u8xXLCxJTAi4R7aSccf60sCCBcxx1x4JD blGp9YAa+SnLM5LM4YQosbVsM+JgHkQHau0kFl62Su6iAfyYaARrtjIDnlK/+HPAU4CX16k6auu zMwKXBhUpsHs5DHGacaEWHV+lXofQFScHSRdLDl+/4vSVuw9n7gI3fxM3ptMkwAzTg== X-Received: by 2002:a05:600c:cce:b0:434:ff9d:a370 with SMTP id 5b1f17b1804b1-438dc3366f8mr24658505e9.0.1738151657110; Wed, 29 Jan 2025 03:54:17 -0800 (PST) X-Google-Smtp-Source: AGHT+IEIkSHUg8u1CZ6d8yOIa8EuB96MLk/b/TKJcDJCOFvAxggFPdf4ivg/UC1RFEcPGInF41YvMw== X-Received: by 2002:a05:600c:cce:b0:434:ff9d:a370 with SMTP id 5b1f17b1804b1-438dc3366f8mr24658175e9.0.1738151656750; Wed, 29 Jan 2025 03:54:16 -0800 (PST) Received: from localhost (p200300cbc7053b0064b867195794bf13.dip0.t-ipconnect.de. [2003:cb:c705:3b00:64b8:6719:5794:bf13]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-38c2a1bad92sm16868229f8f.61.2025.01.29.03.54.14 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 29 Jan 2025 03:54:15 -0800 (PST) From: David Hildenbrand To: linux-kernel@vger.kernel.org Cc: linux-doc@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-mm@kvack.org, nouveau@lists.freedesktop.org, David Hildenbrand , Andrew Morton , =?UTF-8?q?J=C3=A9r=C3=B4me=20Glisse?= , Jonathan Corbet , Alex Shi , Yanteng Si , Karol Herbst , Lyude Paul , Danilo Krummrich , David Airlie , Simona Vetter , "Liam R. Howlett" , Lorenzo Stoakes , Vlastimil Babka , Jann Horn , Pasha Tatashin , Peter Xu , Alistair Popple , Jason Gunthorpe , stable@vger.kernel.org Subject: [PATCH v1 01/12] mm/gup: reject FOLL_SPLIT_PMD with hugetlb VMAs Date: Wed, 29 Jan 2025 12:53:59 +0100 Message-ID: <20250129115411.2077152-2-david@redhat.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250129115411.2077152-1-david@redhat.com> References: <20250129115411.2077152-1-david@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: oqYT4wQ4eMfuEo6lbuQQ0cv6l6ICndDOc5uaC9bE7sM_1738151657 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: 8bit content-type: text/plain; charset="US-ASCII"; x-default=true X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 3611720007 X-Stat-Signature: h1jbghz55rxi37m3o5d38d79m68t3tak X-Rspam-User: X-HE-Tag: 1738151659-473004 X-HE-Meta: U2FsdGVkX19VtHTsMnkStaPjQ+1ndqyy9OPZnoJX6fRNtwWz8XZqmnV+MFHxBr/sdeP/THGnyoaMm1cS/WEiMo/j5S4QKI4vNf3Up5kowy7wlBkny1FVVrEo6s/qJAU1hjNg3v8mlE4OHdVuSDlEMMjWeCI/Y/fu8xJe2HyASP2Wg7Z0AaKZa2glsP1Pr3ZcE1b2vix6f+XlhJ4BTLHTo3+B13/46QJeOebgwbn+Q4tQMBIOq1E0aViW5w4UdhoFz6ztvL+Rf1wgMaqDFn3KQOP5lSycMAjDj7BDSOH6zeZVP3x9zP0nlL87GxiV/kMLP56saWg/9zCKJ3p2Iz9W2POHjFY9aZ92iZ5xrMn5RBSb9kprJgh0jPkAPA4P+KqTKQNr3zbBkTBawguY0nRfL/Qu9uhixWWUY0WENws+LyBuuT1nyGr+nEIvv/EKicGIVHeTJzmnmpkVg3QK1o6RWxA+dUgHyYhiu5QLHtadnq9zk2vLYY2w5iFLudLHGcHl/BoYatvEvbSWdSKb/IDE74Kj0EcTexNSMAclkKyxKjiiVsUVFlUHmD+EmN7Rw5EVC6UrW8N7eiDhfahRe9JL2y5H5EDMd67kw7/lkuzOvV4FGE2O1Wm/hZY01VZaFC+Vgsvj/vFbqAProjNjDZx8Ikkt01GuC2EAl8to54C2c5h9oh28tFPYAAA8Q0BDeZpUK75gFzGgNGAg9wpJpJMx5LrdTTGWi8gHfOgcEgRjJfyUg4WUgs9VSHA7NAUCmOVkdTHSHcTDV02P5LC6qgz4vr4JrcvuTfSR/Ed42WYAG2LT4L/PUbJMyqQzHOL+MB1RfZ2HjQA+BA626L7dqEfJT569h9U+o4atR9dSoKpdFDE0tBQ6RZuD+KicIMmjWtkGwQvvvs/501OOgHd4xDDyNML4vMUuV1yWUmR7s5KoXAesvyOjx+2F+FUdPJBJFLPRpc1sTaQgIpPw5DjNpWs 3wRleS2P PqQCel1eUzie8tOH0osnEDnKMyKsg3apR5E6dDi0dXpzi1SqN+UQXne4Q/65QvZPvbCBg5so2l3rIGNcQsWewYN/qCXsTr6ay2CXLyc5Rm9wjT2HLNqIpob4dTY+HlqgGI/5ubcl1MypRbJQOR5hvG0aGHB81vZGJC/v2rW8cUU8mHXtLZWiN3EWIalXrrmnoTqj5iA0N6RCKpxzimRG4L349i5e9DHNOPThFHXkTejkUodmsojnkHsogNzSXB7wny1eavyV3n/ebi7FyZ7995boKvI9oEuyPynnMpeDyTFH/Fe2GDesfsWgZIkfeCwTYl4hTHTZogUOCdhfjKmElCEB7fvIFjLjhvLKngY2wWRNRMtFpTtvR5c12DDa9eKEPr0YlFwBhIzzO276bG5Pk9PhDN+GizD0T/gSMmc9oRTG+Q4akmv5uMfIHIcOP/6i0LWWDzIuCYGJ825nWnx/gjPIKXojPhPYdStetCIyX53E/vczwU3RBIg8un0+MyTuCAojsyrS+twx6RQlISd9ysEBfvj0PJUqC0rxxzoswVj82k9c= 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: We only have two FOLL_SPLIT_PMD users. While uprobe refuses hugetlb early, make_device_exclusive_range() can end up getting called on hugetlb VMAs. Right now, this means that with a PMD-sized hugetlb page, we can end up calling split_huge_pmd(), because pmd_trans_huge() also succeeds with hugetlb PMDs. For example, using a modified hmm-test selftest one can trigger: [ 207.017134][T14945] ------------[ cut here ]------------ [ 207.018614][T14945] kernel BUG at mm/page_table_check.c:87! [ 207.019716][T14945] Oops: invalid opcode: 0000 [#1] PREEMPT SMP KASAN NOPTI [ 207.021072][T14945] CPU: 3 UID: 0 PID: ... [ 207.023036][T14945] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.3-2.fc40 04/01/2014 [ 207.024834][T14945] RIP: 0010:page_table_check_clear.part.0+0x488/0x510 [ 207.026128][T14945] Code: ... [ 207.029965][T14945] RSP: 0018:ffffc9000cb8f348 EFLAGS: 00010293 [ 207.031139][T14945] RAX: 0000000000000000 RBX: 00000000ffffffff RCX: ffffffff8249a0cd [ 207.032649][T14945] RDX: ffff88811e883c80 RSI: ffffffff8249a357 RDI: ffff88811e883c80 [ 207.034183][T14945] RBP: ffff888105c0a050 R08: 0000000000000005 R09: 0000000000000000 [ 207.035688][T14945] R10: 00000000ffffffff R11: 0000000000000003 R12: 0000000000000001 [ 207.037203][T14945] R13: 0000000000000200 R14: 0000000000000001 R15: dffffc0000000000 [ 207.038711][T14945] FS: 00007f2783275740(0000) GS:ffff8881f4980000(0000) knlGS:0000000000000000 [ 207.040407][T14945] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 207.041660][T14945] CR2: 00007f2782c00000 CR3: 0000000132356000 CR4: 0000000000750ef0 [ 207.043196][T14945] PKRU: 55555554 [ 207.043880][T14945] Call Trace: [ 207.044506][T14945] [ 207.045086][T14945] ? __die+0x51/0x92 [ 207.045864][T14945] ? die+0x29/0x50 [ 207.046596][T14945] ? do_trap+0x250/0x320 [ 207.047430][T14945] ? do_error_trap+0xe7/0x220 [ 207.048346][T14945] ? page_table_check_clear.part.0+0x488/0x510 [ 207.049535][T14945] ? handle_invalid_op+0x34/0x40 [ 207.050494][T14945] ? page_table_check_clear.part.0+0x488/0x510 [ 207.051681][T14945] ? exc_invalid_op+0x2e/0x50 [ 207.052589][T14945] ? asm_exc_invalid_op+0x1a/0x20 [ 207.053596][T14945] ? page_table_check_clear.part.0+0x1fd/0x510 [ 207.054790][T14945] ? page_table_check_clear.part.0+0x487/0x510 [ 207.055993][T14945] ? page_table_check_clear.part.0+0x488/0x510 [ 207.057195][T14945] ? page_table_check_clear.part.0+0x487/0x510 [ 207.058384][T14945] __page_table_check_pmd_clear+0x34b/0x5a0 [ 207.059524][T14945] ? __pfx___page_table_check_pmd_clear+0x10/0x10 [ 207.060775][T14945] ? __pfx___mutex_unlock_slowpath+0x10/0x10 [ 207.061940][T14945] ? __pfx___lock_acquire+0x10/0x10 [ 207.062967][T14945] pmdp_huge_clear_flush+0x279/0x360 [ 207.064024][T14945] split_huge_pmd_locked+0x82b/0x3750 ... Before commit 9cb28da54643 ("mm/gup: handle hugetlb in the generic follow_page_mask code"), we would have ignored the flag; instead, let's simply refuse the combination completely in check_vma_flags(): the caller is likely not prepared to handle any hugetlb folios. We'll teach make_device_exclusive_range() separately to ignore any hugetlb folios as a future-proof safety net. Fixes: 9cb28da54643 ("mm/gup: handle hugetlb in the generic follow_page_mask code") Cc: Signed-off-by: David Hildenbrand --- mm/gup.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/mm/gup.c b/mm/gup.c index 3883b307780e..61e751baf862 100644 --- a/mm/gup.c +++ b/mm/gup.c @@ -1283,6 +1283,9 @@ static int check_vma_flags(struct vm_area_struct *vma, unsigned long gup_flags) if ((gup_flags & FOLL_LONGTERM) && vma_is_fsdax(vma)) return -EOPNOTSUPP; + if ((gup_flags & FOLL_SPLIT_PMD) && is_vm_hugetlb_page(vma)) + return -EOPNOTSUPP; + if (vma_is_secretmem(vma)) return -EFAULT; -- 2.48.1