From: David Howells <dhowells@xxxxxxxxxx> commit 3b4c0371928c17af03e8397ac842346624017ce6 upstream. Currently, watch_queue_set_size() sets the number of notes available in wqueue->nr_notes according to the number of notes allocated, but sets the size of the bitmap to the unrounded number of notes originally asked for. Fix this by setting the bitmap size to the number of notes we're actually going to make available (ie. the number allocated). Fixes: c73be61cede5 ("pipe: Add general notification queue support") Reported-by: Jann Horn <jannh@xxxxxxxxxx> Signed-off-by: David Howells <dhowells@xxxxxxxxxx> Signed-off-by: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- kernel/watch_queue.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- a/kernel/watch_queue.c +++ b/kernel/watch_queue.c @@ -244,6 +244,7 @@ long watch_queue_set_size(struct pipe_in goto error; } + nr_notes = nr_pages * WATCH_QUEUE_NOTES_PER_PAGE; ret = pipe_resize_ring(pipe, roundup_pow_of_two(nr_notes)); if (ret < 0) goto error; @@ -269,7 +270,7 @@ long watch_queue_set_size(struct pipe_in wqueue->notes = pages; wqueue->notes_bitmap = bitmap; wqueue->nr_pages = nr_pages; - wqueue->nr_notes = nr_pages * WATCH_QUEUE_NOTES_PER_PAGE; + wqueue->nr_notes = nr_notes; return 0; error_p: Patches currently in stable-queue which might be from dhowells@xxxxxxxxxx are queue-5.16/watch_queue-fix-lack-of-barrier-sync-lock-between-post-and-read.patch queue-5.16/watch_queue-pipe-free-watchqueue-state-after-clearing-pipe-ring.patch queue-5.16/watch_queue-make-comment-about-setting-defunct-more-accurate.patch queue-5.16/watch_queue-fix-the-alloc-bitmap-size-to-reflect-notes-allocated.patch queue-5.16/watch_queue-free-the-alloc-bitmap-when-the-watch_queue-is-torn-down.patch queue-5.16/watch_queue-fix-to-always-request-a-pow-of-2-pipe-ring-size.patch queue-5.16/watch_queue-fix-filter-limit-check.patch queue-5.16/watch_queue-fix-to-release-page-in-release.patch