|
@@ -2649,8 +2649,12 @@ static int ip_route_output_slow(struct net *net, struct rtable **rp,
|
|
}
|
|
}
|
|
|
|
|
|
if (res.type == RTN_LOCAL) {
|
|
if (res.type == RTN_LOCAL) {
|
|
- if (!fl.fl4_src)
|
|
|
|
- fl.fl4_src = fl.fl4_dst;
|
|
|
|
|
|
+ if (!fl.fl4_src) {
|
|
|
|
+ if (res.fi->fib_prefsrc)
|
|
|
|
+ fl.fl4_src = res.fi->fib_prefsrc;
|
|
|
|
+ else
|
|
|
|
+ fl.fl4_src = fl.fl4_dst;
|
|
|
|
+ }
|
|
dev_out = net->loopback_dev;
|
|
dev_out = net->loopback_dev;
|
|
fl.oif = dev_out->ifindex;
|
|
fl.oif = dev_out->ifindex;
|
|
res.fi = NULL;
|
|
res.fi = NULL;
|