diff options
author | Jamal Hadi Salim <hadi@cyberus.ca> | 2005-06-19 01:54:12 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-06-19 01:54:12 -0400 |
commit | b6544c0b4cf2bd96195f3cdb7cebfb35090fc557 (patch) | |
tree | 717f69a0c204b12eeedb8035fb66c8e9bb2d5a09 /net/decnet/dn_rules.c | |
parent | 1797754ea7ee5e0d859b0a32506ff999f8d5fb71 (diff) |
[NETLINK]: Correctly set NLM_F_MULTI without checking the pid
This patch rectifies some rtnetlink message builders that derive the
flags from the pid. It is now explicit like the other cases
which get it right. Also fixes half a dozen dumpers which did not
set NLM_F_MULTI at all.
Signed-off-by: Jamal Hadi Salim <hadi@cyberus.ca>
Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/decnet/dn_rules.c')
-rw-r--r-- | net/decnet/dn_rules.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/net/decnet/dn_rules.c b/net/decnet/dn_rules.c index 597587d170d8..1060de70bc0c 100644 --- a/net/decnet/dn_rules.c +++ b/net/decnet/dn_rules.c | |||
@@ -342,14 +342,15 @@ static struct notifier_block dn_fib_rules_notifier = { | |||
342 | .notifier_call = dn_fib_rules_event, | 342 | .notifier_call = dn_fib_rules_event, |
343 | }; | 343 | }; |
344 | 344 | ||
345 | static int dn_fib_fill_rule(struct sk_buff *skb, struct dn_fib_rule *r, struct netlink_callback *cb) | 345 | static int dn_fib_fill_rule(struct sk_buff *skb, struct dn_fib_rule *r, |
346 | struct netlink_callback *cb, unsigned int flags) | ||
346 | { | 347 | { |
347 | struct rtmsg *rtm; | 348 | struct rtmsg *rtm; |
348 | struct nlmsghdr *nlh; | 349 | struct nlmsghdr *nlh; |
349 | unsigned char *b = skb->tail; | 350 | unsigned char *b = skb->tail; |
350 | 351 | ||
351 | 352 | ||
352 | nlh = NLMSG_PUT(skb, NETLINK_CREDS(cb->skb)->pid, cb->nlh->nlmsg_seq, RTM_NEWRULE, sizeof(*rtm)); | 353 | nlh = NLMSG_NEW_ANSWER(skb, cb, RTM_NEWRULE, sizeof(*rtm), flags); |
353 | rtm = NLMSG_DATA(nlh); | 354 | rtm = NLMSG_DATA(nlh); |
354 | rtm->rtm_family = AF_DECnet; | 355 | rtm->rtm_family = AF_DECnet; |
355 | rtm->rtm_dst_len = r->r_dst_len; | 356 | rtm->rtm_dst_len = r->r_dst_len; |
@@ -394,7 +395,7 @@ int dn_fib_dump_rules(struct sk_buff *skb, struct netlink_callback *cb) | |||
394 | for(r = dn_fib_rules, idx = 0; r; r = r->r_next, idx++) { | 395 | for(r = dn_fib_rules, idx = 0; r; r = r->r_next, idx++) { |
395 | if (idx < s_idx) | 396 | if (idx < s_idx) |
396 | continue; | 397 | continue; |
397 | if (dn_fib_fill_rule(skb, r, cb) < 0) | 398 | if (dn_fib_fill_rule(skb, r, cb, NLM_F_MULTI) < 0) |
398 | break; | 399 | break; |
399 | } | 400 | } |
400 | read_unlock(&dn_fib_rules_lock); | 401 | read_unlock(&dn_fib_rules_lock); |