|
@@ -292,19 +292,19 @@ __be32 fib_compute_spec_dst(struct sk_buff *skb)
|
|
|
return ip_hdr(skb)->daddr;
|
|
|
|
|
|
in_dev = __in_dev_get_rcu(dev);
|
|
|
- BUG_ON(!in_dev);
|
|
|
|
|
|
net = dev_net(dev);
|
|
|
|
|
|
scope = RT_SCOPE_UNIVERSE;
|
|
|
if (!ipv4_is_zeronet(ip_hdr(skb)->saddr)) {
|
|
|
+ bool vmark = in_dev && IN_DEV_SRC_VMARK(in_dev);
|
|
|
struct flowi4 fl4 = {
|
|
|
.flowi4_iif = LOOPBACK_IFINDEX,
|
|
|
.flowi4_oif = l3mdev_master_ifindex_rcu(dev),
|
|
|
.daddr = ip_hdr(skb)->saddr,
|
|
|
.flowi4_tos = RT_TOS(ip_hdr(skb)->tos),
|
|
|
.flowi4_scope = scope,
|
|
|
- .flowi4_mark = IN_DEV_SRC_VMARK(in_dev) ? skb->mark : 0,
|
|
|
+ .flowi4_mark = vmark ? skb->mark : 0,
|
|
|
};
|
|
|
if (!fib_lookup(net, &fl4, &res, 0))
|
|
|
return FIB_RES_PREFSRC(net, res);
|