summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Syromyatnikov <evgsyr@gmail.com>2021-12-12 22:39:27 +0100
committerEugene Syromyatnikov <evgsyr@gmail.com>2021-12-13 13:23:54 +0100
commit44fd312d428f741c93064dfe8572d86ca26ee326 (patch)
tree5e135b333cc6b067cf0d02626b1505dc86e1cbee
parent1310410e96c3cdaf8bdaa0200c9e898ee47b716d (diff)
downloadstrace-44fd312d428f741c93064dfe8572d86ca26ee326.tar.gz
net: decode smaller len sizes than sizeof(struct linger)
-rw-r--r--src/net.c17
1 files changed, 8 insertions, 9 deletions
diff --git a/src/net.c b/src/net.c
index 7353896ed..c0da5034e 100644
--- a/src/net.c
+++ b/src/net.c
@@ -1439,15 +1439,14 @@ print_set_linger(struct tcb *const tcp, const kernel_ulong_t addr,
{
struct linger linger;
- if (len < (int) sizeof(linger)) {
- printaddr(addr);
- } else if (!umove_or_printaddr(tcp, addr, &linger)) {
- tprint_struct_begin();
- PRINT_FIELD_D(linger, l_onoff);
- tprint_struct_next();
- PRINT_FIELD_D(linger, l_linger);
- tprint_struct_end();
- }
+ if (umoven_or_printaddr(tcp, addr, MIN(len, sizeof(linger)), &linger))
+ return;
+
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_begin(),
+ linger, l_onoff, PRINT_FIELD_D);
+ MAYBE_PRINT_FIELD_LEN(tprint_struct_next(),
+ linger, l_linger, PRINT_FIELD_D);
+ tprint_struct_end();
}
static void