packet: fill the gap of TPACKET_ALIGNMENT with zeros
authorAtzm Watanabe <atzm@stratosphere.co.jp>
Tue, 17 Dec 2013 13:53:36 +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.
Explicitly defining and zeroing the gap of this makes additional changes
easier.

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>
include/uapi/linux/if_packet.h
net/packet/af_packet.c

index 1e24aa701cbd3d2f45c4348ebcd2c00fae9e8bda..9185dc9a4485cf4cef47302c4c0be129db97344a 100644 (file)
@@ -133,7 +133,7 @@ struct tpacket2_hdr {
        __u32           tp_sec;
        __u32           tp_nsec;
        __u16           tp_vlan_tci;
-       __u16           tp_padding;
+       __u8            tp_padding[6];
 };
 
 struct tpacket_hdr_variant1 {
@@ -154,6 +154,7 @@ struct tpacket3_hdr {
        union {
                struct tpacket_hdr_variant1 hv1;
        };
+       __u8            tp_padding[12];
 };
 
 struct tpacket_bd_ts {
index 4fd52181b6ce96b7fc996853046640059739c068..f281999ba92eeb820df03815f2722c621d03b84c 100644 (file)
@@ -1929,7 +1929,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
                } else {
                        h.h2->tp_vlan_tci = 0;
                }
-               h.h2->tp_padding = 0;
+               memset(h.h2->tp_padding, 0, sizeof(h.h2->tp_padding));
                hdrlen = sizeof(*h.h2);
                break;
        case TPACKET_V3:
@@ -1943,6 +1943,7 @@ static int tpacket_rcv(struct sk_buff *skb, struct net_device *dev,
                h.h3->tp_net = netoff;
                h.h3->tp_sec  = ts.tv_sec;
                h.h3->tp_nsec = ts.tv_nsec;
+               memset(h.h3->tp_padding, 0, sizeof(h.h3->tp_padding));
                hdrlen = sizeof(*h.h3);
                break;
        default: