Dmitry Vyukov
2018-Mar-19 18:18 UTC
get_user_pages returning 0 (was Re: kernel BUG at drivers/vhost/vhost.c:LINE!)
On Mon, Mar 19, 2018 at 4:29 PM, David Sterba <dsterba at suse.cz> wrote:> On Mon, Mar 19, 2018 at 05:09:28PM +0200, Michael S. Tsirkin wrote: >> Hello! >> The following code triggered by syzbot >> >> r = get_user_pages_fast(log, 1, 1, &page); >> if (r < 0) >> return r; >> BUG_ON(r != 1); >> >> Just looking at get_user_pages_fast's documentation this seems >> impossible - it is supposed to only ever return # of pages >> pinned or errno. >> >> However, poking at code, I see at least one path that might cause this: >> >> ret = faultin_page(tsk, vma, start, &foll_flags, >> nonblocking); >> switch (ret) { >> case 0: >> goto retry; >> case -EFAULT: >> case -ENOMEM: >> case -EHWPOISON: >> return i ? i : ret; >> case -EBUSY: >> return i; >> >> which originally comes from: >> >> commit 53a7706d5ed8f1a53ba062b318773160cc476dde >> Author: Michel Lespinasse <walken at google.com> >> Date: Thu Jan 13 15:46:14 2011 -0800 >> >> mlock: do not hold mmap_sem for extended periods of time >> >> __get_user_pages gets a new 'nonblocking' parameter to signal that the >> caller is prepared to re-acquire mmap_sem and retry the operation if >> needed. This is used to split off long operations if they are going to >> block on a disk transfer, or when we detect contention on the mmap_sem. >> >> [akpm at linux-foundation.org: remove ref to rwsem_is_contended()] >> Signed-off-by: Michel Lespinasse <walken at google.com> >> Cc: Hugh Dickins <hughd at google.com> >> Cc: Rik van Riel <riel at redhat.com> >> Cc: Peter Zijlstra <peterz at infradead.org> >> Cc: Nick Piggin <npiggin at kernel.dk> >> Cc: KOSAKI Motohiro <kosaki.motohiro at jp.fujitsu.com> >> Cc: Ingo Molnar <mingo at elte.hu> >> Cc: "H. Peter Anvin" <hpa at zytor.com> >> Cc: Thomas Gleixner <tglx at linutronix.de> >> Cc: David Howells <dhowells at redhat.com> >> Signed-off-by: Andrew Morton <akpm at linux-foundation.org> >> Signed-off-by: Linus Torvalds <torvalds at linux-foundation.org> >> >> I started looking into this, if anyone has any feedback meanwhile, >> that would be appreciated. >> >> In particular I don't really see why would this trigger >> on commit 8f5fd927c3a7576d57248a2d7a0861c3f2795973: >> >> Merge: 8757ae2 093e037 >> Author: Linus Torvalds <torvalds at linux-foundation.org> >> Date: Fri Mar 16 13:37:42 2018 -0700 >> >> Merge tag 'for-4.16-rc5-tag' of git://git.kernel.org/pub/scm/linux/kernel/git/kdave/linux >> >> is btrfs used on these systems? > > There were 3 patches pulled by that tag, none of them is even remotely > related to the reported bug, AFAICS. If there's some impact, it must be > indirect, obvious bugs like NULL pointer would exhibit in a different > way and leave at least some trace in the stacks.That is just a commit on which the bug was hit. It's provided so that developers can make sense out of line numbers and check if the tree includes/not includes a particular commit, etc. It's not that that commit introduced the bug.
Seemingly Similar Threads
- get_user_pages returning 0 (was Re: kernel BUG at drivers/vhost/vhost.c:LINE!)
- Re: [livid-dev] Re: some comments on the ovd proposal
- Unhandled exception error on single account
- default nfsmount options
- WINE fails in directories with Question Marks in name