gre6: Fix reception with IP6_TNL_F_RCV_DSCP_COPY
authorMark Tomlinson <mark.tomlinson@alliedtelesis.co.nz>
Wed, 19 Aug 2020 01:53:58 +0000 (13:53 +1200)
committerDavid S. Miller <davem@davemloft.net>
Thu, 20 Aug 2020 23:28:04 +0000 (16:28 -0700)
commit272502fcb7cda01ab07fc2fcff82d1d2f73d43cc
treea6f06f2de4f3eecdb9438bcdbd9d0d0b4166b20c
parente14fd8da84123fbd7d03aa2c28501879887f2cdd
gre6: Fix reception with IP6_TNL_F_RCV_DSCP_COPY

When receiving an IPv4 packet inside an IPv6 GRE packet, and the
IP6_TNL_F_RCV_DSCP_COPY flag is set on the tunnel, the IPv4 header would
get corrupted. This is due to the common ip6_tnl_rcv() function assuming
that the inner header is always IPv6. This patch checks the tunnel
protocol for IPv4 inner packets, but still defaults to IPv6.

Fixes: 308edfdf1563 ("gre6: Cleanup GREv6 receive path, call common GRE functions")
Signed-off-by: Mark Tomlinson <mark.tomlinson@alliedtelesis.co.nz>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv6/ip6_tunnel.c