Message ID | 20240123011238.work.301-kees@kernel.org (mailing list archive) |
---|---|
State | Mainlined |
Commit | 169f9102f9198b04afffa6164372a4ba4070f412 |
Headers | show |
Series | ARM: fault: Implement copy_from_kernel_nofault_allowed() | expand |
On Tue, 23 Jan 2024 at 02:12, Kees Cook <keescook@chromium.org> wrote: > > Under PAN emulation when dumping backtraces from things like the > LKDTM EXEC_USERSPACE test[1], a double fault (which would hang a CPU) > would happen because of dump_instr() attempting to read a userspace > address. Make sure copy_from_kernel_nofault() does not attempt this > any more. > > Reported-by: Mark Brown <broonie@kernel.org> > Link: https://lore.kernel.org/all/202401181125.D48DCB4C@keescook/ [1] > Suggested-by: "Russell King (Oracle)" <linux@armlinux.org.uk> > Cc: Russell King <linux@armlinux.org.uk> > Cc: Ard Biesheuvel <ardb@kernel.org> > Cc: Wang Kefeng <wangkefeng.wang@huawei.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Ben Hutchings <ben@decadent.org.uk> > Cc: linux-arm-kernel@lists.infradead.org > Signed-off-by: Kees Cook <keescook@chromium.org> Reviewed-by: Ard Biesheuvel <ardb@kernel.org> > --- > arch/arm/mm/fault.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c > index e804432e905e..bc5b959b6f90 100644 > --- a/arch/arm/mm/fault.c > +++ b/arch/arm/mm/fault.c > @@ -25,6 +25,13 @@ > > #include "fault.h" > > +bool copy_from_kernel_nofault_allowed(const void *unsafe_src, size_t size) > +{ > + unsigned long addr = (unsigned long)unsafe_src; > + > + return addr >= TASK_SIZE && ULONG_MAX - addr >= size; > +} > + > #ifdef CONFIG_MMU > > /* > -- > 2.34.1 >
On Mon, Jan 22, 2024 at 05:12:38PM -0800, Kees Cook wrote: > Under PAN emulation when dumping backtraces from things like the > LKDTM EXEC_USERSPACE test[1], a double fault (which would hang a CPU) > would happen because of dump_instr() attempting to read a userspace > address. Make sure copy_from_kernel_nofault() does not attempt this > any more. This appears to fix the original issue: https://lava.sirena.org.uk/scheduler/job/497571 (though so did your earlier patch) so: Tested-by: Mark Brown <broonie@kernel.org>
On Mon, Jan 22, 2024 at 05:12:38PM -0800, Kees Cook wrote: > Under PAN emulation when dumping backtraces from things like the > LKDTM EXEC_USERSPACE test[1], a double fault (which would hang a CPU) > would happen because of dump_instr() attempting to read a userspace > address. Make sure copy_from_kernel_nofault() does not attempt this > any more. > > Reported-by: Mark Brown <broonie@kernel.org> > Link: https://lore.kernel.org/all/202401181125.D48DCB4C@keescook/ [1] > Suggested-by: "Russell King (Oracle)" <linux@armlinux.org.uk> > Cc: Russell King <linux@armlinux.org.uk> > Cc: Ard Biesheuvel <ardb@kernel.org> > Cc: Wang Kefeng <wangkefeng.wang@huawei.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > Cc: Ben Hutchings <ben@decadent.org.uk> > Cc: linux-arm-kernel@lists.infradead.org > Signed-off-by: Kees Cook <keescook@chromium.org> Russell, do you mind if I carry in my tree the 3 ARM patches I sent? They're mostly pretty trivial, and they've been in "Incoming"[1] for 2 weeks but haven't shown up in -next yet. I'd really like them to get some soak time, and for them to reach the v6.9 merge window in time. Please let me know what you think. :) Thanks! -Kees [1] https://www.arm.linux.org.uk/developer/patches/section.php?section=0
On Tue, Feb 20, 2024 at 10:39:15PM -0800, Kees Cook wrote: > On Mon, Jan 22, 2024 at 05:12:38PM -0800, Kees Cook wrote: > > Under PAN emulation when dumping backtraces from things like the > > LKDTM EXEC_USERSPACE test[1], a double fault (which would hang a CPU) > > would happen because of dump_instr() attempting to read a userspace > > address. Make sure copy_from_kernel_nofault() does not attempt this > > any more. > > > > Reported-by: Mark Brown <broonie@kernel.org> > > Link: https://lore.kernel.org/all/202401181125.D48DCB4C@keescook/ [1] > > Suggested-by: "Russell King (Oracle)" <linux@armlinux.org.uk> > > Cc: Russell King <linux@armlinux.org.uk> > > Cc: Ard Biesheuvel <ardb@kernel.org> > > Cc: Wang Kefeng <wangkefeng.wang@huawei.com> > > Cc: Andrew Morton <akpm@linux-foundation.org> > > Cc: Ben Hutchings <ben@decadent.org.uk> > > Cc: linux-arm-kernel@lists.infradead.org > > Signed-off-by: Kees Cook <keescook@chromium.org> > > Russell, do you mind if I carry in my tree the 3 ARM patches I sent? > They're mostly pretty trivial, and they've been in "Incoming"[1] for 2 > weeks but haven't shown up in -next yet. I'd really like them to get > some soak time, and for them to reach the v6.9 merge window in time. They can't show up in -next at the moment because the machine that hosts my git tree is being moved between data centres. This was originally flagged as a same-day (Tuesday) move, then next day, then it'll be back online on Saturday. That's the last update that we've had. As I don't believe my GPG key has the necessary signatures on, I don't believe I can get a kernel.org account. I'm not even sure whether my gpg key is even correct for that - and at the moment I just glaze over reading the kernel.org gpg documentation.
On Wed, Feb 21, 2024 at 11:29:38AM +0000, Russell King (Oracle) wrote: > On Tue, Feb 20, 2024 at 10:39:15PM -0800, Kees Cook wrote: > > On Mon, Jan 22, 2024 at 05:12:38PM -0800, Kees Cook wrote: > > > Under PAN emulation when dumping backtraces from things like the > > > LKDTM EXEC_USERSPACE test[1], a double fault (which would hang a CPU) > > > would happen because of dump_instr() attempting to read a userspace > > > address. Make sure copy_from_kernel_nofault() does not attempt this > > > any more. > > > > > > Reported-by: Mark Brown <broonie@kernel.org> > > > Link: https://lore.kernel.org/all/202401181125.D48DCB4C@keescook/ [1] > > > Suggested-by: "Russell King (Oracle)" <linux@armlinux.org.uk> > > > Cc: Russell King <linux@armlinux.org.uk> > > > Cc: Ard Biesheuvel <ardb@kernel.org> > > > Cc: Wang Kefeng <wangkefeng.wang@huawei.com> > > > Cc: Andrew Morton <akpm@linux-foundation.org> > > > Cc: Ben Hutchings <ben@decadent.org.uk> > > > Cc: linux-arm-kernel@lists.infradead.org > > > Signed-off-by: Kees Cook <keescook@chromium.org> > > > > Russell, do you mind if I carry in my tree the 3 ARM patches I sent? > > They're mostly pretty trivial, and they've been in "Incoming"[1] for 2 > > weeks but haven't shown up in -next yet. I'd really like them to get > > some soak time, and for them to reach the v6.9 merge window in time. > > They can't show up in -next at the moment because the machine that hosts > my git tree is being moved between data centres. This was originally > flagged as a same-day (Tuesday) move, then next day, then it'll be back > online on Saturday. That's the last update that we've had. > > As I don't believe my GPG key has the necessary signatures on, I don't > believe I can get a kernel.org account. I'm not even sure whether my > gpg key is even correct for that - and at the moment I just glaze over > reading the kernel.org gpg documentation. I'll also point out that over the last two weeks, the first week I was in Cambridge attending a conference at Arm Ltd, and then I went down with full blown flu shortly there-after.
diff --git a/arch/arm/mm/fault.c b/arch/arm/mm/fault.c index e804432e905e..bc5b959b6f90 100644 --- a/arch/arm/mm/fault.c +++ b/arch/arm/mm/fault.c @@ -25,6 +25,13 @@ #include "fault.h" +bool copy_from_kernel_nofault_allowed(const void *unsafe_src, size_t size) +{ + unsigned long addr = (unsigned long)unsafe_src; + + return addr >= TASK_SIZE && ULONG_MAX - addr >= size; +} + #ifdef CONFIG_MMU /*
Under PAN emulation when dumping backtraces from things like the LKDTM EXEC_USERSPACE test[1], a double fault (which would hang a CPU) would happen because of dump_instr() attempting to read a userspace address. Make sure copy_from_kernel_nofault() does not attempt this any more. Reported-by: Mark Brown <broonie@kernel.org> Link: https://lore.kernel.org/all/202401181125.D48DCB4C@keescook/ [1] Suggested-by: "Russell King (Oracle)" <linux@armlinux.org.uk> Cc: Russell King <linux@armlinux.org.uk> Cc: Ard Biesheuvel <ardb@kernel.org> Cc: Wang Kefeng <wangkefeng.wang@huawei.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Ben Hutchings <ben@decadent.org.uk> Cc: linux-arm-kernel@lists.infradead.org Signed-off-by: Kees Cook <keescook@chromium.org> --- arch/arm/mm/fault.c | 7 +++++++ 1 file changed, 7 insertions(+)