From 8a7030f20a79dd8368defb03fd8b74aff210ac1d Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" <ldv@altlinux.org> Date: Thu, 16 Nov 2017 00:12:46 +0000 Subject: [PATCH] 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. --- NEWS | 4 ++-- net.c | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/NEWS b/NEWS index 078449ca..87b85c7d 100644 --- a/NEWS +++ b/NEWS @@ -3,8 +3,8 @@ Noteworthy changes in release ?.?? (????-??-??) * Improvements * Implemented decoding of netlink descriptor attributes as file descriptors. - * Implemented decoding of option name argument of getsockopt and setsockopt - syscalls for SOL_NETLINK level. + * Enhanced decoding of getsockopt and setsockopt syscalls for SOL_NETLINK + level. * Updated the list of MSG_* constants. Noteworthy changes in release 4.20 (2017-11-13) diff --git a/net.c b/net.c index f3c6f6b8..3e355e38 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 */ -- 2.40.0