From 34788f7894c573ad4c926e19b0d363e3f0dbb5ca Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Fri, 30 Dec 2011 20:32:26 +0100 Subject: [PATCH] --- yaml --- r: 279153 b: refs/heads/master c: 3ab0b245aa550ea4670d096092ca8e8d5e14ac89 h: refs/heads/master i: 279151: f2ced1ccf463476ea3a8f4beac0427e2788ae253 v: v3 --- [refs] | 2 +- trunk/net/netfilter/nfnetlink_acct.c | 17 +++++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index bd4c1c64bbfc..343182f985c7 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b236916a68d923acff15787b5439d7d684c17ae5 +refs/heads/master: 3ab0b245aa550ea4670d096092ca8e8d5e14ac89 diff --git a/trunk/net/netfilter/nfnetlink_acct.c b/trunk/net/netfilter/nfnetlink_acct.c index 362ab6ca3dc1..11ba013e47f6 100644 --- a/trunk/net/netfilter/nfnetlink_acct.c +++ b/trunk/net/netfilter/nfnetlink_acct.c @@ -166,7 +166,7 @@ static int nfnl_acct_get(struct sock *nfnl, struct sk_buff *skb, const struct nlmsghdr *nlh, const struct nlattr * const tb[]) { - int ret = 0; + int ret = -ENOENT; struct nf_acct *cur; char *acct_name; @@ -186,17 +186,26 @@ nfnl_acct_get(struct sock *nfnl, struct sk_buff *skb, continue; skb2 = nlmsg_new(NLMSG_DEFAULT_SIZE, GFP_KERNEL); - if (skb2 == NULL) + if (skb2 == NULL) { + ret = -ENOMEM; break; + } ret = nfnl_acct_fill_info(skb2, NETLINK_CB(skb).pid, nlh->nlmsg_seq, NFNL_MSG_TYPE(nlh->nlmsg_type), NFNL_MSG_ACCT_NEW, cur); - if (ret <= 0) + if (ret <= 0) { kfree_skb(skb2); + break; + } + ret = netlink_unicast(nfnl, skb2, NETLINK_CB(skb).pid, + MSG_DONTWAIT); + if (ret > 0) + ret = 0; - break; + /* this avoids a loop in nfnetlink. */ + return ret == -EAGAIN ? -ENOBUFS : ret; } return ret; }