|
@@ -44,6 +44,7 @@
|
|
|
#include <net/arp.h>
|
|
|
#include <net/ip_fib.h>
|
|
|
#include <net/rtnetlink.h>
|
|
|
+#include <net/xfrm.h>
|
|
|
|
|
|
#ifndef CONFIG_IP_MULTIPLE_TABLES
|
|
|
|
|
@@ -211,7 +212,10 @@ int fib_validate_source(struct sk_buff *skb, __be32 src, __be32 dst, u8 tos,
|
|
|
in_dev = __in_dev_get_rcu(dev);
|
|
|
if (in_dev) {
|
|
|
no_addr = in_dev->ifa_list == NULL;
|
|
|
- rpf = IN_DEV_RPFILTER(in_dev);
|
|
|
+
|
|
|
+ /* Ignore rp_filter for packets protected by IPsec. */
|
|
|
+ rpf = secpath_exists(skb) ? 0 : IN_DEV_RPFILTER(in_dev);
|
|
|
+
|
|
|
accept_local = IN_DEV_ACCEPT_LOCAL(in_dev);
|
|
|
fl4.flowi4_mark = IN_DEV_SRC_VMARK(in_dev) ? skb->mark : 0;
|
|
|
}
|