diff options
author | Jozsef Kadlecsik <kadlec@blackhole.kfki.hu> | 2011-01-26 22:59:25 +0100 |
---|---|---|
committer | Jozsef Kadlecsik <kadlec@blackhole.kfki.hu> | 2011-01-26 22:59:25 +0100 |
commit | 36c7d241b6486d1ce3c4dd1c8a1fa42e870c3355 (patch) | |
tree | a81273b38044ee08d181284227063a49d09379ed | |
parent | 8271afcab2f219158ec5d63f6b625cd64dcc98a8 (diff) |
Constified attribute cannot be written
Attribute is const so a little bit more work is needed to return
the error line number. A test is also added in order to check
the functionality. (Patrick McHardy's review)
-rw-r--r-- | kernel/ip_set_core.c | 12 | ||||
-rw-r--r-- | tests/ipmap.t | 2 |
2 files changed, 13 insertions, 1 deletions
diff --git a/kernel/ip_set_core.c b/kernel/ip_set_core.c index 3071d3f..3dad957 100644 --- a/kernel/ip_set_core.c +++ b/kernel/ip_set_core.c @@ -1118,7 +1118,17 @@ call_ad(struct sk_buff *skb, const struct nlattr *const attr[], return 0; if (lineno && attr[IPSET_ATTR_LINENO]) { /* Error in restore/batch mode: send back lineno */ - u32 *errline = nla_data(attr[IPSET_ATTR_LINENO]); + struct nlmsghdr *nlh = nlmsg_hdr(skb); + int min_len = NLMSG_SPACE(sizeof(struct nfgenmsg)); + struct nlattr *cda[IPSET_ATTR_CMD_MAX+1]; + struct nlattr *cmdattr = (void *)nlh + min_len; + u32 *errline; + + nla_parse(cda, IPSET_ATTR_CMD_MAX, + cmdattr, nlh->nlmsg_len - min_len, + ip_set_adt_policy); + + errline = nla_data(cda[IPSET_ATTR_LINENO]); *errline = lineno; } diff --git a/tests/ipmap.t b/tests/ipmap.t index f6dd367..af6e36b 100644 --- a/tests/ipmap.t +++ b/tests/ipmap.t @@ -42,6 +42,8 @@ 0 ipset -X test # Range: Restore set and catch error 1 sed 's/2.0.0.131/222.0.0.131/' < ipmap.t.restore | ipset -R +# Range: Check returned error line number +0 num=`sed 's/.* in line //' < .foo.err | cut -d : -f 1` && test $num -eq 6 # Range: Destroy set 0 ipset -X test # Range: Restore set |