ip: fix crash in "ip neigh show"
parse_rtattr() was using tb[] array without initializing it. Based on patch by Balaji Punnuru <balaji_punnuru@cable.comcast.com> function old new delta parse_rtattr 85 107 +22 print_route 1630 1617 -13 print_linkinfo 807 794 -13 iproute_get 835 822 -13 print_rule 680 665 -15 ll_remember_index 263 248 -15 print_addrinfo 1223 1197 -26 ipaddr_list_or_flush 1253 1223 -30 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 1/7 up/down: 22/-125) Total: -103 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
@ -66,17 +66,21 @@ enum
|
||||
|
||||
/* nullifies tb on error */
|
||||
#define __parse_rtattr_nested_compat(tb, max, rta, len) \
|
||||
({if ((RTA_PAYLOAD(rta) >= len) && \
|
||||
(RTA_PAYLOAD(rta) >= RTA_ALIGN(len) + sizeof(struct rtattr))) { \
|
||||
rta = RTA_DATA(rta) + RTA_ALIGN(len); \
|
||||
parse_rtattr_nested(tb, max, rta); \
|
||||
} else \
|
||||
memset(tb, 0, sizeof(struct rtattr *) * (max + 1)); \
|
||||
})
|
||||
({ \
|
||||
if ((RTA_PAYLOAD(rta) >= len) \
|
||||
&& (RTA_PAYLOAD(rta) >= RTA_ALIGN(len) + sizeof(struct rtattr)) \
|
||||
) { \
|
||||
rta = RTA_DATA(rta) + RTA_ALIGN(len); \
|
||||
parse_rtattr_nested(tb, max, rta); \
|
||||
} else \
|
||||
memset(tb, 0, sizeof(struct rtattr *) * (max + 1)); \
|
||||
})
|
||||
|
||||
#define parse_rtattr_nested_compat(tb, max, rta, data, len) \
|
||||
({data = RTA_PAYLOAD(rta) >= len ? RTA_DATA(rta) : NULL; \
|
||||
__parse_rtattr_nested_compat(tb, max, rta, len); })
|
||||
({ \
|
||||
data = RTA_PAYLOAD(rta) >= len ? RTA_DATA(rta) : NULL; \
|
||||
__parse_rtattr_nested_compat(tb, max, rta, len); \
|
||||
})
|
||||
|
||||
#define show_details (0) /* not implemented. Does anyone need it? */
|
||||
#define use_iec (0) /* not currently documented in the upstream manpage */
|
||||
|
Reference in New Issue
Block a user