diff options
Diffstat (limited to 'net/decnet/dn_fib.c')
-rw-r--r-- | net/decnet/dn_fib.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/net/decnet/dn_fib.c b/net/decnet/dn_fib.c index 7b3bf5c3d720..fb596373daa8 100644 --- a/net/decnet/dn_fib.c +++ b/net/decnet/dn_fib.c | |||
@@ -491,7 +491,8 @@ static int dn_fib_check_attr(struct rtmsg *r, struct rtattr **rta) | |||
491 | if (attr) { | 491 | if (attr) { |
492 | if (RTA_PAYLOAD(attr) < 4 && RTA_PAYLOAD(attr) != 2) | 492 | if (RTA_PAYLOAD(attr) < 4 && RTA_PAYLOAD(attr) != 2) |
493 | return -EINVAL; | 493 | return -EINVAL; |
494 | if (i != RTA_MULTIPATH && i != RTA_METRICS) | 494 | if (i != RTA_MULTIPATH && i != RTA_METRICS && |
495 | i != RTA_TABLE) | ||
495 | rta[i-1] = (struct rtattr *)RTA_DATA(attr); | 496 | rta[i-1] = (struct rtattr *)RTA_DATA(attr); |
496 | } | 497 | } |
497 | } | 498 | } |
@@ -508,7 +509,7 @@ int dn_fib_rtm_delroute(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) | |||
508 | if (dn_fib_check_attr(r, rta)) | 509 | if (dn_fib_check_attr(r, rta)) |
509 | return -EINVAL; | 510 | return -EINVAL; |
510 | 511 | ||
511 | tb = dn_fib_get_table(r->rtm_table, 0); | 512 | tb = dn_fib_get_table(rtm_get_table(rta, r->rtm_table), 0); |
512 | if (tb) | 513 | if (tb) |
513 | return tb->delete(tb, r, (struct dn_kern_rta *)rta, nlh, &NETLINK_CB(skb)); | 514 | return tb->delete(tb, r, (struct dn_kern_rta *)rta, nlh, &NETLINK_CB(skb)); |
514 | 515 | ||
@@ -524,7 +525,7 @@ int dn_fib_rtm_newroute(struct sk_buff *skb, struct nlmsghdr *nlh, void *arg) | |||
524 | if (dn_fib_check_attr(r, rta)) | 525 | if (dn_fib_check_attr(r, rta)) |
525 | return -EINVAL; | 526 | return -EINVAL; |
526 | 527 | ||
527 | tb = dn_fib_get_table(r->rtm_table, 1); | 528 | tb = dn_fib_get_table(rtm_get_table(rta, r->rtm_table), 1); |
528 | if (tb) | 529 | if (tb) |
529 | return tb->insert(tb, r, (struct dn_kern_rta *)rta, nlh, &NETLINK_CB(skb)); | 530 | return tb->insert(tb, r, (struct dn_kern_rta *)rta, nlh, &NETLINK_CB(skb)); |
530 | 531 | ||