diff options
author | Dmitry V. Levin <ldv@altlinux.org> | 2017-11-16 00:12:46 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2017-11-16 00:12:46 +0000 |
commit | 8a7030f20a79dd8368defb03fd8b74aff210ac1d (patch) | |
tree | 85cd9cbd96d03bec36e6b01b1a66f730918f030f /net.c | |
parent | 15f502c78a76d86ae23d727d01fe9c8f8d53f962 (diff) | |
download | strace-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.c | 14 |
1 files changed, 14 insertions, 0 deletions
@@ -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 */ |