|
@@ -4226,6 +4226,8 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u,
|
|
|
}
|
|
|
|
|
|
if (req->tp_block_nr) {
|
|
|
+ unsigned int min_frame_size;
|
|
|
+
|
|
|
/* Sanity tests and some calculations */
|
|
|
err = -EBUSY;
|
|
|
if (unlikely(rb->pg_vec))
|
|
@@ -4248,12 +4250,12 @@ static int packet_set_ring(struct sock *sk, union tpacket_req_u *req_u,
|
|
|
goto out;
|
|
|
if (unlikely(!PAGE_ALIGNED(req->tp_block_size)))
|
|
|
goto out;
|
|
|
+ min_frame_size = po->tp_hdrlen + po->tp_reserve;
|
|
|
if (po->tp_version >= TPACKET_V3 &&
|
|
|
- req->tp_block_size <=
|
|
|
- BLK_PLUS_PRIV((u64)req_u->req3.tp_sizeof_priv) + sizeof(struct tpacket3_hdr))
|
|
|
+ req->tp_block_size <
|
|
|
+ BLK_PLUS_PRIV((u64)req_u->req3.tp_sizeof_priv) + min_frame_size)
|
|
|
goto out;
|
|
|
- if (unlikely(req->tp_frame_size < po->tp_hdrlen +
|
|
|
- po->tp_reserve))
|
|
|
+ if (unlikely(req->tp_frame_size < min_frame_size))
|
|
|
goto out;
|
|
|
if (unlikely(req->tp_frame_size & (TPACKET_ALIGNMENT - 1)))
|
|
|
goto out;
|