From 692dbd2c3d2052025e3d4b121d94689f24458651 Mon Sep 17 00:00:00 2001 From: Masatake YAMATO Date: Tue, 18 Dec 2018 04:16:11 +0900 Subject: [PATCH 146/293] net: enhance decoding of getsockopt(SO_ERROR) * net.c (print_get_error): New function decoding error number returned as option value for SO_ERROR option. (print_getsockopt) : Call print_get_error. * tests/so_error.c: New test. * tests/gen_tests.in (so_error): Likewise. * tests/pure_executables.list: Add so_error. Signed-off-by: Masatake YAMATO Signed-off-by: Dmitry V. Levin --- net.c | 20 +++++++++ 1 files changed, 20 insertions(+) diff --git a/net.c b/net.c index 3058e2d..bcab329 100644 --- a/net.c +++ b/net.c @@ -651,6 +651,23 @@ print_get_ucred(struct tcb *const tcp, const kernel_ulong_t addr, tprints("}"); } +static void +print_get_error(struct tcb *const tcp, const kernel_ulong_t addr, + unsigned int len) +{ + unsigned int err; + + if (len > sizeof(err)) + err = sizeof(err); + + if (umoven_or_printaddr(tcp, addr, len, &err)) + return; + + tprints("["); + print_xlat_ex(err, err_name(err), XLAT_STYLE_FMT_U); + tprints("]"); +} + #ifdef PACKET_STATISTICS static void print_tpacket_stats(struct tcb *const tcp, const kernel_ulong_t addr, @@ -766,6 +783,9 @@ print_getsockopt(struct tcb *const tcp, const unsigned int level, else printaddr(addr); return; + case SO_ERROR: + print_get_error(tcp, addr, rlen); + return; } break; -- 1.7.12.4