summaryrefslogtreecommitdiff
path: root/net.c
diff options
context:
space:
mode:
authorDmitry V. Levin <ldv@altlinux.org>2017-11-16 00:12:46 +0000
committerDmitry V. Levin <ldv@altlinux.org>2017-11-16 00:12:46 +0000
commit8a7030f20a79dd8368defb03fd8b74aff210ac1d (patch)
tree85cd9cbd96d03bec36e6b01b1a66f730918f030f /net.c
parent15f502c78a76d86ae23d727d01fe9c8f8d53f962 (diff)
downloadstrace-8a7030f20a79dd8368defb03fd8b74aff210ac1d.tar.gz
net: fix decoding of optval argument of [gs]etsockopt SOL_NETLINK
Tweak the parser to follow the kernel behaviour. * net.c (print_getsockopt, print_setsockopt) <SOL_NETLINK>: Fetch and print returned value as integer iff the length is >= sizeof(int), otherwise print the address. * NEWS: Mention this.
Diffstat (limited to 'net.c')
-rw-r--r--net.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/net.c b/net.c
index f3c6f6b81..3e355e388 100644
--- a/net.c
+++ b/net.c
@@ -601,6 +601,13 @@ print_getsockopt(struct tcb *const tcp, const unsigned int level,
return;
}
break;
+
+ case SOL_NETLINK:
+ if (len < (int) sizeof(int))
+ printaddr(addr); /* unlikely */
+ else
+ printnum_int(tcp, addr, "%d");
+ return;
}
/* default arg printing */
@@ -825,6 +832,13 @@ print_setsockopt(struct tcb *const tcp, const unsigned int level,
return;
}
break;
+
+ case SOL_NETLINK:
+ if (len < (int) sizeof(int))
+ printaddr(addr);
+ else
+ printnum_int(tcp, addr, "%d");
+ return;
}
/* default arg printing */