]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - net/ipv4/route.c
route: do not cache fib route info on local routes with oif
[karo-tx-linux.git] / net / ipv4 / route.c
index 02c62299d717b9f6c38a5227e3b3ae376e0015b6..b050cf980a57796cc285a4fd6927f0c0576f6272 100644 (file)
@@ -2045,6 +2045,18 @@ static struct rtable *__mkroute_output(const struct fib_result *res,
                 */
                if (fi && res->prefixlen < 4)
                        fi = NULL;
+       } else if ((type == RTN_LOCAL) && (orig_oif != 0) &&
+                  (orig_oif != dev_out->ifindex)) {
+               /* For local routes that require a particular output interface
+                * we do not want to cache the result.  Caching the result
+                * causes incorrect behaviour when there are multiple source
+                * addresses on the interface, the end result being that if the
+                * intended recipient is waiting on that interface for the
+                * packet he won't receive it because it will be delivered on
+                * the loopback interface and the IP_PKTINFO ipi_ifindex will
+                * be set to the loopback interface as well.
+                */
+               fi = NULL;
        }
 
        fnhe = NULL;