On Thu, Jan 19, 2023 at 12:08 PM Kees Cook <keescook@xxxxxxxxxxxx> wrote: > > > > What do you suggest? > > I frankly don't see other options other than done in this patch, > > though it's not great. > > Happy to be proven otherwise. > > Matthew, do you have any thoughts on dealing with this? Can we use a > counter instead of a spin lock? Have you consider using pagefault_disabled() instead of in_interrupt()? spin_trylock() and if (pagefault_disabled()) out ? or diff --git a/mm/usercopy.c b/mm/usercopy.c index 4c3164beacec..83c164aba6e0 100644 --- a/mm/usercopy.c +++ b/mm/usercopy.c @@ -173,7 +173,7 @@ static inline void check_heap_object(const void *ptr, unsigned long n, return; } - if (is_vmalloc_addr(ptr)) { + if (is_vmalloc_addr(ptr) && !pagefault_disabled()) { struct vmap_area *area = find_vmap_area(addr); effectively gutting that part of check for *_nofault() and *_nmi() ?