lkml.org 
[lkml]   [2021]   [Dec]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH] mm/util.c: Make kvfree() safe for calling while holding spinlocks
    Date
    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.

    Reported-by: Zeal Robot <zealci@zte.com.cn>
    Reported-by: Minghao Chi <chi.minghao@zte.com.cn>
    Link: https://lore.kernel.org/all/20211222081026.484058-1-chi.minghao@zte.com.cn/
    Fixes: fc37a3b8b438 ("[PATCH] ipc sem: use kvmalloc for sem_undo allocation")
    Cc: stable@vger.kernel.org
    Signed-off-by: Manfred Spraul <manfred@colorfullife.com>
    ---
    mm/util.c | 4 ++--
    1 file changed, 2 insertions(+), 2 deletions(-)

    diff --git a/mm/util.c b/mm/util.c
    index 741ba32a43ac..7f9181998835 100644
    --- a/mm/util.c
    +++ b/mm/util.c
    @@ -610,12 +610,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);
    }
    --
    2.33.1
    \
     
     \ /
      Last update: 2021-12-22 20:49    [W:8.035 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site