aboutsummaryrefslogtreecommitdiffstats
path: root/net/packet/af_packet.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/packet/af_packet.c')
-rw-r--r--net/packet/af_packet.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/net/packet/af_packet.c b/net/packet/af_packet.c
index 9b27d0cd766d..e6445d8f3f57 100644
--- a/net/packet/af_packet.c
+++ b/net/packet/af_packet.c
@@ -4226,6 +4226,8 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u,
4226 } 4226 }
4227 4227
4228 if (req->tp_block_nr) { 4228 if (req->tp_block_nr) {
4229 unsigned int min_frame_size;
4230
4229 /* Sanity tests and some calculations */ 4231 /* Sanity tests and some calculations */
4230 err = -EBUSY; 4232 err = -EBUSY;
4231 if (unlikely(rb->pg_vec)) 4233 if (unlikely(rb->pg_vec))
@@ -4248,12 +4250,12 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u,
4248 goto out; 4250 goto out;
4249 if (unlikely(!PAGE_ALIGNED(req->tp_block_size))) 4251 if (unlikely(!PAGE_ALIGNED(req->tp_block_size)))
4250 goto out; 4252 goto out;
4253 min_frame_size = po->tp_hdrlen + po->tp_reserve;
4251 if (po->tp_version >= TPACKET_V3 && 4254 if (po->tp_version >= TPACKET_V3 &&
4252 req->tp_block_size <= 4255 req->tp_block_size <
4253 BLK_PLUS_PRIV((u64)req_u->req3.tp_sizeof_priv) + sizeof(struct tpacket3_hdr)) 4256 BLK_PLUS_PRIV((u64)req_u->req3.tp_sizeof_priv) + min_frame_size)
4254 goto out; 4257 goto out;
4255 if (unlikely(req->tp_frame_size < po->tp_hdrlen + 4258 if (unlikely(req->tp_frame_size < min_frame_size))
4256 po->tp_reserve))
4257 goto out; 4259 goto out;
4258 if (unlikely(req->tp_frame_size & (TPACKET_ALIGNMENT - 1))) 4260 if (unlikely(req->tp_frame_size & (TPACKET_ALIGNMENT - 1)))
4259 goto out; 4261 goto out;