On Tue, Jul 05, 2022 at 05:42:21PM +0200, Alexander Potapenko wrote: > Kirill, > > > > diff --git a/lib/strnlen_user.c b/lib/strnlen_user.c > > index feeb935a2299..abc096a68f05 100644 > > --- a/lib/strnlen_user.c > > +++ b/lib/strnlen_user.c > > @@ -97,7 +97,7 @@ long strnlen_user(const char __user *str, long count) > > return 0; > > > > max_addr = TASK_SIZE_MAX; > > - src_addr = (unsigned long)untagged_addr(str); > > + src_addr = (unsigned long)untagged_addr(current->mm, str); > > In a downstream kernel with LAM disabled I'm seeing current->mm being > NULL at this point, because strnlen_user() is being called by > kdevtmpfs. > IIUC current->mm is only guaranteed to be non-NULL in the userspace > process context, whereas untagged_addr() may get called in random > places. > > Am I missing something? Hm. Could you show a traceback? As strnlen_user() intended to be used on an user string I expected it to be called from a process context. I guess I'm wrong, but I don't yet understand why. -- Kirill A. Shutemov