lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 30 Oct 2014 19:11:17 +0200 From: vadim4j@...il.com To: netdev@...r.kernel.org Subject: Re: [PATCH iproute2] ss: Use generic handle_netlink_request for packet On Thu, Oct 16, 2014 at 05:40:32PM +0300, Vadim Kochan wrote: > Get rid of self-handling and creating of Netlink socket for show packet > socket stats. > > Signed-off-by: Vadim Kochan <vadim4j@...il.com> > --- > misc/ss.c | 80 +++------------------------------------------------------------ > 1 file changed, 3 insertions(+), 77 deletions(-) > > diff --git a/misc/ss.c b/misc/ss.c > index 2420b51..b3cc455 100644 > --- a/misc/ss.c > +++ b/misc/ss.c > @@ -2777,17 +2777,11 @@ static int packet_show_sock(struct nlmsghdr *nlh, struct filter *f) > > static int packet_show_netlink(struct filter *f, FILE *dump_fp) > { > - int fd; > struct { > struct nlmsghdr nlh; > struct packet_diag_req r; > - } req; > - char buf[8192]; > - > - if ((fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_INET_DIAG)) < 0) > - return -1; > + } req = {}; > > - memset(&req, 0, sizeof(req)); > req.nlh.nlmsg_len = sizeof(req); > req.nlh.nlmsg_type = SOCK_DIAG_BY_FAMILY; > req.nlh.nlmsg_flags = NLM_F_ROOT|NLM_F_MATCH|NLM_F_REQUEST; > @@ -2796,76 +2790,8 @@ static int packet_show_netlink(struct filter *f, FILE *dump_fp) > req.r.sdiag_family = AF_PACKET; > req.r.pdiag_show = PACKET_SHOW_INFO | PACKET_SHOW_MEMINFO | PACKET_SHOW_FILTER; > > - if (send(fd, &req, sizeof(req), 0) < 0) { > - close(fd); > - return -1; > - } > - > - while (1) { > - ssize_t status; > - struct nlmsghdr *h; > - struct sockaddr_nl nladdr; > - socklen_t slen = sizeof(nladdr); > - > - status = recvfrom(fd, buf, sizeof(buf), 0, > - (struct sockaddr *) &nladdr, &slen); > - if (status < 0) { > - if (errno == EINTR) > - continue; > - perror("OVERRUN"); > - continue; > - } > - if (status == 0) { > - fprintf(stderr, "EOF on netlink\n"); > - goto close_it; > - } > - > - if (dump_fp) > - fwrite(buf, 1, NLMSG_ALIGN(status), dump_fp); > - > - h = (struct nlmsghdr*)buf; > - while (NLMSG_OK(h, status)) { > - int err; > - > - if (h->nlmsg_seq != 123456) > - goto skip_it; > - > - if (h->nlmsg_type == NLMSG_DONE) > - goto close_it; > - > - if (h->nlmsg_type == NLMSG_ERROR) { > - struct nlmsgerr *err = (struct nlmsgerr*)NLMSG_DATA(h); > - if (h->nlmsg_len < NLMSG_LENGTH(sizeof(struct nlmsgerr))) { > - fprintf(stderr, "ERROR truncated\n"); > - } else { > - errno = -err->error; > - if (errno != ENOENT) > - fprintf(stderr, "UDIAG answers %d\n", errno); > - } > - close(fd); > - return -1; > - } > - if (!dump_fp) { > - err = packet_show_sock(h, f); > - if (err < 0) { > - close(fd); > - return err; > - } > - } > - > -skip_it: > - h = NLMSG_NEXT(h, status); > - } > - > - if (status) { > - fprintf(stderr, "!!!Remnant of size %zd\n", status); > - exit(1); > - } > - } > - > -close_it: > - close(fd); > - return 0; > + return handle_netlink_request(f, dump_fp, &req.nlh, sizeof(req), > + packet_show_sock); > } > > > -- > 2.1.0 > This patch conflicts with master branch, will re-send v2 later. Regards, -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists