]> granicus.if.org Git - strace/commitdiff
netlink: move NLMSG_ERROR payload length check to nlmsgerr decoder
authorDmitry V. Levin <ldv@altlinux.org>
Fri, 2 Jun 2017 22:22:22 +0000 (22:22 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Fri, 2 Jun 2017 22:22:22 +0000 (22:22 +0000)
Move decoder specific check to the decoder.

* netlink.c (decode_payload): Move NLMSG_ERROR payload length check ...
(decode_nlmsgerr): ... here.

netlink.c

index 10ca82c01a2967ed49b3d62f40fd3a578d697c1f..678343c8f05b171a94e04631abf561f229c1260f 100644 (file)
--- a/netlink.c
+++ b/netlink.c
@@ -83,6 +83,11 @@ decode_nlmsgerr(struct tcb *const tcp,
 {
        struct nlmsgerr err;
 
+       if (len < sizeof(err.error)) {
+               printstrn(tcp, addr, len);
+               return;
+       }
+
        if (umove_or_printaddr(tcp, addr, &err.error))
                return;
 
@@ -112,11 +117,12 @@ decode_payload(struct tcb *const tcp,
               const kernel_ulong_t addr,
               const kernel_ulong_t len)
 {
-       if (nlmsghdr->nlmsg_type == NLMSG_ERROR && len >= sizeof(int)) {
+       if (nlmsghdr->nlmsg_type == NLMSG_ERROR) {
                decode_nlmsgerr(tcp, addr, len);
-       } else {
-               printstrn(tcp, addr, len);
+               return;
        }
+
+       printstrn(tcp, addr, len);
 }
 
 static void