X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=net%2Fsctp%2Fprotocol.c;h=b7143337e4fa025fdb473732fdc064503e731dd4;hb=133bb59585140747fd3938002670cb395f40dc76;hp=4345790ad3266c353eeac5398593c2a9ce4effda;hpb=fa815580fb87d1b8c218f9eba8122b2fc3f1a68c;p=firefly-linux-kernel-4.4.55.git diff --git a/net/sctp/protocol.c b/net/sctp/protocol.c index 4345790ad326..b7143337e4fa 100644 --- a/net/sctp/protocol.c +++ b/net/sctp/protocol.c @@ -506,14 +506,22 @@ static void sctp_v4_get_dst(struct sctp_transport *t, union sctp_addr *saddr, if (IS_ERR(rt)) continue; + if (!dst) + dst = &rt->dst; + /* Ensure the src address belongs to the output * interface. */ odev = __ip_dev_find(sock_net(sk), laddr->a.v4.sin_addr.s_addr, false); - if (!odev || odev->ifindex != fl4->flowi4_oif) + if (!odev || odev->ifindex != fl4->flowi4_oif) { + if (&rt->dst != dst) + dst_release(&rt->dst); continue; + } + if (dst != &rt->dst) + dst_release(dst); dst = &rt->dst; break; }