]> granicus.if.org Git - ipset/commitdiff
Report broken netlink messages in debug mode
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Fri, 19 Jul 2013 19:54:02 +0000 (21:54 +0200)
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>
Fri, 19 Jul 2013 19:54:02 +0000 (21:54 +0200)
lib/debug.c

index 1350053db10d338c346ccbafa8d2872ad2a1460e..3aa5a99c0dc9f4315089edbfa6fb9580b1c67ae6 100644 (file)
@@ -236,6 +236,19 @@ ipset_debug_msg(const char *dir, void *buffer, int len)
        int cmd, nfmsglen = MNL_ALIGN(sizeof(struct nfgenmsg));
 
        debug = 0;
+       if (!mnl_nlmsg_ok(nlh, len)) {
+               fprintf(stderr, "Broken message received!\n");
+               if (len < (int)sizeof(struct nlmsghdr)) {
+                       fprintf(stderr, "len (%d) < sizeof(struct nlmsghdr) (%d)\n",
+                               len, (int)sizeof(struct nlmsghdr));
+               } else if (nlh->nlmsg_len < sizeof(struct nlmsghdr)) {
+                       fprintf(stderr, "nlmsg_len (%u) < sizeof(struct nlmsghdr) (%d)\n",
+                               nlh->nlmsg_len, (int)sizeof(struct nlmsghdr));
+               } else if ((int)nlh->nlmsg_len > len) {
+                       fprintf(stderr, "nlmsg_len (%u) > len (%d)\n",
+                                nlh->nlmsg_len, len);
+               }
+       }
        while (mnl_nlmsg_ok(nlh, len)) {
                switch (nlh->nlmsg_type) {
                case NLMSG_NOOP: