Message ID | 55A35B72.2060009@miraclelinux.com |
---|---|
State | RFC, archived |
Delegated to: | David Miller |
Headers | show |
On 13 July 2015 at 15:32, YOSHIFUJI Hideaki <hideaki.yoshifuji@miraclelinux.com> wrote: > Hi, > > Erik Kline wrote: >> Hmm, when I run a UML linux with this patch (which, I'm ashamed to >> say, I failed to do before) I get these kinds of errors: >> >> unregister_netdevice: waiting for <TAPdevice> to become free. >> Usage count = 1 >> unregister_netdevice: waiting for <TAPdevice> to become free. >> Usage count = 1 >> >> Perhaps they're unrelated... I'm still investigating. > > Would you test attached patch please? That does look logically correct, so +1 to it regardless, but it does not seem to have fixed the issue I'm seeing. I still haven't produced the smallest possible demo test program. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From 38c5a10a5876ea47766ffc05b5a131a210d6e1aa Mon Sep 17 00:00:00 2001 From: YOSHIFUJI Hideaki <hideaki.yoshifuji@miraclelinux.com> Date: Mon, 13 Jul 2015 15:23:02 +0900 Subject: [PATCH] ipv6: Avoid NULL pointer dereference in __ipv6_dev_get_saddr(). Commit 9131f3de2 ("ipv6: Do not iterate over all interfaces when finding source address on specific interface.") introduced possible NULL pointer dereference if outgoing device is specified. Fixes: 9131f3de24db4dc12199aede7d931e6703e97f3b ("ipv6: Do not iterate over all interfaces when finding source address on specific interface.") Signed-off-by: YOSHIFUJI Hideaki <hideaki.yoshifuji@miraclelinux.com> --- net/ipv6/addrconf.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 4ab74d5..50ad476 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -1480,7 +1480,8 @@ int ipv6_dev_get_saddr(struct net *net, const struct net_device *dst_dev, } if (use_oif_addr) { - __ipv6_dev_get_saddr(net, &dst, prefs, saddr, idev, scores); + if (idev) + __ipv6_dev_get_saddr(net, &dst, prefs, saddr, idev, scores); } else { for_each_netdev_rcu(net, dev) { idev = __in6_dev_get(dev); -- 1.9.1