diff options
author | Jozsef Kadlecsik <kadlec@blackhole.kfki.hu> | 2011-01-26 22:37:11 +0100 |
---|---|---|
committer | Jozsef Kadlecsik <kadlec@blackhole.kfki.hu> | 2011-01-26 22:37:11 +0100 |
commit | 8271afcab2f219158ec5d63f6b625cd64dcc98a8 (patch) | |
tree | 959efb9a0ec4c103f4456d048aa3d00ca0bf53f5 | |
parent | fa7f70f8042c5fd8b64821cbfd66fdea5c1a2a67 (diff) |
Send (N)ACK at dumping only when NLM_F_ACK is set
Missing check of the flag NLM_F_ACK is added to the kernel -
and userspace does set it too (Patrick McHardy's review)
-rw-r--r-- | kernel/ip_set_core.c | 4 | ||||
-rw-r--r-- | lib/mnl.c | 4 |
2 files changed, 5 insertions, 3 deletions
diff --git a/kernel/ip_set_core.c b/kernel/ip_set_core.c index 023813b..3071d3f 100644 --- a/kernel/ip_set_core.c +++ b/kernel/ip_set_core.c @@ -973,9 +973,11 @@ ip_set_dump_start(struct sk_buff *skb, struct netlink_callback *cb) if (cb->args[0] == DUMP_INIT) { ret = dump_init(cb); if (ret < 0) { + struct nlmsghdr *nlh = nlmsg_hdr(cb->skb); /* We have to create and send the error message * manually :-( */ - netlink_ack(cb->skb, nlmsg_hdr(cb->skb), ret); + if (nlh->nlmsg_flags & NLM_F_ACK) + netlink_ack(cb->skb, nlh, ret); return ret; } } @@ -37,8 +37,8 @@ static const uint16_t cmdflags[] = { [IPSET_CMD_FLUSH-1] = NLM_F_REQUEST|NLM_F_ACK, [IPSET_CMD_RENAME-1] = NLM_F_REQUEST|NLM_F_ACK, [IPSET_CMD_SWAP-1] = NLM_F_REQUEST|NLM_F_ACK, - [IPSET_CMD_LIST-1] = NLM_F_REQUEST|NLM_F_ROOT|NLM_F_MATCH|NLM_F_DUMP, - [IPSET_CMD_SAVE-1] = NLM_F_REQUEST|NLM_F_ROOT|NLM_F_MATCH|NLM_F_DUMP, + [IPSET_CMD_LIST-1] = NLM_F_REQUEST|NLM_F_ACK|NLM_F_ROOT|NLM_F_MATCH|NLM_F_DUMP, + [IPSET_CMD_SAVE-1] = NLM_F_REQUEST|NLM_F_ACK|NLM_F_ROOT|NLM_F_MATCH|NLM_F_DUMP, [IPSET_CMD_ADD-1] = NLM_F_REQUEST|NLM_F_ACK|NLM_F_EXCL, [IPSET_CMD_DEL-1] = NLM_F_REQUEST|NLM_F_ACK|NLM_F_EXCL, [IPSET_CMD_TEST-1] = NLM_F_REQUEST|NLM_F_ACK, |