diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2010-03-30 00:28:23 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2010-04-01 19:02:09 -0400 |
commit | 5dda8d1fc44f3ab37c0e5c8e980254b6703ef8b2 (patch) | |
tree | 429776be32aa4eb465acfac71d908c5f5905b386 /net | |
parent | 9e9b5dce350fd6f34c2c6b7440951481fb594a29 (diff) |
netfilter: ctnetlink: fix reliable event delivery if message building fails
[ Upstream commit 37b7ef7203240b3aba577bb1ff6765fe15225976 ]
This patch fixes a bug that allows to lose events when reliable
event delivery mode is used, ie. if NETLINK_BROADCAST_SEND_ERROR
and NETLINK_RECV_NO_ENOBUFS socket options are set.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'net')
-rw-r--r-- | net/netfilter/nf_conntrack_netlink.c | 3 | ||||
-rw-r--r-- | net/netfilter/nfnetlink.c | 4 |
2 files changed, 4 insertions, 3 deletions
diff --git a/net/netfilter/nf_conntrack_netlink.c b/net/netfilter/nf_conntrack_netlink.c index 0ffe689dfe97..eeac97fcef79 100644 --- a/net/netfilter/nf_conntrack_netlink.c +++ b/net/netfilter/nf_conntrack_netlink.c | |||
@@ -571,7 +571,8 @@ nla_put_failure: | |||
571 | nlmsg_failure: | 571 | nlmsg_failure: |
572 | kfree_skb(skb); | 572 | kfree_skb(skb); |
573 | errout: | 573 | errout: |
574 | nfnetlink_set_err(0, group, -ENOBUFS); | 574 | if (nfnetlink_set_err(0, group, -ENOBUFS) > 0) |
575 | return -ENOBUFS; | ||
575 | return 0; | 576 | return 0; |
576 | } | 577 | } |
577 | #endif /* CONFIG_NF_CONNTRACK_EVENTS */ | 578 | #endif /* CONFIG_NF_CONNTRACK_EVENTS */ |
diff --git a/net/netfilter/nfnetlink.c b/net/netfilter/nfnetlink.c index eedc0c1ac7a4..35fe185316e7 100644 --- a/net/netfilter/nfnetlink.c +++ b/net/netfilter/nfnetlink.c | |||
@@ -114,9 +114,9 @@ int nfnetlink_send(struct sk_buff *skb, u32 pid, | |||
114 | } | 114 | } |
115 | EXPORT_SYMBOL_GPL(nfnetlink_send); | 115 | EXPORT_SYMBOL_GPL(nfnetlink_send); |
116 | 116 | ||
117 | void nfnetlink_set_err(u32 pid, u32 group, int error) | 117 | int nfnetlink_set_err(u32 pid, u32 group, int error) |
118 | { | 118 | { |
119 | netlink_set_err(nfnl, pid, group, error); | 119 | return netlink_set_err(nfnl, pid, group, error); |
120 | } | 120 | } |
121 | EXPORT_SYMBOL_GPL(nfnetlink_set_err); | 121 | EXPORT_SYMBOL_GPL(nfnetlink_set_err); |
122 | 122 | ||