From: Dmitry V. Levin Date: Wed, 22 Jun 2016 23:40:56 +0000 (+0000) Subject: net.c: skip details of too short socket addresses X-Git-Tag: v4.13~108 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f52753aad56ef89574e1aa864c5492b623be984f;p=strace net.c: skip details of too short socket addresses * net.c (print_sockaddr): Print socket address details only when the address size is greater than sizeof(struct sockaddr.sa_family). (print_sockaddr_data_un): Remove handling of addrlen == 2. * tests/net-y-unix.c (main): Update expected pattern. * tests/net-yy-unix.c (main): Likewise. * tests/net.expected: Likewise. --- diff --git a/net.c b/net.c index 517ed23c..6413c2c7 100644 --- a/net.c +++ b/net.c @@ -107,15 +107,13 @@ print_sockaddr_data_un(const void *const buf, const int addrlen) { const struct sockaddr_un *const sa_un = buf; - if (addrlen == 2) { - tprints("NULL"); - } else if (sa_un->sun_path[0]) { - tprints("sun_path="); + tprints("sun_path="); + if (sa_un->sun_path[0]) { print_quoted_string(sa_un->sun_path, sizeof(sa_un->sun_path) + 1, QUOTE_0_TERMINATED); } else { - tprints("sun_path=@"); + tprints("@"); print_quoted_string(sa_un->sun_path + 1, sizeof(sa_un->sun_path), QUOTE_0_TERMINATED); @@ -258,17 +256,20 @@ void print_sockaddr(struct tcb *tcp, const void *const buf, const int addrlen) { const struct sockaddr *const sa = buf; - const unsigned short family = sa->sa_family; tprints("{sa_family="); - printxval(addrfams, family, "AF_???"); - tprints(", "); + printxval(addrfams, sa->sa_family, "AF_???"); - if (family < ARRAY_SIZE(sa_printers) && sa_printers[family]) { - sa_printers[family](buf, addrlen); - } else { - tprints("sa_data="); - print_quoted_string(sa->sa_data, sizeof(sa->sa_data), 0); + if (addrlen > (int) sizeof(sa->sa_family)) { + tprints(", "); + + if (sa->sa_family < ARRAY_SIZE(sa_printers) + && sa_printers[sa->sa_family]) { + sa_printers[sa->sa_family](buf, addrlen); + } else { + tprints("sa_data="); + print_quoted_string(sa->sa_data, sizeof(sa->sa_data), 0); + } } tprints("}"); diff --git a/tests/net-y-unix.c b/tests/net-y-unix.c index 499ae8ea..cb22c438 100644 --- a/tests/net-y-unix.c +++ b/tests/net-y-unix.c @@ -107,7 +107,7 @@ main(int ac, const char **av) if (accept_fd < 0) perror_msg_and_fail("accept"); unsigned long accept_inode = inode_of_sockfd(accept_fd); - printf("accept(%d, {sa_family=AF_UNIX, NULL}" + printf("accept(%d, {sa_family=AF_UNIX}" ", [%u]) = %d\n", listen_fd, listen_inode, (unsigned) *len, accept_fd, accept_inode); diff --git a/tests/net-yy-unix.c b/tests/net-yy-unix.c index 78fc876d..7afdde1f 100644 --- a/tests/net-yy-unix.c +++ b/tests/net-yy-unix.c @@ -108,7 +108,7 @@ main(int ac, const char **av) if (accept_fd < 0) perror_msg_and_fail("accept"); unsigned long accept_inode = inode_of_sockfd(accept_fd); - printf("accept(%d, {sa_family=AF_UNIX, NULL}" + printf("accept(%d, {sa_family=AF_UNIX}" ", [%u]) = %d%lu,\"%s\"]>\n", listen_fd, listen_inode, av[1], (unsigned) *len, accept_fd, accept_inode, connect_inode, av[1]); diff --git a/tests/net.expected b/tests/net.expected index 03bb5c30..51d64a89 100644 --- a/tests/net.expected +++ b/tests/net.expected @@ -3,5 +3,5 @@ [1-9][0-9]* +[0-9]+:[0-9]+:[0-9]+\.[0-9]+ +bind\(0, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="net-local-stream"\}, 19\) += 0 [1-9][0-9]* +[0-9]+:[0-9]+:[0-9]+\.[0-9]+ +listen\(0, 5\) += 0 [1-9][0-9]* +[0-9]+:[0-9]+:[0-9]+\.[0-9]+ +getsockname\(0, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="net-local-stream"\}, \[19\]\) += 0 -[1-9][0-9]* +[0-9]+:[0-9]+:[0-9]+\.[0-9]+ +accept\(0, \{sa_family=AF_(LOCAL|UNIX|FILE), NULL\}, \[2\]\) += 1 +[1-9][0-9]* +[0-9]+:[0-9]+:[0-9]+\.[0-9]+ +accept\(0, \{sa_family=AF_(LOCAL|UNIX|FILE)\}, \[2\]\) += 1 [1-9][0-9]* +[0-9]+:[0-9]+:[0-9]+\.[0-9]+ +connect\(1, \{sa_family=AF_(LOCAL|UNIX|FILE), sun_path="net-local-stream"\}, 19\) += 0