Message ID | 20190209203701.27252-1-kal.conley@dectris.com |
---|---|
State | Changes Requested |
Delegated to: | David Miller |
Headers | show |
Series | net/packet: fix 4gb buffer limit due to overflow check | expand |
From: Kal Conley <kal.conley@dectris.com> Date: Sat, 9 Feb 2019 21:37:00 +0100 > When calculating rb->frames_per_block * req->tp_block_nr the result > can overflow. Check it for overflow without limiting the total buffer > size to UINT_MAX. > > This change fixes support for packet ring buffers >= UINT_MAX. Please resubmit with a proper signoff and also an appropriate Fixes: tag.
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c index d0945253f43b..d603a430378e 100644 --- a/net/packet/af_packet.c +++ b/net/packet/af_packet.c @@ -4291,7 +4291,7 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u, rb->frames_per_block = req->tp_block_size / req->tp_frame_size; if (unlikely(rb->frames_per_block == 0)) goto out; - if (unlikely(req->tp_block_size > UINT_MAX / req->tp_block_nr)) + if (unlikely(rb->frames_per_block > UINT_MAX / req->tp_block_nr)) goto out; if (unlikely((rb->frames_per_block * req->tp_block_nr) != req->tp_frame_nr))