On Tue, 2015-12-15 at 08:15 -0700, David Ahern wrote: > On 12/15/15 8:12 AM, Ben Hutchings wrote: > > @@ -598,7 +599,10 @@ static int vrf_newlink(struct net *src_net, struct net_device *dev, > > > > rcu_assign_pointer(dev->vrf_ptr, vrf_ptr); > > > > - return register_netdev(dev); > > + err = register_netdev(dev); > > + if (err) > > + kfree(vrf_ptr); > > + return err; > > } > > > > static size_t vrf_nl_getsize(const struct net_device *dev) > > > > The rcu_assign_pointer should only be done if the register_netdev succeeded. Oh, yes I see. I though that no other task could access an unregistered device, but register_netdev() can still fail after listing the device. Wait, it's worse, this is calling register_netdev() which will deadlock as we already hold the RTNL lock. Ben. > Thanks for creating the patch. > -- Ben Hutchings Logic doesn't apply to the real world. - Marvin Minsky
Attachment:
signature.asc
Description: This is a digitally signed message part