diff options
author | Willem de Bruijn <willemb@google.com> | 2019-02-20 10:52:12 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-02-20 11:24:27 -0800 |
commit | 418e897e0716b238ea4252ed22a73ca37d3cbbc1 (patch) | |
tree | 8ca1f1fcfe36bcb019c50ec93f8c17aea1677e54 /net/ipv4/af_inet.c | |
parent | 203ef5f1ff9f6abb558310550c2597c5432d5509 (diff) | |
download | lwn-418e897e0716b238ea4252ed22a73ca37d3cbbc1.tar.gz lwn-418e897e0716b238ea4252ed22a73ca37d3cbbc1.zip |
gso: validate gso_type on ipip style tunnels
Commit 121d57af308d ("gso: validate gso_type in GSO handlers") added
gso_type validation to existing gso_segment callback functions, to
filter out illegal and potentially dangerous SKB_GSO_DODGY packets.
Convert tunnels that now call inet_gso_segment and ipv6_gso_segment
directly to have their own callbacks and extend validation to these.
Signed-off-by: Willem de Bruijn <willemb@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/af_inet.c')
-rw-r--r-- | net/ipv4/af_inet.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/net/ipv4/af_inet.c b/net/ipv4/af_inet.c index 0dfb72c46671..eab3ebde981e 100644 --- a/net/ipv4/af_inet.c +++ b/net/ipv4/af_inet.c @@ -1385,6 +1385,15 @@ out: } EXPORT_SYMBOL(inet_gso_segment); +static struct sk_buff *ipip_gso_segment(struct sk_buff *skb, + netdev_features_t features) +{ + if (!(skb_shinfo(skb)->gso_type & SKB_GSO_IPXIP4)) + return ERR_PTR(-EINVAL); + + return inet_gso_segment(skb, features); +} + INDIRECT_CALLABLE_DECLARE(struct sk_buff *tcp4_gro_receive(struct list_head *, struct sk_buff *)); INDIRECT_CALLABLE_DECLARE(struct sk_buff *udp4_gro_receive(struct list_head *, @@ -1861,7 +1870,7 @@ static struct packet_offload ip_packet_offload __read_mostly = { static const struct net_offload ipip_offload = { .callbacks = { - .gso_segment = inet_gso_segment, + .gso_segment = ipip_gso_segment, .gro_receive = ipip_gro_receive, .gro_complete = ipip_gro_complete, }, |