linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] watch_queue: Free the page array when watch_queue is dismantled
@ 2022-03-22  0:46 Eric Dumazet
  2022-03-26 18:39 ` Eric Dumazet
  2022-03-28 10:34 ` David Howells
  0 siblings, 2 replies; 5+ messages in thread
From: Eric Dumazet @ 2022-03-22  0:46 UTC (permalink / raw)
  To: David Howells; +Cc: linux-kernel, Eric Dumazet, Eric Dumazet, syzbot, Jann Horn

From: Eric Dumazet <edumazet@google.com>

Commit 7ea1a0124b6d ("watch_queue: Free the alloc bitmap
when the watch_queue is torn down") took care of the bitmap,
but not the page array.

BUG: memory leak
unreferenced object 0xffff88810d9bc140 (size 32):
  comm "syz-executor335", pid 3603, jiffies 4294946994 (age 12.840s)
  hex dump (first 32 bytes):
    40 a7 40 04 00 ea ff ff 00 00 00 00 00 00 00 00  @.@.............
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [<ffffffff81459bff>] kmalloc_array include/linux/slab.h:621 [inline]
    [<ffffffff81459bff>] kcalloc include/linux/slab.h:652 [inline]
    [<ffffffff81459bff>] watch_queue_set_size+0x12f/0x2e0 kernel/watch_queue.c:251
    [<ffffffff8159fcf2>] pipe_ioctl+0x82/0x140 fs/pipe.c:632
    [<ffffffff815b601c>] vfs_ioctl fs/ioctl.c:51 [inline]
    [<ffffffff815b601c>] __do_sys_ioctl fs/ioctl.c:874 [inline]
    [<ffffffff815b601c>] __se_sys_ioctl fs/ioctl.c:860 [inline]
    [<ffffffff815b601c>] __x64_sys_ioctl+0xfc/0x140 fs/ioctl.c:860
    [<ffffffff84493a05>] do_syscall_x64 arch/x86/entry/common.c:50 [inline]
    [<ffffffff84493a05>] do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
    [<ffffffff84600068>] entry_SYSCALL_64_after_hwframe+0x44/0xae

Reported-by: syzbot <syzkaller@googlegroups.com>
Fixes: c73be61cede5 ("pipe: Add general notification queue support")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: David Howells <dhowells@redhat.com>
Cc: Jann Horn <jannh@google.com>
---
 kernel/watch_queue.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/kernel/watch_queue.c b/kernel/watch_queue.c
index 00703444a21948deaa8b7ac8b57b73528badff0d..58fe68664eb1b0001cb00c8d046e108462df4836 100644
--- a/kernel/watch_queue.c
+++ b/kernel/watch_queue.c
@@ -370,6 +370,7 @@ static void __put_watch_queue(struct kref *kref)
 
 	for (i = 0; i < wqueue->nr_pages; i++)
 		__free_page(wqueue->notes[i]);
+	kfree(wqueue->notes);
 	bitmap_free(wqueue->notes_bitmap);
 
 	wfilter = rcu_access_pointer(wqueue->filter);
-- 
2.35.1.894.gb6a874cedc-goog


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] watch_queue: Free the page array when watch_queue is dismantled
  2022-03-22  0:46 [PATCH] watch_queue: Free the page array when watch_queue is dismantled Eric Dumazet
@ 2022-03-26 18:39 ` Eric Dumazet
  2022-03-28 10:34 ` David Howells
  1 sibling, 0 replies; 5+ messages in thread
From: Eric Dumazet @ 2022-03-26 18:39 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: David Howells, linux-kernel, syzbot, Jann Horn

ping ?

On Mon, Mar 21, 2022 at 5:47 PM Eric Dumazet <eric.dumazet@gmail.com> wrote:
>
> From: Eric Dumazet <edumazet@google.com>
>
> Commit 7ea1a0124b6d ("watch_queue: Free the alloc bitmap
> when the watch_queue is torn down") took care of the bitmap,
> but not the page array.
>
> BUG: memory leak
> unreferenced object 0xffff88810d9bc140 (size 32):
>   comm "syz-executor335", pid 3603, jiffies 4294946994 (age 12.840s)
>   hex dump (first 32 bytes):
>     40 a7 40 04 00 ea ff ff 00 00 00 00 00 00 00 00  @.@.............
>     00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
>   backtrace:
>     [<ffffffff81459bff>] kmalloc_array include/linux/slab.h:621 [inline]
>     [<ffffffff81459bff>] kcalloc include/linux/slab.h:652 [inline]
>     [<ffffffff81459bff>] watch_queue_set_size+0x12f/0x2e0 kernel/watch_queue.c:251
>     [<ffffffff8159fcf2>] pipe_ioctl+0x82/0x140 fs/pipe.c:632
>     [<ffffffff815b601c>] vfs_ioctl fs/ioctl.c:51 [inline]
>     [<ffffffff815b601c>] __do_sys_ioctl fs/ioctl.c:874 [inline]
>     [<ffffffff815b601c>] __se_sys_ioctl fs/ioctl.c:860 [inline]
>     [<ffffffff815b601c>] __x64_sys_ioctl+0xfc/0x140 fs/ioctl.c:860
>     [<ffffffff84493a05>] do_syscall_x64 arch/x86/entry/common.c:50 [inline]
>     [<ffffffff84493a05>] do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
>     [<ffffffff84600068>] entry_SYSCALL_64_after_hwframe+0x44/0xae
>
> Reported-by: syzbot <syzkaller@googlegroups.com>
> Fixes: c73be61cede5 ("pipe: Add general notification queue support")
> Signed-off-by: Eric Dumazet <edumazet@google.com>
> Cc: David Howells <dhowells@redhat.com>
> Cc: Jann Horn <jannh@google.com>
> ---
>  kernel/watch_queue.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/kernel/watch_queue.c b/kernel/watch_queue.c
> index 00703444a21948deaa8b7ac8b57b73528badff0d..58fe68664eb1b0001cb00c8d046e108462df4836 100644
> --- a/kernel/watch_queue.c
> +++ b/kernel/watch_queue.c
> @@ -370,6 +370,7 @@ static void __put_watch_queue(struct kref *kref)
>
>         for (i = 0; i < wqueue->nr_pages; i++)
>                 __free_page(wqueue->notes[i]);
> +       kfree(wqueue->notes);
>         bitmap_free(wqueue->notes_bitmap);
>
>         wfilter = rcu_access_pointer(wqueue->filter);
> --
> 2.35.1.894.gb6a874cedc-goog
>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] watch_queue: Free the page array when watch_queue is dismantled
  2022-03-22  0:46 [PATCH] watch_queue: Free the page array when watch_queue is dismantled Eric Dumazet
  2022-03-26 18:39 ` Eric Dumazet
@ 2022-03-28 10:34 ` David Howells
  2022-03-28 16:49   ` Eric Dumazet
  1 sibling, 1 reply; 5+ messages in thread
From: David Howells @ 2022-03-28 10:34 UTC (permalink / raw)
  To: Eric Dumazet; +Cc: dhowells, linux-kernel, Eric Dumazet, syzbot, Jann Horn

Eric Dumazet <eric.dumazet@gmail.com> wrote:

> Reported-by: syzbot <syzkaller@googlegroups.com>

Should this be the following?

	Reported-by: syzbot+25ea042ae28f3888727a@syzkaller.appspotmail.com

David


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] watch_queue: Free the page array when watch_queue is dismantled
  2022-03-28 10:34 ` David Howells
@ 2022-03-28 16:49   ` Eric Dumazet
  0 siblings, 0 replies; 5+ messages in thread
From: Eric Dumazet @ 2022-03-28 16:49 UTC (permalink / raw)
  To: David Howells; +Cc: Eric Dumazet, linux-kernel, syzbot, Jann Horn

On Mon, Mar 28, 2022 at 3:34 AM David Howells <dhowells@redhat.com> wrote:
>
> Eric Dumazet <eric.dumazet@gmail.com> wrote:
>
> > Reported-by: syzbot <syzkaller@googlegroups.com>
>
> Should this be the following?
>
>         Reported-by: syzbot+25ea042ae28f3888727a@syzkaller.appspotmail.com
>

This can be.

I mostly send fixes while the syzbot report is not public, so I used a
generic form.
(Because I also take care of feeding the bot with the needed "#syz
fix:  patch_title")

In this case, I have released the syzbot report, because I saw you had
a patch for this issue already.

Please add "Reported-by:
syzbot+25ea042ae28f3888727a@syzkaller.appspotmail.com" when you submit
your fix, thanks !

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH] watch_queue: Free the page array when watch_queue is dismantled
@ 2022-03-28 17:07 David Howells
  0 siblings, 0 replies; 5+ messages in thread
From: David Howells @ 2022-03-28 17:07 UTC (permalink / raw)
  To: torvalds
  Cc: syzbot+25ea042ae28f3888727a, Eric Dumazet, Jann Horn, dhowells,
	keyrings, linux-kernel

From: Eric Dumazet <edumazet@google.com>

Commit 7ea1a0124b6d ("watch_queue: Free the alloc bitmap
when the watch_queue is torn down") took care of the bitmap,
but not the page array.

BUG: memory leak
unreferenced object 0xffff88810d9bc140 (size 32):
  comm "syz-executor335", pid 3603, jiffies 4294946994 (age 12.840s)
  hex dump (first 32 bytes):
    40 a7 40 04 00 ea ff ff 00 00 00 00 00 00 00 00  @.@.............
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [<ffffffff81459bff>] kmalloc_array include/linux/slab.h:621 [inline]
    [<ffffffff81459bff>] kcalloc include/linux/slab.h:652 [inline]
    [<ffffffff81459bff>] watch_queue_set_size+0x12f/0x2e0 kernel/watch_queue.c:251
    [<ffffffff8159fcf2>] pipe_ioctl+0x82/0x140 fs/pipe.c:632
    [<ffffffff815b601c>] vfs_ioctl fs/ioctl.c:51 [inline]
    [<ffffffff815b601c>] __do_sys_ioctl fs/ioctl.c:874 [inline]
    [<ffffffff815b601c>] __se_sys_ioctl fs/ioctl.c:860 [inline]
    [<ffffffff815b601c>] __x64_sys_ioctl+0xfc/0x140 fs/ioctl.c:860
    [<ffffffff84493a05>] do_syscall_x64 arch/x86/entry/common.c:50 [inline]
    [<ffffffff84493a05>] do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
    [<ffffffff84600068>] entry_SYSCALL_64_after_hwframe+0x44/0xae

Reported-by: syzbot+25ea042ae28f3888727a@syzkaller.appspotmail.com
Fixes: c73be61cede5 ("pipe: Add general notification queue support")
Signed-off-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David Howells <dhowells@redhat.com>
Cc: Jann Horn <jannh@google.com>
Link: https://lore.kernel.org/r/20220322004654.618274-1-eric.dumazet@gmail.com/
---

 kernel/watch_queue.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/kernel/watch_queue.c b/kernel/watch_queue.c
index 3990e4df3d7b..230038d4f908 100644
--- a/kernel/watch_queue.c
+++ b/kernel/watch_queue.c
@@ -370,6 +370,7 @@ static void __put_watch_queue(struct kref *kref)
 
 	for (i = 0; i < wqueue->nr_pages; i++)
 		__free_page(wqueue->notes[i]);
+	kfree(wqueue->notes);
 	bitmap_free(wqueue->notes_bitmap);
 
 	wfilter = rcu_access_pointer(wqueue->filter);



^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2022-03-28 17:07 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-22  0:46 [PATCH] watch_queue: Free the page array when watch_queue is dismantled Eric Dumazet
2022-03-26 18:39 ` Eric Dumazet
2022-03-28 10:34 ` David Howells
2022-03-28 16:49   ` Eric Dumazet
2022-03-28 17:07 David Howells

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).