diff options
author | Willem de Bruijn <willemb@google.com> | 2017-02-07 15:57:20 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-02-08 13:56:37 -0500 |
commit | 217e6fa24ce28ec87fca8da93c9016cb78028612 (patch) | |
tree | 1964e4821fd14a8255df061419fc2e8745bc92e7 /net/ethernet | |
parent | d7426c69a1942b2b9b709bf66b944ff09f561484 (diff) | |
download | linux-stable-217e6fa24ce28ec87fca8da93c9016cb78028612.tar.gz linux-stable-217e6fa24ce28ec87fca8da93c9016cb78028612.tar.bz2 linux-stable-217e6fa24ce28ec87fca8da93c9016cb78028612.zip |
net: introduce device min_header_len
The stack must not pass packets to device drivers that are shorter
than the minimum link layer header length.
Previously, packet sockets would drop packets smaller than or equal
to dev->hard_header_len, but this has false positives. Zero length
payload is used over Ethernet. Other link layer protocols support
variable length headers. Support for validation of these protocols
removed the min length check for all protocols.
Introduce an explicit dev->min_header_len parameter and drop all
packets below this value. Initially, set it to non-zero only for
Ethernet and loopback. Other protocols can follow in a patch to
net-next.
Fixes: 9ed988cd5915 ("packet: validate variable length ll headers")
Reported-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: Willem de Bruijn <willemb@google.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Acked-by: Sowmini Varadhan <sowmini.varadhan@oracle.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ethernet')
-rw-r--r-- | net/ethernet/eth.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/net/ethernet/eth.c b/net/ethernet/eth.c index 8c5a479681ca..516c87e75de7 100644 --- a/net/ethernet/eth.c +++ b/net/ethernet/eth.c @@ -356,6 +356,7 @@ void ether_setup(struct net_device *dev) dev->header_ops = ð_header_ops; dev->type = ARPHRD_ETHER; dev->hard_header_len = ETH_HLEN; + dev->min_header_len = ETH_HLEN; dev->mtu = ETH_DATA_LEN; dev->min_mtu = ETH_MIN_MTU; dev->max_mtu = ETH_DATA_LEN; |