dcb: unlock on error in dcbnl_ieee_get()
authorDan Carpenter <error27@gmail.com>
Tue, 4 Jan 2011 21:03:12 +0000 (21:03 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 6 Jan 2011 19:16:54 +0000 (11:16 -0800)
There is a "goto nla_put_failure" hidden inside the NLA_PUT() macro, but
we're holding the dcb_lock so we need to unlock first.

Signed-off-by: Dan Carpenter <error27@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/dcb/dcbnl.c

index 9399af5657155a8bebc2768c2300d03e506137bc..4323bd441f0fb57b2db29e3cd914515fd1f96c29 100644 (file)
@@ -1264,9 +1264,14 @@ static int dcbnl_ieee_get(struct net_device *netdev, struct nlattr **tb,
 
        spin_lock(&dcb_lock);
        list_for_each_entry(itr, &dcb_app_list, list) {
-               if (strncmp(itr->name, netdev->name, IFNAMSIZ) == 0)
-                       NLA_PUT(skb, DCB_ATTR_IEEE_APP,
-                               sizeof(itr->app), &itr->app);
+               if (strncmp(itr->name, netdev->name, IFNAMSIZ) == 0) {
+                       err = nla_put(skb, DCB_ATTR_IEEE_APP, sizeof(itr->app),
+                                        &itr->app);
+                       if (err) {
+                               spin_unlock(&dcb_lock);
+                               goto nla_put_failure;
+                       }
+               }
        }
        spin_unlock(&dcb_lock);
        nla_nest_end(skb, app);