diff options
Diffstat (limited to 'net/ipv4/fib_rules.c')
-rw-r--r-- | net/ipv4/fib_rules.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/net/ipv4/fib_rules.c b/net/ipv4/fib_rules.c index 6c642d11d4ca..79b04718bdfd 100644 --- a/net/ipv4/fib_rules.c +++ b/net/ipv4/fib_rules.c | |||
@@ -196,10 +196,9 @@ int inet_rtm_newrule(struct sk_buff *skb, struct nlmsghdr* nlh, void *arg) | |||
196 | } | 196 | } |
197 | } | 197 | } |
198 | 198 | ||
199 | new_r = kmalloc(sizeof(*new_r), GFP_KERNEL); | 199 | new_r = kzalloc(sizeof(*new_r), GFP_KERNEL); |
200 | if (!new_r) | 200 | if (!new_r) |
201 | return -ENOMEM; | 201 | return -ENOMEM; |
202 | memset(new_r, 0, sizeof(*new_r)); | ||
203 | 202 | ||
204 | if (rta[RTA_SRC-1]) | 203 | if (rta[RTA_SRC-1]) |
205 | memcpy(&new_r->r_src, RTA_DATA(rta[RTA_SRC-1]), 4); | 204 | memcpy(&new_r->r_src, RTA_DATA(rta[RTA_SRC-1]), 4); |
@@ -457,13 +456,13 @@ int inet_dump_rules(struct sk_buff *skb, struct netlink_callback *cb) | |||
457 | 456 | ||
458 | rcu_read_lock(); | 457 | rcu_read_lock(); |
459 | hlist_for_each_entry(r, node, &fib_rules, hlist) { | 458 | hlist_for_each_entry(r, node, &fib_rules, hlist) { |
460 | |||
461 | if (idx < s_idx) | 459 | if (idx < s_idx) |
462 | continue; | 460 | goto next; |
463 | if (inet_fill_rule(skb, r, NETLINK_CB(cb->skb).pid, | 461 | if (inet_fill_rule(skb, r, NETLINK_CB(cb->skb).pid, |
464 | cb->nlh->nlmsg_seq, | 462 | cb->nlh->nlmsg_seq, |
465 | RTM_NEWRULE, NLM_F_MULTI) < 0) | 463 | RTM_NEWRULE, NLM_F_MULTI) < 0) |
466 | break; | 464 | break; |
465 | next: | ||
467 | idx++; | 466 | idx++; |
468 | } | 467 | } |
469 | rcu_read_unlock(); | 468 | rcu_read_unlock(); |