From patchwork Mon Feb 10 19:37:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: David Hildenbrand X-Patchwork-Id: 13968581 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 A9109C021A1 for ; Mon, 10 Feb 2025 19:38:17 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 2C93B280003; Mon, 10 Feb 2025 14:38:17 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 27947280001; Mon, 10 Feb 2025 14:38:17 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0CBC4280003; Mon, 10 Feb 2025 14:38:17 -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 E26E0280001 for ; Mon, 10 Feb 2025 14:38:16 -0500 (EST) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 77DAEC0537 for ; Mon, 10 Feb 2025 19:38:16 +0000 (UTC) X-FDA: 83105046192.03.725AD0E Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf23.hostedemail.com (Postfix) with ESMTP id 41906140007 for ; Mon, 10 Feb 2025 19:38:14 +0000 (UTC) Authentication-Results: imf23.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=W859LszW; spf=pass (imf23.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739216294; 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=h7zrLQOHNY2WMB4NJ6M+YTGeviHiiyTUNMzrBj8byNk=; b=VaWZsoXZaKlcNamz7FQXJpC/yWkVRiVToMxzUiyxMmakABUbWr7KqI9pWspg9NVcEGn0m4 QbAO5v0mabQfqe3d//tiuBn0+pH1R6DZTdGGKrzB0k0P4GMlAKM+5rdfoEnH7ayLMRyYM/ i1GEf3wu6xzheP4gOurWvRXj0alpMtc= ARC-Authentication-Results: i=1; imf23.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=W859LszW; spf=pass (imf23.hostedemail.com: domain of dhildenb@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=dhildenb@redhat.com; dmarc=pass (policy=none) header.from=redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1739216294; a=rsa-sha256; cv=none; b=Zt0b9Q+Qi5rJdcXbHGWMCUHW+tbelL++1PbWWlgJDBjTdSIwZQVeU38vZJk+PMpyaom3FN 27ISpiWlLrACT5DIU9h61oEl2ERFlkd15LBdzAaAwSBu4joMtKzYUFBLIrOg5IjPvYGGWX S+uzF5/vt1IgRqJG9GEhaaW/70wg/Sk= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1739216293; 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=h7zrLQOHNY2WMB4NJ6M+YTGeviHiiyTUNMzrBj8byNk=; b=W859LszW+34Ru2XgecNoxyt7JxZTOnDIylQHB4Tg5iRRKyo3KYCVRfiSzby8is3KUBx+WW k7525ISmS1iisnzJdUvI/UP7OZt2WIuo0pqOj7v2LfZuwaZyQBea0KP2wmVm67B4RMuY6P zVjouBohtThUVgJZ0e2Fy0JJx949sJ4= Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-687-mZ6Awaw0ONmPZRO-oUz8Eg-1; Mon, 10 Feb 2025 14:38:10 -0500 X-MC-Unique: mZ6Awaw0ONmPZRO-oUz8Eg-1 X-Mimecast-MFC-AGG-ID: mZ6Awaw0ONmPZRO-oUz8Eg Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-43943bd1409so9692845e9.3 for ; Mon, 10 Feb 2025 11:38:10 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1739216289; x=1739821089; 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=h7zrLQOHNY2WMB4NJ6M+YTGeviHiiyTUNMzrBj8byNk=; b=WTYGeDt4P9vjqA9vDAhvvMnPY/GQNPEZ3rRDXfiH99xcJfoXmTozE7d+K5lN0csVvw Nv6bVshaGM2cWCyBpYsqhTrn7lBRnFlurFCVUBT0t2t9YWKnkuaI/69BSBez+TBI68dR pwKmOwMRfIzo1HNsMbj9BPclHEjjhyhaCQ2aHFw4FM7jSyw3oqw+mDvBubpeIcxMMNDB tElHgGM73Ux8CMkokcRbHO9VIFa+8Z/nVyk8ocjmpK1wtFmFXkOdAY5BFhrPc3k+2K8i KPS4qsJ+5iT/T3TlFpLShQFKhBn3VaCyO20F5RAri24ZJQUC6TVG2cpFCQY3ePyq6gS3 JqcQ== X-Forwarded-Encrypted: i=1; AJvYcCVkXnUogRFpgOgJ8NcB7afUDGI+MKJY372d9zcX6t6fz1P0w6v1J5qi5+fsXUcgM2oW94riJX7dOg==@kvack.org X-Gm-Message-State: AOJu0Ywjw0LdfsLFCdP1g11cSJJ9jf9vvwU6PX46UBUkcu/ygM12V4qC nyY14lwB36uvr9uynF7eQuvYOUyGElqWK6cbA1VDGDUijOvC0WblvpKjZPgqA0XyhQijvLSnsJA pIfiFSXfwrl0yQiIl4OP7eD+yQSWutrSdWeWUreDiG1v1Q4nT X-Gm-Gg: ASbGncsp15cJxNrKNgWEPx7yKhrVjUD935haJIb8XNZnTK6Ajs8gLB2ZWC7ac0joZOC B+qvqdEBvhXIr4Ow2wa/9uteiIRq8/UD7FRdAhVuZDeGbETLx6Lgz4zTM/d0+5CbdoWEdUjD3Jw zQK7XcP91HZ3T2LGyer21hoMd9VAcXeojVwuHA71wtLZaK/K2eywyn+e2Jluj6gfllEWAXNEsYJ zeqT3dqO9IgvBOESmQ3r8kKCZW/acSAI/K0WsOdblfcoE99NP0yOo0jIS1KcHd4ScmMQ4FRsMy2 nA4hVdIvlilRBQsBQx8/QCiuJJmd2vn00kl8Lr9YqdFP+Zgln4mqAEObq61AS+7BdQ== X-Received: by 2002:a05:600c:3482:b0:439:42c6:f108 with SMTP id 5b1f17b1804b1-43942c6f621mr54495905e9.6.1739216289156; Mon, 10 Feb 2025 11:38:09 -0800 (PST) X-Google-Smtp-Source: AGHT+IGBNHtYM4Npt0edDE/HafeE1RKAAghby0XrE6w/BdutPKy4T8is0nT67O6E9ZhRDeehOSIMcA== X-Received: by 2002:a05:600c:3482:b0:439:42c6:f108 with SMTP id 5b1f17b1804b1-43942c6f621mr54495475e9.6.1739216288775; Mon, 10 Feb 2025 11:38:08 -0800 (PST) Received: from localhost (p200300cbc734b80012c465cd348aaee6.dip0.t-ipconnect.de. [2003:cb:c734:b800:12c4:65cd:348a:aee6]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-439452533ecsm23523535e9.0.2025.02.10.11.38.06 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 10 Feb 2025 11:38:07 -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, linux-trace-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, damon@lists.linux.dev, David Hildenbrand , Andrew Morton , =?utf-8?b?SsOpcsO0bWUgR2xpc3Nl?= , Jonathan Corbet , Alex Shi , Yanteng Si , Karol Herbst , Lyude Paul , Danilo Krummrich , David Airlie , Simona Vetter , Masami Hiramatsu , Oleg Nesterov , Peter Zijlstra , SeongJae Park , "Liam R. Howlett" , Lorenzo Stoakes , Vlastimil Babka , Jann Horn , Pasha Tatashin , Peter Xu , Alistair Popple , Jason Gunthorpe , John Hubbard , stable@vger.kernel.org Subject: [PATCH v2 01/17] mm/gup: reject FOLL_SPLIT_PMD with hugetlb VMAs Date: Mon, 10 Feb 2025 20:37:43 +0100 Message-ID: <20250210193801.781278-2-david@redhat.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250210193801.781278-1-david@redhat.com> References: <20250210193801.781278-1-david@redhat.com> MIME-Version: 1.0 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: 1k9KqKSNz77jKob1q0cx_CFPZetIfN7e-a4gn-n3Ay0_1739216289 X-Mimecast-Originator: redhat.com content-type: text/plain; charset="US-ASCII"; x-default=true X-Rspam-User: X-Stat-Signature: kduzqzabrix5pbxab6hs5hquy647rudr X-Rspamd-Server: rspam05 X-Rspamd-Queue-Id: 41906140007 X-HE-Tag: 1739216294-547764 X-HE-Meta: U2FsdGVkX19Hz7kYloDo2nmzi5KCIP9FplCZl7yt8CNqxHHIKTQYiuO2FmR/ttvazIadWzvpjLnxt3VRUDhDC4QNeLoyeFc8kjKSkQFt/xVZ1qfDyFKWHiIN3RbUu1PUAKvaB8c/atNX9howBq61fJjQwQfBhpoG4w0I3ZNwRA8XmzC/KHJkl1RS9/KANcD9tpsBAt6Xfc2sJ+0ksNPFDO6UHMWcTMyLraWIHvZIo2HV0lmt5IQu4+qfyxavVJ5I0JlU5c0+Q60oN0PJqfgPzHa7o9W0e6lRp/YO+OzJFB2thzDeiWUYJD0fZW+pf3I5afyX4g0hwD+mnoIQtwe8y6a/I+Y4W30RxVfnYGdDtaleZC9XslLnUwWgwgxaXajCM66e6+9uAIa0GycNoVzdVVgmt6o9zRL5yWi+0Q9opuujqWbG4IUPHfpHCRI3qP+Tpz5LdtDt+ojGRZcNWxPjCCeXarSHdqwC2u4E92yJexSDsSo/mrGEQImRonZcAE69gKAZt9NxC+RSSmwkO8aKp1xaHJpl3G3KAG597hZxA6LlWlHto/p6ng37o2N/EBapPhFznApZOK4PENtGPGQij9PhZ207de+tsQ+dwBZQnSmT/frbDP97PZSkAHuSAGCRrm0V2wClRLuTJ8ATwq5NYmcE7cbLyVpMXnCOYZYzUfBMXzLV6VYZnC8I87v+COKHedzbx+TRSJi/9OX2CysFWLVhsR5VfoZzQD0WR/6YdpZnEHeXYkSHTuDfxYizh2YzzybrjT7ADcTSlkWdpSOIAVVAsO0VDTXX5siznINEtkzJJN8DaaWFfsUtxu9TTd4VGG2pRf4NA8FDot/yc5V+k2U1mWgFolpNJwnqqJaYSV0eeMyB4SN9rxHT+TQYebjCw63G4rP7xZdpZvjDigLpsft94PuiD+/ng0R2ER14fiNVzZkIVq+MlYTSE7L153BdT9zssLB+c/fSW2toYWE lFnt4Ac6 6gEmk1Pabq3VmR/8+hPdTtDDrP2ORv+F4n4zhhLcXYqAB656uG4JIccDLA3s2OX0DLU29lqDGY5xs9eE8jyeQWAMA2I8arMMWCwqb1eWxQfBbWyvIw74FyOJBihJuCakQGg50/f4JX1YVqTNUpE0nyqnwbMbHuVTIdzQuMYAXkGS8UwJ738UWB0UxfatRZxF2NW/O3cOEDXQWD+Wz1Yg83a5mLkMuqShNrMXUfFWJ/nlk3e5NcM+lsBLmDiYWTru/SIHDx3XqEbiiBmF6pWbJOJ62IwPwWaiFqs2WWKQ+LIffmUWx/srHwhcnEI8skrMukrOEwOGo5pZossHTDs23PWpGMR8/VjshBwFrD5YM8CfoHyd+e3BjuWori35vnVRZTxviG6om8J0c/av1BcwY8jfElQPS68H6MsLW+qkkmXciaiekD6+KQDY79e8eFuaUmKqGnfwIHC/c+KNSuEIqs2JTbk7+tNr9bfzmrsBKwvgf2YjlKHB6g7akLP2r4n6TWORi2aPXjixQQ7VdzHoZkNb8kvHO7LrdwBRursyv56XDK+p9GQyp9dzHCln2NmdH1GPU+OlEbsplO1E= 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") Reviewed-by: John Hubbard Reviewed-by: Alistair Popple 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 3883b307780ea..61e751baf862c 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;