Messages in this thread | | | Date | Thu, 7 Jul 2022 02:13:49 +0300 | From | "Kirill A. Shutemov" <> | Subject | Re: [PATCHv4 3/8] mm: Pass down mm_struct to untagged_addr() |
| |
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
| |