From 6b0e119ae85aad5f2582159fe68e91adb4b02dbd Mon Sep 17 00:00:00 2001 From: Vadim Kochan Date: Sun, 15 Nov 2015 10:02:02 +0200 Subject: netsniff-ng: nlmsg: Check message length before dissect rtnl Do not print rtnl message if there is only nlmsg header, which is happen when dump all rtnl table. Signed-off-by: Vadim Kochan Signed-off-by: Tobias Klauser --- proto_nlmsg.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/proto_nlmsg.c b/proto_nlmsg.c index 93c52b9..c9238c8 100644 --- a/proto_nlmsg.c +++ b/proto_nlmsg.c @@ -293,6 +293,9 @@ static void rtnl_print_ifinfo(struct nlmsghdr *hdr) char if_addr[64] = {}; char *af_link = "unknown"; + if (hdr->nlmsg_len < NLMSG_LENGTH(sizeof(*ifi))) + return; + if (ifi->ifi_family == AF_UNSPEC) af_link = "unspec"; else if (ifi->ifi_family == AF_BRIDGE) @@ -398,6 +401,9 @@ static void rtnl_print_ifaddr(struct nlmsghdr *hdr) char addr_str[256]; char flags[256]; + if (hdr->nlmsg_len < NLMSG_LENGTH(sizeof(*ifa))) + return; + tprintf(" [ Address Family %d (%s%s%s)", ifa->ifa_family, colorize_start(bold), addr_family2str(ifa->ifa_family), @@ -555,6 +561,9 @@ static void rtnl_print_route(struct nlmsghdr *hdr) char addr_str[256]; char flags[256]; + if (hdr->nlmsg_len < NLMSG_LENGTH(sizeof(*rtm))) + return; + tprintf(" [ Route Family %d (%s%s%s)", rtm->rtm_family, colorize_start(bold), addr_family2str(rtm->rtm_family), @@ -698,6 +707,9 @@ static void rtnl_print_neigh(struct nlmsghdr *hdr) char states[256]; char flags[256]; + if (hdr->nlmsg_len < NLMSG_LENGTH(sizeof(*ndm))) + return; + tprintf(" [ Neigh Family %d (%s%s%s)", ndm->ndm_family, colorize_start(bold), addr_family2str(ndm->ndm_family), -- cgit v1.2.3-54-g00ecf