packet: make aligned size of struct tpacket{2,3}_hdr clear
authorAtzm Watanabe <atzm@stratosphere.co.jp>
Tue, 17 Dec 2013 13:53:32 +0000 (22:53 +0900)
committerDavid S. Miller <davem@davemloft.net>
Wed, 18 Dec 2013 05:36:16 +0000 (00:36 -0500)
struct tpacket{2,3}_hdr is aligned to a multiple of TPACKET_ALIGNMENT.
We may add members to them until current aligned size without forcing
userspace to call getsockopt(..., PACKET_HDRLEN, ...).

Signed-off-by: Atzm Watanabe <atzm@stratosphere.co.jp>
Acked-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/packet/af_packet.c

index 24675f06f4fd25203c493b75d3af9a7593ade86a..4fd52181b6ce96b7fc996853046640059739c068 100644 (file)
@@ -1812,6 +1812,13 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
        struct timespec ts;
        __u32 ts_status;
 
+       /* struct tpacket{2,3}_hdr is aligned to a multiple of TPACKET_ALIGNMENT.
+        * We may add members to them until current aligned size without forcing
+        * userspace to call getsockopt(..., PACKET_HDRLEN, ...).
+        */
+       BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32);
+       BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
+
        if (skb->pkt_type == PACKET_LOOPBACK)
                goto drop;