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_route.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_route.c')
-rw-r--r-- | net/decnet/dn_route.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/net/decnet/dn_route.c b/net/decnet/dn_route.c index 1e7b5c3ea215..2399fa8a3f86 100644 --- a/net/decnet/dn_route.c +++ b/net/decnet/dn_route.c | |||
@@ -1465,7 +1465,8 @@ int dn_route_input(struct sk_buff *skb) | |||
1465 | return dn_route_input_slow(skb); | 1465 | return dn_route_input_slow(skb); |
1466 | } | 1466 | } |
1467 | 1467 | ||
1468 | static int dn_rt_fill_info(struct sk_buff *skb, u32 pid, u32 seq, int event, int nowait) | 1468 | static int dn_rt_fill_info(struct sk_buff *skb, u32 pid, u32 seq, |
1469 | int event, int nowait, unsigned int flags) | ||
1469 | { | 1470 | { |
1470 | struct dn_route *rt = (struct dn_route *)skb->dst; | 1471 | struct dn_route *rt = (struct dn_route *)skb->dst; |
1471 | struct rtmsg *r; | 1472 | struct rtmsg *r; |
@@ -1473,9 +1474,8 @@ static int dn_rt_fill_info(struct sk_buff *skb, u32 pid, u32 seq, int event, int | |||
1473 | unsigned char *b = skb->tail; | 1474 | unsigned char *b = skb->tail; |
1474 | struct rta_cacheinfo ci; | 1475 | struct rta_cacheinfo ci; |
1475 | 1476 | ||
1476 | nlh = NLMSG_PUT(skb, pid, seq, event, sizeof(*r)); | 1477 | nlh = NLMSG_NEW(skb, pid, seq, event, sizeof(*r), flags); |
1477 | r = NLMSG_DATA(nlh); | 1478 | r = NLMSG_DATA(nlh); |
1478 | nlh->nlmsg_flags = (nowait && pid) ? NLM_F_MULTI : 0; | ||
1479 | r->rtm_family = AF_DECnet; | 1479 | r->rtm_family = AF_DECnet; |
1480 | r->rtm_dst_len = 16; | 1480 | r->rtm_dst_len = 16; |
1481 | r->rtm_src_len = 0; | 1481 | r->rtm_src_len = 0; |
@@ -1596,7 +1596,7 @@ int dn_cache_getroute(struct sk_buff *in_skb, struct nlmsghdr *nlh, void *arg) | |||
1596 | 1596 | ||
1597 | NETLINK_CB(skb).dst_pid = NETLINK_CB(in_skb).pid; | 1597 | NETLINK_CB(skb).dst_pid = NETLINK_CB(in_skb).pid; |
1598 | 1598 | ||
1599 | err = dn_rt_fill_info(skb, NETLINK_CB(in_skb).pid, nlh->nlmsg_seq, RTM_NEWROUTE, 0); | 1599 | err = dn_rt_fill_info(skb, NETLINK_CB(in_skb).pid, nlh->nlmsg_seq, RTM_NEWROUTE, 0, 0); |
1600 | 1600 | ||
1601 | if (err == 0) | 1601 | if (err == 0) |
1602 | goto out_free; | 1602 | goto out_free; |
@@ -1644,7 +1644,8 @@ int dn_cache_dump(struct sk_buff *skb, struct netlink_callback *cb) | |||
1644 | continue; | 1644 | continue; |
1645 | skb->dst = dst_clone(&rt->u.dst); | 1645 | skb->dst = dst_clone(&rt->u.dst); |
1646 | if (dn_rt_fill_info(skb, NETLINK_CB(cb->skb).pid, | 1646 | if (dn_rt_fill_info(skb, NETLINK_CB(cb->skb).pid, |
1647 | cb->nlh->nlmsg_seq, RTM_NEWROUTE, 1) <= 0) { | 1647 | cb->nlh->nlmsg_seq, RTM_NEWROUTE, |
1648 | 1, NLM_F_MULTI) <= 0) { | ||
1648 | dst_release(xchg(&skb->dst, NULL)); | 1649 | dst_release(xchg(&skb->dst, NULL)); |
1649 | rcu_read_unlock_bh(); | 1650 | rcu_read_unlock_bh(); |
1650 | goto done; | 1651 | goto done; |