From: Alan Maguire <alan.magu...@oracle.com> Date: Mon, 18 Feb 2019 12:36:40 +0000 (GMT)
> Naresh Kamboju noted the following oops during execution of selftest > tools/testing/selftests/bpf/test_tunnel.sh on x86_64: ... > I'm also seeing the same failure on x86_64, and it reproduces > consistently. > > From poking around it looks like the skb's dst entry is being used > to calculate the mtu in: > > mtu = skb_dst(skb) ? dst_mtu(skb_dst(skb)) : dev->mtu; > > ...but because that dst_entry has an "ops" value set to md_dst_ops, > the various ops (including mtu) are not set: > > crash> struct sk_buff._skb_refdst ffff928f87447700 -x > _skb_refdst = 0xffffcd6fbf5ea590 > crash> struct dst_entry.ops 0xffffcd6fbf5ea590 > ops = 0xffffffffa0193800 > crash> struct dst_ops.mtu 0xffffffffa0193800 > mtu = 0x0 > crash> > > I confirmed that the dst entry also has dst->input set to > dst_md_discard, so it looks like it's an entry that's been > initialized via __metadata_dst_init alright. > > I think the fix here is to use skb_valid_dst(skb) - it checks > for DST_METADATA also, and with that fix in place, the > problem - which was previously 100% reproducible - disappears. > > The below patch resolves the panic and all bpf tunnel tests pass > without incident. > > Fixes: c8b34e680a09 ("ip_tunnel: Add tnl_update_pmtu in ip_md_tunnel_xmit") > > Reported-by: Naresh Kamboju <naresh.kamb...@linaro.org> > Signed-off-by: Alan Maguire <alan.magu...@oracle.com> > Acked-by: Alexei Starovoitov <a...@kernel.org> This doesn't apply cleanly to the current 'net' tree. Also, please do not insert an empty line between the Fixes: and other tags. All tags are equal and should be placed together as an uninterrupted group.