aboutsummaryrefslogtreecommitdiffstats
path: root/net/decnet/dn_fib.c
diff options
context:
space:
mode:
Diffstat (limited to 'net/decnet/dn_fib.c')
-rw-r--r--net/decnet/dn_fib.c7
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