The patch titled Subject: mm/util.c: make kvfree() safe for calling while holding spinlocks has been added to the -mm tree. Its filename is mm-utilc-make-kvfree-safe-for-calling-while-holding-spinlocks.patch This patch should soon appear at https://ozlabs.org/~akpm/mmots/broken-out/mm-utilc-make-kvfree-safe-for-calling-while-holding-spinlocks.patch and later at https://ozlabs.org/~akpm/mmotm/broken-out/mm-utilc-make-kvfree-safe-for-calling-while-holding-spinlocks.patch Before you just go and hit "reply", please: a) Consider who else should be cc'ed b) Prefer to cc a suitable mailing list as well c) Ideally: find the original patch on the mailing list and do a reply-to-all to that, adding suitable additional cc's *** Remember to use Documentation/process/submit-checklist.rst when testing your code *** The -mm tree is included into linux-next and is updated there every 3-4 working days ------------------------------------------------------ From: Manfred Spraul <manfred@xxxxxxxxxxxxxxxx> Subject: mm/util.c: make kvfree() safe for calling while holding spinlocks One codepath in find_alloc_undo() calls kvfree() while holding a spinlock. Since vfree() can sleep this is a bug. Previously, the code path used kfree(), and kfree() is safe to be called while holding a spinlock. Minghao proposed to fix this by updating find_alloc_undo(). Alternate proposal to fix this: Instead of changing find_alloc_undo(), change kvfree() so that the same rules as for kfree() apply: Having different rules for kfree() and kvfree() just asks for bugs. Disadvantage: Releasing vmalloc'ed memory will be delayed a bit. Link: https://lkml.kernel.org/r/20211222194828.15320-1-manfred@xxxxxxxxxxxxxxxx Link: https://lore.kernel.org/all/20211222081026.484058-1-chi.minghao@xxxxxxxxxx/ Fixes: fc37a3b8b438 ("[PATCH] ipc sem: use kvmalloc for sem_undo allocation") Signed-off-by: Manfred Spraul <manfred@xxxxxxxxxxxxxxxx> Reported-by: Zeal Robot <zealci@xxxxxxxxxx> Reported-by: Minghao Chi <chi.minghao@xxxxxxxxxx> Cc: Vasily Averin <vvs@xxxxxxxxxxxxx> Cc: CGEL ZTE <cgel.zte@xxxxxxxxx> Cc: Shakeel Butt <shakeelb@xxxxxxxxxx> Cc: Randy Dunlap <rdunlap@xxxxxxxxxxxxx> Cc: Davidlohr Bueso <dbueso@xxxxxxx> Cc: Bhaskar Chowdhury <unixbhaskar@xxxxxxxxx> Cc: Arnd Bergmann <arnd@xxxxxxxx> Cc: Uladzislau Rezki <urezki@xxxxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxxxxx> Cc: <1vier1@xxxxxx> Cc: <stable@xxxxxxxxxxxxxxx> Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> --- mm/util.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) --- a/mm/util.c~mm-utilc-make-kvfree-safe-for-calling-while-holding-spinlocks +++ a/mm/util.c @@ -603,12 +603,12 @@ EXPORT_SYMBOL(kvmalloc_node); * It is slightly more efficient to use kfree() or vfree() if you are certain * that you know which one to use. * - * Context: Either preemptible task context or not-NMI interrupt. + * Context: Any context except NMI interrupt. */ void kvfree(const void *addr) { if (is_vmalloc_addr(addr)) - vfree(addr); + vfree_atomic(addr); else kfree(addr); } _ Patches currently in -mm which might be from manfred@xxxxxxxxxxxxxxxx are mm-utilc-make-kvfree-safe-for-calling-while-holding-spinlocks.patch