From: Dmitry V. Levin Date: Fri, 24 Jun 2016 00:07:44 +0000 (+0000) Subject: net.c: fix printing AF_UNIX abstract socket addresses X-Git-Tag: v4.13~103 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0e09796e9539c9d8df9ad3575c1b09934d233a26;p=strace net.c: fix printing AF_UNIX abstract socket addresses AF_UNIX abstract socket address specified by sockaddr_un.sun_path is not a NUL-terminated string. * net.c (SIZEOF_SA_FAMILY): New macro. (print_sockaddr_data_un): Use it. Specify actual address length in print_quoted_string calls. Do not set QUOTE_0_TERMINATED flag when printing an abstract socket address. --- diff --git a/net.c b/net.c index a5d9ee44..fe8220a4 100644 --- a/net.c +++ b/net.c @@ -102,21 +102,23 @@ #include "xlat/af_packet_types.h" +#define SIZEOF_SA_FAMILY sizeof(((struct sockaddr *) 0)->sa_family) + static void print_sockaddr_data_un(const void *const buf, const int addrlen) { const struct sockaddr_un *const sa_un = buf; + const int un_len = addrlen > (int) sizeof(*sa_un) + ? (int) sizeof(*sa_un) : addrlen; + const int path_len = un_len - SIZEOF_SA_FAMILY; tprints("sun_path="); if (sa_un->sun_path[0]) { - print_quoted_string(sa_un->sun_path, - sizeof(sa_un->sun_path) + 1, + print_quoted_string(sa_un->sun_path, path_len + 1, QUOTE_0_TERMINATED); } else { tprints("@"); - print_quoted_string(sa_un->sun_path + 1, - sizeof(sa_un->sun_path), - QUOTE_0_TERMINATED); + print_quoted_string(sa_un->sun_path + 1, path_len - 1, 0); } }