]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
mm/util: make memdup_user_nul() similar to memdup_user()
authorTetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Sat, 21 Dec 2024 07:47:29 +0000 (16:47 +0900)
committerAndrew Morton <akpm@linux-foundation.org>
Tue, 31 Dec 2024 01:59:11 +0000 (17:59 -0800)
Since the string data to copy from userspace is likely less than PAGE_SIZE
bytes, replace GFP_KERNEL with GFP_USER like commit 6c2c97a24f09
("memdup_user(): switch to GFP_USER") does and add __GFP_NOWARN like
commit 6c8fcc096be9 ("mm: don't let userspace spam allocations warnings")
does.  Also, use dedicated slab buckets like commit d73778e4b867
("mm/util: Use dedicated slab buckets for memdup_user()") does.

Link: https://lkml.kernel.org/r/014cd694-cc27-4a07-a34a-2ae95d744515@I-love.SAKURA.ne.jp
Reported-by: syzbot+7e12e97b36154c54414b@syzkaller.appspotmail.com
Closes: https://syzkaller.appspot.com/bug?extid=7e12e97b36154c54414b
Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/util.c

index c1c3b06ab4f9432d3c99a303f9044a6b37a2b40a..60aa40f612b872759e3323274cbb6b5923bb863f 100644 (file)
--- a/mm/util.c
+++ b/mm/util.c
@@ -297,12 +297,7 @@ void *memdup_user_nul(const void __user *src, size_t len)
 {
        char *p;
 
-       /*
-        * Always use GFP_KERNEL, since copy_from_user() can sleep and
-        * cause pagefault, which makes it pointless to use GFP_NOFS
-        * or GFP_ATOMIC.
-        */
-       p = kmalloc_track_caller(len + 1, GFP_KERNEL);
+       p = kmem_buckets_alloc_track_caller(user_buckets, len + 1, GFP_USER | __GFP_NOWARN);
        if (!p)
                return ERR_PTR(-ENOMEM);