On Fri, Nov 02, 2018 at 10:15:56AM -0700, Linus Torvalds wrote: > On Fri, Nov 2, 2018 at 10:10 AM Linus Torvalds > <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > > > Don't you take over the VM with "use_mm()" when you do the copies? So > > yes, it's a kernel thread, but it has a user VM, and though that > > should have the user limits. > > Oooh. *Just* as I sent this, I realized that "use_mm()" doesn't update > the thread addr_limit. > > That actually looks like a bug to me - although one that you've > apparently been aware of and worked around. > > Wouldn't it be nicer to just make "use_mm()" do > > set_fs(USER_DS); > > instead? And undo it on unuse_mm()? > > And, in fact, maybe we should default kernel threads to have a zero > address limit, so that they can't do any user accesses at all without > doing this? Try it and watch it fail to set initramfs up, let alone exec the init... > Adding Al to the cc, because I think he's been looking at set_fs() in general. It would be the right thing (with return to KERNEL_DS), but I'm not certain if GPU users will survive - these two drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h:157: use_mm(mmptr); \ drivers/gpu/drm/i915/gvt/kvmgt.c:1799: use_mm(kvm->mm); I don't understand the call chains there (especially for the first one) well enough to tell.