Skip to content

Commit

Permalink
net: fix double skb free in dcbnl
Browse files Browse the repository at this point in the history
netlink_unicast() calls kfree_skb even in the error case.

dcbnl calls netlink_unicast() which when it fails free's the
skb and returns an error value.  dcbnl is free'ing the skb
again when this error occurs.  This patch removes the double
free.

Signed-off-by: John Fastabend <[email protected]>
Signed-off-by: Jeff Kirsher <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
John Fastabend authored and davem330 committed Sep 27, 2009
1 parent 5dba93a commit 7eaf507
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions net/dcb/dcbnl.c
Original file line number Diff line number Diff line change
Expand Up @@ -194,7 +194,7 @@ static int dcbnl_reply(u8 value, u8 event, u8 cmd, u8 attr, u32 pid,
nlmsg_end(dcbnl_skb, nlh);
ret = rtnl_unicast(dcbnl_skb, &init_net, pid);
if (ret)
goto err;
return -EINVAL;

return 0;
nlmsg_failure:
Expand Down Expand Up @@ -275,7 +275,7 @@ static int dcbnl_getpfccfg(struct net_device *netdev, struct nlattr **tb,

ret = rtnl_unicast(dcbnl_skb, &init_net, pid);
if (ret)
goto err;
goto err_out;

return 0;
nlmsg_failure:
Expand Down Expand Up @@ -316,12 +316,11 @@ static int dcbnl_getperm_hwaddr(struct net_device *netdev, struct nlattr **tb,

ret = rtnl_unicast(dcbnl_skb, &init_net, pid);
if (ret)
goto err;
goto err_out;

return 0;

nlmsg_failure:
err:
kfree_skb(dcbnl_skb);
err_out:
return -EINVAL;
Expand Down Expand Up @@ -383,7 +382,7 @@ static int dcbnl_getcap(struct net_device *netdev, struct nlattr **tb,

ret = rtnl_unicast(dcbnl_skb, &init_net, pid);
if (ret)
goto err;
goto err_out;

return 0;
nlmsg_failure:
Expand Down Expand Up @@ -460,7 +459,7 @@ static int dcbnl_getnumtcs(struct net_device *netdev, struct nlattr **tb,
ret = rtnl_unicast(dcbnl_skb, &init_net, pid);
if (ret) {
ret = -EINVAL;
goto err;
goto err_out;
}

return 0;
Expand Down Expand Up @@ -799,7 +798,7 @@ static int __dcbnl_pg_getcfg(struct net_device *netdev, struct nlattr **tb,

ret = rtnl_unicast(dcbnl_skb, &init_net, pid);
if (ret)
goto err;
goto err_out;

return 0;

Expand Down Expand Up @@ -1063,7 +1062,7 @@ static int dcbnl_bcn_getcfg(struct net_device *netdev, struct nlattr **tb,

ret = rtnl_unicast(dcbnl_skb, &init_net, pid);
if (ret)
goto err;
goto err_out;

return 0;

Expand Down

0 comments on commit 7eaf507

Please sign in to comment.