From: Dmitry V. Levin Date: Sun, 19 Jul 2015 22:36:46 +0000 (+0000) Subject: net.c: use printaddr and umove_or_printaddr X-Git-Tag: v4.11~399 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6c277da20558fcae086c7a7a26cd63f4e553a84d;p=strace net.c: use printaddr and umove_or_printaddr * net.c (printsock): Use printaddr and umove_or_printaddr. (printcmsghdr, printmsghdr, printmmsghdr, decode_mmsg, do_sockname, sys_recv, sys_recvfrom, sys_recvmsg, do_pipe, print_linger, print_ucred, print_tpacket_stats, print_icmp_filter, print_getsockopt, print_group_req, print_tpacket_req, print_packet_mreq, print_setsockopt): Use printaddr. (print_mreq, print_mreq6): Use umove_or_printaddr. --- diff --git a/net.c b/net.c index ef9a038c..c1c36e3e 100644 --- a/net.c +++ b/net.c @@ -146,23 +146,12 @@ printsock(struct tcb *tcp, long addr, int addrlen) } addrbuf; char string_addr[100]; - if (addr == 0) { - tprints("NULL"); - return; - } - if (!verbose(tcp)) { - tprintf("%#lx", addr); - return; - } - if (addrlen < 2 || addrlen > (int) sizeof(addrbuf)) addrlen = sizeof(addrbuf); memset(&addrbuf, 0, sizeof(addrbuf)); - if (umoven(tcp, addr, addrlen, addrbuf.pad) < 0) { - tprints("{...}"); + if (umoven_or_printaddr(tcp, addr, addrlen, addrbuf.pad)) return; - } addrbuf.pad[sizeof(addrbuf.pad) - 1] = '\0'; tprints("{sa_family="); @@ -363,7 +352,8 @@ printcmsghdr(struct tcb *tcp, unsigned long addr, size_t len) char *buf = len < cmsg_size ? NULL : malloc(len); if (!buf || umoven(tcp, addr, len, buf) < 0) { - tprintf(", msg_control=%#lx", addr); + tprints(", msg_control="); + printaddr(addr); free(buf); return; } @@ -544,7 +534,7 @@ printmsghdr(struct tcb *tcp, long addr, unsigned long data_size) if (verbose(tcp) && extractmsghdr(tcp, addr, &msg)) do_msghdr(tcp, &msg, data_size); else - tprintf("%#lx", addr); + printaddr(addr); } void @@ -567,7 +557,7 @@ printmmsghdr(struct tcb *tcp, long addr, unsigned int idx, unsigned long msg_len tprintf(", %u}", mmsg.msg_len); } else - tprintf("%#lx", addr); + printaddr(addr); } static void @@ -575,7 +565,7 @@ decode_mmsg(struct tcb *tcp, unsigned long msg_len) { /* mmsgvec */ if (syserror(tcp)) { - tprintf("%#lx", tcp->u_arg[1]); + printaddr(tcp->u_arg[1]); } else { unsigned int len = tcp->u_rval; unsigned int i; @@ -705,19 +695,18 @@ do_sockname(struct tcb *tcp, int flags_arg) tprints(", "); return 0; } - if (!tcp->u_arg[2]) - tprintf("%#lx, NULL", tcp->u_arg[1]); - else { - int len; - if (tcp->u_arg[1] == 0 || syserror(tcp) - || umove(tcp, tcp->u_arg[2], &len) < 0) { - tprintf("%#lx", tcp->u_arg[1]); - } else { - printsock(tcp, tcp->u_arg[1], len); - } + + int len; + if (!tcp->u_arg[2] || !verbose(tcp) || syserror(tcp) || + umove(tcp, tcp->u_arg[2], &len) < 0) { + printaddr(tcp->u_arg[1]); tprints(", "); - printnum_int(tcp, tcp->u_arg[2], "%u"); + printaddr(tcp->u_arg[2]); + } else { + printsock(tcp, tcp->u_arg[1], len); + tprintf(", [%d]", len); } + if (flags_arg >= 0) { tprints(", "); printflags(sock_type_flags, tcp->u_arg[flags_arg], @@ -811,7 +800,7 @@ SYS_FUNC(recv) tprints(", "); } else { if (syserror(tcp)) - tprintf("%#lx", tcp->u_arg[1]); + printaddr(tcp->u_arg[1]); else printstr(tcp, tcp->u_arg[1], tcp->u_rval); @@ -842,22 +831,14 @@ SYS_FUNC(recvfrom) /* flags */ printflags(msg_flags, tcp->u_arg[3], "MSG_???"); /* from address, len */ - if (!tcp->u_arg[4] || !tcp->u_arg[5]) { - if (tcp->u_arg[4] == 0) - tprints(", NULL"); - else - tprintf(", %#lx", tcp->u_arg[4]); - if (tcp->u_arg[5] == 0) - tprints(", NULL"); - else - tprintf(", %#lx", tcp->u_arg[5]); - return 0; - } - if (umove(tcp, tcp->u_arg[5], &fromlen) < 0) { - tprints(", {...}, [?]"); + tprints(", "); + if (!tcp->u_arg[4] || !tcp->u_arg[5] || + umove(tcp, tcp->u_arg[5], &fromlen) < 0) { + printaddr(tcp->u_arg[4]); + tprints(", "); + printaddr(tcp->u_arg[5]); return 0; } - tprints(", "); printsock(tcp, tcp->u_arg[4], tcp->u_arg[5]); /* from length */ tprintf(", [%u]", fromlen); @@ -874,7 +855,7 @@ SYS_FUNC(recvmsg) tprints(", "); } else { if (syserror(tcp)) - tprintf("%#lx", tcp->u_arg[1]); + printaddr(tcp->u_arg[1]); else printmsghdr(tcp, tcp->u_arg[1], tcp->u_rval); /* flags */ @@ -952,7 +933,7 @@ do_pipe(struct tcb *tcp, int flags_arg) { if (exiting(tcp)) { if (syserror(tcp)) { - tprintf("%#lx", tcp->u_arg[0]); + printaddr(tcp->u_arg[0]); } else { #ifdef HAVE_GETRVAL2 if (flags_arg < 0) @@ -1053,7 +1034,7 @@ print_linger(struct tcb *tcp, long addr, int len) if (len != sizeof(linger) || umove(tcp, addr, &linger) < 0) { - tprintf("%#lx", addr); + printaddr(addr); return; } @@ -1071,7 +1052,7 @@ print_ucred(struct tcb *tcp, long addr, int len) if (len != sizeof(uc) || umove(tcp, addr, &uc) < 0) { - tprintf("%#lx", addr); + printaddr(addr); } else { tprintf("{pid=%u, uid=%u, gid=%u}", (unsigned) uc.pid, @@ -1089,7 +1070,7 @@ print_tpacket_stats(struct tcb *tcp, long addr, int len) if (len != sizeof(stats) || umove(tcp, addr, &stats) < 0) { - tprintf("%#lx", addr); + printaddr(addr); } else { tprintf("{packets=%u, drops=%u}", stats.tp_packets, @@ -1108,7 +1089,7 @@ print_icmp_filter(struct tcb *tcp, long addr, int len) if (len != sizeof(filter) || umove(tcp, addr, &filter) < 0) { - tprintf("%#lx", addr); + printaddr(addr); return; } @@ -1168,7 +1149,7 @@ print_getsockopt(struct tcb *tcp, int level, int name, long addr, int len) printstr(tcp, addr, len); } } else { - tprintf("%#lx", addr); + printaddr(addr); } done: tprintf(", [%d]", len); @@ -1203,10 +1184,9 @@ print_mreq(struct tcb *tcp, long addr, unsigned int len) printstr(tcp, addr, len); return; } - if (umove(tcp, addr, &mreq) < 0) { - tprintf("%#lx", addr); + if (umove_or_printaddr(tcp, addr, &mreq)) return; - } + tprints("{imr_multiaddr=inet_addr("); print_quoted_string(inet_ntoa(mreq.imr_multiaddr), 16, QUOTE_0_TERMINATED); @@ -1226,10 +1206,8 @@ print_mreq6(struct tcb *tcp, long addr, unsigned int len) if (len < sizeof(mreq)) goto fail; - if (umove(tcp, addr, &mreq) < 0) { - tprintf("%#lx", addr); + if (umove_or_printaddr(tcp, addr, &mreq)) return; - } #ifdef HAVE_INET_NTOP const struct in6_addr *in6 = &mreq.ipv6mr_multiaddr; @@ -1259,7 +1237,7 @@ print_group_req(struct tcb *tcp, long addr, int len) if (len != sizeof(greq) || umove(tcp, addr, &greq) < 0) { - tprintf("%#lx", addr); + printaddr(addr); return; } @@ -1309,7 +1287,7 @@ print_tpacket_req(struct tcb *tcp, long addr, int len) if (len != sizeof(req) || umove(tcp, addr, &req) < 0) { - tprintf("%#lx", addr); + printaddr(addr); } else { tprintf("{block_size=%u, block_nr=%u, " "frame_size=%u, frame_nr=%u}", @@ -1331,7 +1309,7 @@ print_packet_mreq(struct tcb *tcp, long addr, int len) if (len != sizeof(mreq) || umove(tcp, addr, &mreq) < 0) { - tprintf("%#lx", addr); + printaddr(addr); } else { unsigned int i; @@ -1435,7 +1413,7 @@ print_setsockopt(struct tcb *tcp, int level, int name, long addr, int len) printstr(tcp, addr, len); } } else { - tprintf("%#lx", addr); + printaddr(addr); } done: tprintf(", %d", len);