From: Peter Xu <peterx@redhat.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: syzbot <syzbot+2b9b4f0895be09a6dec3@syzkaller.appspotmail.com>,
linux-kernel@vger.kernel.org, linux-mm@kvack.org,
syzkaller-bugs@googlegroups.com, Edward Liaw <edliaw@google.com>,
Axel Rasmussen <axelrasmussen@google.com>,
Liu Shixin <liushixin2@huawei.com>,
Brian Geffon <bgeffon@google.com>,
Mike Kravetz <mike.kravetz@oracle.com>
Subject: Re: [syzbot] WARNING in change_protection
Date: Fri, 30 Sep 2022 21:03:53 -0400 [thread overview]
Message-ID: <YzeR+R6b4bwBlBHh@x1n> (raw)
In-Reply-To: <20220930164211.b8215770d44e1a3803f1e660@linux-foundation.org>
[-- Attachment #1: Type: text/plain, Size: 5565 bytes --]
On Fri, Sep 30, 2022 at 04:42:11PM -0700, Andrew Morton wrote:
> On Thu, 29 Sep 2022 22:56:38 -0700 syzbot <syzbot+2b9b4f0895be09a6dec3@syzkaller.appspotmail.com> wrote:
>
> > Hello,
>
> Thanks. Let's cc a few userfaultfd people.
I remembered there was a similar report and there might have a patch
already, but I can't find it. The timing is a bit unfortunate..
Anyway, a new patch is attached, and I verified it with the reproducer this
time. Thanks,
>
> > syzbot found the following issue on:
> >
> > HEAD commit: 511cce163b75 Merge tag 'net-6.0-rc8' of git://git.kernel.o..
> > git tree: upstream
> > console+strace: https://syzkaller.appspot.com/x/log.txt?x=135cf5c4880000
> > kernel config: https://syzkaller.appspot.com/x/.config?x=a1992c90769e07
> > dashboard link: https://syzkaller.appspot.com/bug?extid=2b9b4f0895be09a6dec3
> > compiler: gcc (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2
> > syz repro: https://syzkaller.appspot.com/x/repro.syz?x=1164d0ec880000
> > C reproducer: https://syzkaller.appspot.com/x/repro.c?x=15c3c2e0880000
> >
> > IMPORTANT: if you fix the issue, please add the following tag to the commit:
> > Reported-by: syzbot+2b9b4f0895be09a6dec3@syzkaller.appspotmail.com
> >
> > ------------[ cut here ]------------
> > WARNING: CPU: 1 PID: 3612 at include/linux/swapops.h:323 make_pte_marker_entry include/linux/swapops.h:323 [inline]
> > WARNING: CPU: 1 PID: 3612 at include/linux/swapops.h:323 make_pte_marker include/linux/swapops.h:346 [inline]
> > WARNING: CPU: 1 PID: 3612 at include/linux/swapops.h:323 change_pte_range mm/mprotect.c:270 [inline]
> > WARNING: CPU: 1 PID: 3612 at include/linux/swapops.h:323 change_pmd_range mm/mprotect.c:409 [inline]
> > WARNING: CPU: 1 PID: 3612 at include/linux/swapops.h:323 change_pud_range mm/mprotect.c:438 [inline]
> > WARNING: CPU: 1 PID: 3612 at include/linux/swapops.h:323 change_p4d_range mm/mprotect.c:459 [inline]
> > WARNING: CPU: 1 PID: 3612 at include/linux/swapops.h:323 change_protection_range mm/mprotect.c:483 [inline]
> > WARNING: CPU: 1 PID: 3612 at include/linux/swapops.h:323 change_protection+0x16e9/0x4280 mm/mprotect.c:505
> > Modules linked in:
> > CPU: 1 PID: 3612 Comm: syz-executor181 Not tainted 6.0.0-rc7-syzkaller-00130-g511cce163b75 #0
> > Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/22/2022
> > RIP: 0010:make_pte_marker_entry include/linux/swapops.h:323 [inline]
> > RIP: 0010:make_pte_marker include/linux/swapops.h:346 [inline]
> > RIP: 0010:change_pte_range mm/mprotect.c:270 [inline]
> > RIP: 0010:change_pmd_range mm/mprotect.c:409 [inline]
> > RIP: 0010:change_pud_range mm/mprotect.c:438 [inline]
> > RIP: 0010:change_p4d_range mm/mprotect.c:459 [inline]
> > RIP: 0010:change_protection_range mm/mprotect.c:483 [inline]
> > RIP: 0010:change_protection+0x16e9/0x4280 mm/mprotect.c:505
> > Code: ff 48 8b 84 24 90 00 00 00 80 38 00 0f 85 25 29 00 00 48 8b 44 24 10 48 83 b8 90 00 00 00 00 0f 84 8f f9 ff ff e8 a7 d6 c3 ff <0f> 0b 48 ba 00 00 00 00 00 fc ff df 48 8b 04 24 48 c1 e8 03 80 3c
> > RSP: 0018:ffffc90002fbf968 EFLAGS: 00010293
> > RAX: 0000000000000000 RBX: 0000000000000004 RCX: 0000000000000000
> > RDX: ffff888073714180 RSI: ffffffff81b76079 RDI: 0000000000000007
> > RBP: 0000000000000000 R08: 0000000000000007 R09: 0000000000000000
> > R10: 0000000000000004 R11: 0000000000000000 R12: 0000000000000000
> > R13: ffff8880000001e8 R14: 0000000000000000 R15: 000000002063e000
> > FS: 000055555624d300(0000) GS:ffff8880b9b00000(0000) knlGS:0000000000000000
> > CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
> > CR2: 00000000005d84c8 CR3: 000000007c916000 CR4: 00000000003506e0
> > DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
> > DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
> > Call Trace:
> > <TASK>
> > uffd_wp_range+0xf0/0x180 mm/userfaultfd.c:718
> > mwriteprotect_range+0x2ea/0x420 mm/userfaultfd.c:768
> > userfaultfd_writeprotect fs/userfaultfd.c:1827 [inline]
> > userfaultfd_ioctl+0x438/0x43a0 fs/userfaultfd.c:1999
> > vfs_ioctl fs/ioctl.c:51 [inline]
> > __do_sys_ioctl fs/ioctl.c:870 [inline]
> > __se_sys_ioctl fs/ioctl.c:856 [inline]
> > __x64_sys_ioctl+0x193/0x200 fs/ioctl.c:856
> > do_syscall_x64 arch/x86/entry/common.c:50 [inline]
> > do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
> > entry_SYSCALL_64_after_hwframe+0x63/0xcd
> > RIP: 0033:0x7f77d7707bb9
> > Code: 28 c3 e8 2a 14 00 00 66 2e 0f 1f 84 00 00 00 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 c0 ff ff ff f7 d8 64 89 01 48
> > RSP: 002b:00007ffe74be7168 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
> > RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f77d7707bb9
> > RDX: 00000000200000c0 RSI: 00000000c018aa06 RDI: 0000000000000003
> > RBP: 00007f77d76cbd60 R08: 0000000000000000 R09: 0000000000000000
> > R10: 0000000000000000 R11: 0000000000000246 R12: 00007f77d76cbdf0
> > R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000
> > </TASK>
> >
> >
> > ---
> > This report is generated by a bot. It may contain errors.
> > See https://goo.gl/tpsmEJ for more information about syzbot.
> > syzbot engineers can be reached at syzkaller@googlegroups.com.
> >
> > syzbot will keep track of this issue. See:
> > https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
> > syzbot can test patches for this issue, for details see:
> > https://goo.gl/tpsmEJ#testing-patches
>
--
Peter Xu
[-- Attachment #2: 0001-mm-uffd-Fix-warning-without-PTE_MARKER_UFFD_WP-compi.patch --]
[-- Type: text/plain, Size: 3224 bytes --]
From f965f8879301a5cb04b5b1ca91cb8852b9c17237 Mon Sep 17 00:00:00 2001
From: Peter Xu <peterx@redhat.com>
Date: Fri, 30 Sep 2022 20:25:55 -0400
Subject: [PATCH] mm/uffd: Fix warning without PTE_MARKER_UFFD_WP compiled in
Content-type: text/plain
When PTE_MARKER_UFFD_WP not configured, it's still possible to reach pte
marker code and trigger an warning. Add a few CONFIG_PTE_MARKER_UFFD_WP
ifdefs to make sure the code won't be reached when not compiled in.
Reported-by: syzbot+2b9b4f0895be09a6dec3@syzkaller.appspotmail.com
Signed-off-by: Peter Xu <peterx@redhat.com>
---
mm/hugetlb.c | 4 ++++
mm/memory.c | 2 ++
mm/mprotect.c | 2 ++
3 files changed, 8 insertions(+)
diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 0bdfc7e1c933..dd29cba46e9e 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -5059,6 +5059,7 @@ static void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct
* unmapped and its refcount is dropped, so just clear pte here.
*/
if (unlikely(!pte_present(pte))) {
+#ifdef CONFIG_PTE_MARKER_UFFD_WP
/*
* If the pte was wr-protected by uffd-wp in any of the
* swap forms, meanwhile the caller does not want to
@@ -5070,6 +5071,7 @@ static void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct
set_huge_pte_at(mm, address, ptep,
make_pte_marker(PTE_MARKER_UFFD_WP));
else
+#endif
huge_pte_clear(mm, address, ptep, sz);
spin_unlock(ptl);
continue;
@@ -5098,11 +5100,13 @@ static void __unmap_hugepage_range(struct mmu_gather *tlb, struct vm_area_struct
tlb_remove_huge_tlb_entry(h, tlb, ptep, address);
if (huge_pte_dirty(pte))
set_page_dirty(page);
+#ifdef CONFIG_PTE_MARKER_UFFD_WP
/* Leave a uffd-wp pte marker if needed */
if (huge_pte_uffd_wp(pte) &&
!(zap_flags & ZAP_FLAG_DROP_MARKER))
set_huge_pte_at(mm, address, ptep,
make_pte_marker(PTE_MARKER_UFFD_WP));
+#endif
hugetlb_count_sub(pages_per_huge_page(h), mm);
page_remove_rmap(page, vma, true);
diff --git a/mm/memory.c b/mm/memory.c
index a78814413ac0..de0dbe09b013 100644
--- a/mm/memory.c
+++ b/mm/memory.c
@@ -1393,10 +1393,12 @@ zap_install_uffd_wp_if_needed(struct vm_area_struct *vma,
unsigned long addr, pte_t *pte,
struct zap_details *details, pte_t pteval)
{
+#ifdef CONFIG_PTE_MARKER_UFFD_WP
if (zap_drop_file_uffd_wp(details))
return;
pte_install_uffd_wp_if_needed(vma, addr, pte, pteval);
+#endif
}
static unsigned long zap_pte_range(struct mmu_gather *tlb,
diff --git a/mm/mprotect.c b/mm/mprotect.c
index bc6bddd156ca..51e7dbd26b6a 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -260,6 +260,7 @@ static unsigned long change_pte_range(struct mmu_gather *tlb,
} else {
/* It must be an none page, or what else?.. */
WARN_ON_ONCE(!pte_none(oldpte));
+#ifdef CONFIG_PTE_MARKER_UFFD_WP
if (unlikely(uffd_wp && !vma_is_anonymous(vma))) {
/*
* For file-backed mem, we need to be able to
@@ -271,6 +272,7 @@ static unsigned long change_pte_range(struct mmu_gather *tlb,
make_pte_marker(PTE_MARKER_UFFD_WP));
pages++;
}
+#endif
}
} while (pte++, addr += PAGE_SIZE, addr != end);
arch_leave_lazy_mmu_mode();
--
2.37.3
next prev parent reply other threads:[~2022-10-01 1:04 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-30 5:56 [syzbot] WARNING in change_protection syzbot
2022-09-30 23:42 ` Andrew Morton
2022-10-01 1:03 ` Peter Xu [this message]
2022-10-01 1:14 ` Andrew Morton
2022-10-01 1:23 ` Peter Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=YzeR+R6b4bwBlBHh@x1n \
--to=peterx@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=axelrasmussen@google.com \
--cc=bgeffon@google.com \
--cc=edliaw@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=liushixin2@huawei.com \
--cc=mike.kravetz@oracle.com \
--cc=syzbot+2b9b4f0895be09a6dec3@syzkaller.appspotmail.com \
--cc=syzkaller-bugs@googlegroups.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.