diff options
-rw-r--r-- | include/linux/rtnetlink.h | 8 | ||||
-rw-r--r-- | net/core/rtnetlink.c | 8 |
2 files changed, 9 insertions, 7 deletions
diff --git a/include/linux/rtnetlink.h b/include/linux/rtnetlink.h index 6731e7f4cc0f..c91476ce314a 100644 --- a/include/linux/rtnetlink.h +++ b/include/linux/rtnetlink.h | |||
@@ -570,12 +570,16 @@ static __inline__ int rtattr_strcmp(const struct rtattr *rta, const char *str) | |||
570 | } | 570 | } |
571 | 571 | ||
572 | extern int rtattr_parse(struct rtattr *tb[], int maxattr, struct rtattr *rta, int len); | 572 | extern int rtattr_parse(struct rtattr *tb[], int maxattr, struct rtattr *rta, int len); |
573 | extern int rtattr_parse_nested_compat(struct rtattr *tb[], int maxattr, | 573 | extern int __rtattr_parse_nested_compat(struct rtattr *tb[], int maxattr, |
574 | struct rtattr *rta, void **data, int len); | 574 | struct rtattr *rta, int len); |
575 | 575 | ||
576 | #define rtattr_parse_nested(tb, max, rta) \ | 576 | #define rtattr_parse_nested(tb, max, rta) \ |
577 | rtattr_parse((tb), (max), RTA_DATA((rta)), RTA_PAYLOAD((rta))) | 577 | rtattr_parse((tb), (max), RTA_DATA((rta)), RTA_PAYLOAD((rta))) |
578 | 578 | ||
579 | #define rtattr_parse_nested_compat(tb, max, rta, data, len) \ | ||
580 | ({ data = RTA_PAYLOAD(rta) >= len ? RTA_DATA(rta) : NULL; \ | ||
581 | __rtattr_parse_nested_compat(tb, max, rta, len); }) | ||
582 | |||
579 | extern int rtnetlink_send(struct sk_buff *skb, u32 pid, u32 group, int echo); | 583 | extern int rtnetlink_send(struct sk_buff *skb, u32 pid, u32 group, int echo); |
580 | extern int rtnl_unicast(struct sk_buff *skb, u32 pid); | 584 | extern int rtnl_unicast(struct sk_buff *skb, u32 pid); |
581 | extern int rtnl_notify(struct sk_buff *skb, u32 pid, u32 group, | 585 | extern int rtnl_notify(struct sk_buff *skb, u32 pid, u32 group, |
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index c25d23ba6d5d..54c17e4cd28f 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c | |||
@@ -97,13 +97,11 @@ int rtattr_parse(struct rtattr *tb[], int maxattr, struct rtattr *rta, int len) | |||
97 | return 0; | 97 | return 0; |
98 | } | 98 | } |
99 | 99 | ||
100 | int rtattr_parse_nested_compat(struct rtattr *tb[], int maxattr, | 100 | int __rtattr_parse_nested_compat(struct rtattr *tb[], int maxattr, |
101 | struct rtattr *rta, void **data, int len) | 101 | struct rtattr *rta, int len) |
102 | { | 102 | { |
103 | if (RTA_PAYLOAD(rta) < len) | 103 | if (RTA_PAYLOAD(rta) < len) |
104 | return -1; | 104 | return -1; |
105 | *data = RTA_DATA(rta); | ||
106 | |||
107 | if (RTA_PAYLOAD(rta) >= RTA_ALIGN(len) + sizeof(struct rtattr)) { | 105 | if (RTA_PAYLOAD(rta) >= RTA_ALIGN(len) + sizeof(struct rtattr)) { |
108 | rta = RTA_DATA(rta) + RTA_ALIGN(len); | 106 | rta = RTA_DATA(rta) + RTA_ALIGN(len); |
109 | return rtattr_parse_nested(tb, maxattr, rta); | 107 | return rtattr_parse_nested(tb, maxattr, rta); |
@@ -1312,7 +1310,7 @@ void __init rtnetlink_init(void) | |||
1312 | EXPORT_SYMBOL(__rta_fill); | 1310 | EXPORT_SYMBOL(__rta_fill); |
1313 | EXPORT_SYMBOL(rtattr_strlcpy); | 1311 | EXPORT_SYMBOL(rtattr_strlcpy); |
1314 | EXPORT_SYMBOL(rtattr_parse); | 1312 | EXPORT_SYMBOL(rtattr_parse); |
1315 | EXPORT_SYMBOL(rtattr_parse_nested_compat); | 1313 | EXPORT_SYMBOL(__rtattr_parse_nested_compat); |
1316 | EXPORT_SYMBOL(rtnetlink_put_metrics); | 1314 | EXPORT_SYMBOL(rtnetlink_put_metrics); |
1317 | EXPORT_SYMBOL(rtnl_lock); | 1315 | EXPORT_SYMBOL(rtnl_lock); |
1318 | EXPORT_SYMBOL(rtnl_trylock); | 1316 | EXPORT_SYMBOL(rtnl_trylock); |