fs/pipe: Limit the slots in pipe_resize_ring()
Limit the number of slots in pipe_resize_ring() to the maximum value
representable by pipe->{head,tail}. Values beyond the max limit can
lead to incorrect pipe occupancy related calculations where the pipe
will never appear full.
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: K Prateek Nayak <kprateek.nayak@amd.com>
Link: https://lore.kernel.org/r/20250307052919.34542-2-kprateek.nayak@amd.com
Reviewed-by: Oleg Nesterov <oleg@redhat.com>
Signed-off-by: Christian Brauner <brauner@kernel.org>
This commit is contained in:
parent
00a7d39898
commit
cf3d0c54b2
1 changed files with 4 additions and 0 deletions
|
|
@ -1271,6 +1271,10 @@ int pipe_resize_ring(struct pipe_inode_info *pipe, unsigned int nr_slots)
|
|||
struct pipe_buffer *bufs;
|
||||
unsigned int head, tail, mask, n;
|
||||
|
||||
/* nr_slots larger than limits of pipe->{head,tail} */
|
||||
if (unlikely(nr_slots > (pipe_index_t)-1u))
|
||||
return -EINVAL;
|
||||
|
||||
bufs = kcalloc(nr_slots, sizeof(*bufs),
|
||||
GFP_KERNEL_ACCOUNT | __GFP_NOWARN);
|
||||
if (unlikely(!bufs))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue