Index: usr.bin/kdump/kdump.c =================================================================== --- usr.bin/kdump/kdump.c +++ usr.bin/kdump/kdump.c @@ -1892,9 +1892,9 @@ printf("", sa->sa_family); printf(", "); -#define check_sockaddr_len(n) \ - if (sa_##n.s##n##_len < sizeof(struct sockaddr_##n)) { \ - printf("invalid"); \ +#define check_sockaddr_len(n, op, msg) \ + if (sa->sa_len op sizeof(struct sockaddr_##n)) { \ + printf("invalid " msg); \ break; \ } @@ -1902,36 +1902,32 @@ case AF_INET: { struct sockaddr_in sa_in; - memset(&sa_in, 0, sizeof(sa_in)); - memcpy(&sa_in, sa, sa->sa_len); - check_sockaddr_len(in); + check_sockaddr_len(in, <, "(short)"); + memcpy(&sa_in, sa, sizeof(sa_in)); inet_ntop(AF_INET, &sa_in.sin_addr, addr, sizeof addr); - printf("%s:%u", addr, ntohs(sa_in.sin_port)); + printf("%s:%u ", addr, ntohs(sa_in.sin_port)); + check_sockaddr_len(in, >, "(long)"); break; } case AF_INET6: { struct sockaddr_in6 sa_in6; - memset(&sa_in6, 0, sizeof(sa_in6)); - memcpy(&sa_in6, sa, sa->sa_len); - check_sockaddr_len(in6); + check_sockaddr_len(in6, <, "(short)"); + memcpy(&sa_in6, sa, sizeof(sa_in6)); getnameinfo((struct sockaddr *)&sa_in6, sizeof(sa_in6), addr, sizeof(addr), NULL, 0, NI_NUMERICHOST); - printf("[%s]:%u", addr, htons(sa_in6.sin6_port)); + printf("[%s]:%u ", addr, htons(sa_in6.sin6_port)); + check_sockaddr_len(in, >, "(long)"); break; } case AF_UNIX: { - struct sockaddr_un sa_un; - - memset(&sa_un, 0, sizeof(sa_un)); - memcpy(&sa_un, sa, sa->sa_len); - printf("%.*s", (int)sizeof(sa_un.sun_path), sa_un.sun_path); + printf("%.*s ", (int)sa->sa_len, sa->sa_data); break; } default: printf("unknown address family"); } - printf(" }\n"); + printf("}\n"); } void