diff options
author | Harald Welte <laforge@netfilter.org> | 2005-11-03 13:05:37 -0500 |
---|---|---|
committer | Arnaldo Carvalho de Melo <acme@mandriva.com> | 2005-11-05 00:28:37 -0500 |
commit | 0f81eb4db4f1cc560318b6e7762a7a1d7d8c7095 (patch) | |
tree | a65dfc0b6f5b4c8901f20b382dd00403f4d86099 /net | |
parent | d2a7bb7141a1fac7b11523538b2d2407e928baeb (diff) |
[NETFILTER]: Fix double free after netlink_unicast() in ctnetlink
It's not necessary to free skb if netlink_unicast() failed.
Signed-off-by: Yasuyuki Kozakai <yasuyuki.kozakai@toshiba.co.jp>
Signed-off-by: Harald Welte <laforge@netfilter.org>
Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com>
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/netfilter/ip_conntrack_netlink.c | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/net/ipv4/netfilter/ip_conntrack_netlink.c b/net/ipv4/netfilter/ip_conntrack_netlink.c index 166e6069f121..82a65043a8ef 100644 --- a/net/ipv4/netfilter/ip_conntrack_netlink.c +++ b/net/ipv4/netfilter/ip_conntrack_netlink.c | |||
@@ -815,7 +815,7 @@ ctnetlink_get_conntrack(struct sock *ctnl, struct sk_buff *skb, | |||
815 | IPCTNL_MSG_CT_NEW, 1, ct); | 815 | IPCTNL_MSG_CT_NEW, 1, ct); |
816 | ip_conntrack_put(ct); | 816 | ip_conntrack_put(ct); |
817 | if (err <= 0) | 817 | if (err <= 0) |
818 | goto out; | 818 | goto free; |
819 | 819 | ||
820 | err = netlink_unicast(ctnl, skb2, NETLINK_CB(skb).pid, MSG_DONTWAIT); | 820 | err = netlink_unicast(ctnl, skb2, NETLINK_CB(skb).pid, MSG_DONTWAIT); |
821 | if (err < 0) | 821 | if (err < 0) |
@@ -824,9 +824,9 @@ ctnetlink_get_conntrack(struct sock *ctnl, struct sk_buff *skb, | |||
824 | DEBUGP("leaving\n"); | 824 | DEBUGP("leaving\n"); |
825 | return 0; | 825 | return 0; |
826 | 826 | ||
827 | free: | ||
828 | kfree_skb(skb2); | ||
827 | out: | 829 | out: |
828 | if (skb2) | ||
829 | kfree_skb(skb2); | ||
830 | return -1; | 830 | return -1; |
831 | } | 831 | } |
832 | 832 | ||
@@ -1322,21 +1322,16 @@ ctnetlink_get_expect(struct sock *ctnl, struct sk_buff *skb, | |||
1322 | nlh->nlmsg_seq, IPCTNL_MSG_EXP_NEW, | 1322 | nlh->nlmsg_seq, IPCTNL_MSG_EXP_NEW, |
1323 | 1, exp); | 1323 | 1, exp); |
1324 | if (err <= 0) | 1324 | if (err <= 0) |
1325 | goto out; | 1325 | goto free; |
1326 | 1326 | ||
1327 | ip_conntrack_expect_put(exp); | 1327 | ip_conntrack_expect_put(exp); |
1328 | 1328 | ||
1329 | err = netlink_unicast(ctnl, skb2, NETLINK_CB(skb).pid, MSG_DONTWAIT); | 1329 | return netlink_unicast(ctnl, skb2, NETLINK_CB(skb).pid, MSG_DONTWAIT); |
1330 | if (err < 0) | ||
1331 | goto free; | ||
1332 | |||
1333 | return err; | ||
1334 | 1330 | ||
1331 | free: | ||
1332 | kfree_skb(skb2); | ||
1335 | out: | 1333 | out: |
1336 | ip_conntrack_expect_put(exp); | 1334 | ip_conntrack_expect_put(exp); |
1337 | free: | ||
1338 | if (skb2) | ||
1339 | kfree_skb(skb2); | ||
1340 | return err; | 1335 | return err; |
1341 | } | 1336 | } |
1342 | 1337 | ||