diff options
author | Eugene Syromyatnikov <evgsyr@gmail.com> | 2021-12-12 22:39:27 +0100 |
---|---|---|
committer | Eugene Syromyatnikov <evgsyr@gmail.com> | 2021-12-13 13:23:54 +0100 |
commit | 44fd312d428f741c93064dfe8572d86ca26ee326 (patch) | |
tree | 5e135b333cc6b067cf0d02626b1505dc86e1cbee | |
parent | 1310410e96c3cdaf8bdaa0200c9e898ee47b716d (diff) | |
download | strace-44fd312d428f741c93064dfe8572d86ca26ee326.tar.gz |
net: decode smaller len sizes than sizeof(struct linger)
-rw-r--r-- | src/net.c | 17 |
1 files changed, 8 insertions, 9 deletions
@@ -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 |