Module Name: src Committed By: ozaki-r Date: Fri Oct 28 05:27:17 UTC 2022
Modified Files: src/usr.bin/fstat: fstat.c src/usr.bin/netstat: inet.c inet6.c src/usr.bin/systat: netcmds.c netstat.c Log Message: Adjust userland commands for struct inpcb separation Only kvm users are affected. To generate a diff of this commit: cvs rdiff -u -r1.116 -r1.117 src/usr.bin/fstat/fstat.c cvs rdiff -u -r1.118 -r1.119 src/usr.bin/netstat/inet.c cvs rdiff -u -r1.83 -r1.84 src/usr.bin/netstat/inet6.c cvs rdiff -u -r1.23 -r1.24 src/usr.bin/systat/netcmds.c cvs rdiff -u -r1.31 -r1.32 src/usr.bin/systat/netstat.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/fstat/fstat.c diff -u src/usr.bin/fstat/fstat.c:1.116 src/usr.bin/fstat/fstat.c:1.117 --- src/usr.bin/fstat/fstat.c:1.116 Fri Oct 28 05:24:07 2022 +++ src/usr.bin/fstat/fstat.c Fri Oct 28 05:27:16 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: fstat.c,v 1.116 2022/10/28 05:24:07 ozaki-r Exp $ */ +/* $NetBSD: fstat.c,v 1.117 2022/10/28 05:27:16 ozaki-r Exp $ */ /*- * Copyright (c) 1988, 1993 @@ -39,7 +39,7 @@ __COPYRIGHT("@(#) Copyright (c) 1988, 19 #if 0 static char sccsid[] = "@(#)fstat.c 8.3 (Berkeley) 5/2/95"; #else -__RCSID("$NetBSD: fstat.c,v 1.116 2022/10/28 05:24:07 ozaki-r Exp $"); +__RCSID("$NetBSD: fstat.c,v 1.117 2022/10/28 05:27:16 ozaki-r Exp $"); #endif #endif /* not lint */ @@ -1061,7 +1061,8 @@ socktrans(struct file *f, struct socket struct socket so; struct protosw proto; struct domain dom; - struct inpcb inpcb; + struct in4pcb in4pcb; + struct in6pcb in6pcb; struct unpcb unpcb; struct ddpcb ddpcb; int len; @@ -1123,15 +1124,16 @@ socktrans(struct file *f, struct socket case IPPROTO_TCP: if (so.so_pcb == NULL) break; - if (kvm_read(kd, (u_long)so.so_pcb, (char *)&inpcb, - sizeof(inpcb)) != sizeof(inpcb)) { - dprintf("can't read inpcb at %p", so.so_pcb); + if (kvm_read(kd, (u_long)so.so_pcb, (char *)&in4pcb, + sizeof(in4pcb)) != sizeof(in4pcb)) { + dprintf("can't read in4pcb at %p", so.so_pcb); goto bad; } - inet_addrstr(lbuf, sizeof(lbuf), &inpcb.inp_laddr, - ntohs(inpcb.inp_lport), isdgram); - inet_addrstr(fbuf, sizeof(fbuf), &inpcb.inp_faddr, - ntohs(inpcb.inp_fport), isdgram); + struct inpcb *inp = (struct inpcb *)&in4pcb; + inet_addrstr(lbuf, sizeof(lbuf), &in4p_laddr(inp), + ntohs(inp->inp_lport), isdgram); + inet_addrstr(fbuf, sizeof(fbuf), &in4p_faddr(inp), + ntohs(inp->inp_fport), isdgram); break; default: break; @@ -1147,15 +1149,16 @@ socktrans(struct file *f, struct socket case IPPROTO_TCP: if (so.so_pcb == NULL) break; - if (kvm_read(kd, (u_long)so.so_pcb, (char *)&inpcb, - sizeof(inpcb)) != sizeof(inpcb)) { - dprintf("can't read inpcb at %p", so.so_pcb); + if (kvm_read(kd, (u_long)so.so_pcb, (char *)&in6pcb, + sizeof(in6pcb)) != sizeof(in6pcb)) { + dprintf("can't read in6pcb at %p", so.so_pcb); goto bad; } - inet6_addrstr(lbuf, sizeof(lbuf), &inpcb.inp_laddr6, - ntohs(inpcb.inp_lport), isdgram); - inet6_addrstr(fbuf, sizeof(fbuf), &inpcb.inp_faddr6, - ntohs(inpcb.inp_fport), isdgram); + struct inpcb *inp = (struct inpcb *)&in6pcb; + inet6_addrstr(lbuf, sizeof(lbuf), &in6p_laddr(inp), + ntohs(inp->inp_lport), isdgram); + inet6_addrstr(fbuf, sizeof(fbuf), &in6p_faddr(inp), + ntohs(inp->inp_fport), isdgram); break; default: break; Index: src/usr.bin/netstat/inet.c diff -u src/usr.bin/netstat/inet.c:1.118 src/usr.bin/netstat/inet.c:1.119 --- src/usr.bin/netstat/inet.c:1.118 Fri Oct 28 05:24:07 2022 +++ src/usr.bin/netstat/inet.c Fri Oct 28 05:27:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: inet.c,v 1.118 2022/10/28 05:24:07 ozaki-r Exp $ */ +/* $NetBSD: inet.c,v 1.119 2022/10/28 05:27:17 ozaki-r Exp $ */ /* * Copyright (c) 1983, 1988, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "from: @(#)inet.c 8.4 (Berkeley) 4/20/94"; #else -__RCSID("$NetBSD: inet.c,v 1.118 2022/10/28 05:24:07 ozaki-r Exp $"); +__RCSID("$NetBSD: inet.c,v 1.119 2022/10/28 05:27:17 ozaki-r Exp $"); #endif #endif /* not lint */ @@ -276,7 +276,8 @@ getpcblist_kmem(u_long off, const char * { struct inpcbtable table; struct inpcb *next, *prev; - struct inpcb inpcb; + struct in4pcb in4pcb; + struct inpcb *inp; struct tcpcb tcpcb; struct socket sockb; int istcp = strcmp(name, "tcp") == 0; @@ -301,31 +302,32 @@ getpcblist_kmem(u_long off, const char * i = 0; while (next != TAILQ_END(head)) { - kread((u_long)next, (char *)&inpcb, sizeof inpcb); + kread((u_long)next, (char *)&in4pcb, sizeof in4pcb); prev = next; - next = TAILQ_NEXT(&inpcb, inp_queue); + inp = (struct inpcb *)&in4pcb; + next = TAILQ_NEXT(inp, inp_queue); - if (inpcb.inp_af != AF_INET) + if (inp->inp_af != AF_INET) continue; - kread((u_long)inpcb.inp_socket, (char *)&sockb, sizeof(sockb)); + kread((u_long)inp->inp_socket, (char *)&sockb, sizeof(sockb)); if (istcp) { - kread((u_long)inpcb.inp_ppcb, + kread((u_long)inp->inp_ppcb, (char *)&tcpcb, sizeof (tcpcb)); } pcblist[i].ki_ppcbaddr = - istcp ? (uintptr_t) inpcb.inp_ppcb : (uintptr_t) prev; + istcp ? (uintptr_t) inp->inp_ppcb : (uintptr_t) prev; pcblist[i].ki_rcvq = (uint64_t)sockb.so_rcv.sb_cc; pcblist[i].ki_sndq = (uint64_t)sockb.so_snd.sb_cc; - sin.sin_addr = inpcb.inp_laddr; - sin.sin_port = inpcb.inp_lport; + sin.sin_addr = in4p_laddr(inp); + sin.sin_port = inp->inp_lport; memcpy(&pcblist[i].ki_s, &sin, sizeof(sin)); - sin.sin_addr = inpcb.inp_faddr; - sin.sin_port = inpcb.inp_fport; + sin.sin_addr = in4p_faddr(inp); + sin.sin_port = inp->inp_fport; memcpy(&pcblist[i].ki_d, &sin, sizeof(sin)); pcblist[i].ki_tstate = tcpcb.t_state; - pcblist[i].ki_pflags = inpcb.inp_flags; + pcblist[i].ki_pflags = inp->inp_flags; if (i++ == size) { size += 100; if (reallocarr(&pcblist, size, sizeof(*pcblist)) != 0) Index: src/usr.bin/netstat/inet6.c diff -u src/usr.bin/netstat/inet6.c:1.83 src/usr.bin/netstat/inet6.c:1.84 --- src/usr.bin/netstat/inet6.c:1.83 Fri Oct 28 05:24:07 2022 +++ src/usr.bin/netstat/inet6.c Fri Oct 28 05:27:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: inet6.c,v 1.83 2022/10/28 05:24:07 ozaki-r Exp $ */ +/* $NetBSD: inet6.c,v 1.84 2022/10/28 05:27:17 ozaki-r Exp $ */ /* BSDI inet.c,v 2.3 1995/10/24 02:19:29 prb Exp */ /* @@ -64,7 +64,7 @@ #if 0 static char sccsid[] = "@(#)inet.c 8.4 (Berkeley) 4/20/94"; #else -__RCSID("$NetBSD: inet6.c,v 1.83 2022/10/28 05:24:07 ozaki-r Exp $"); +__RCSID("$NetBSD: inet6.c,v 1.84 2022/10/28 05:27:17 ozaki-r Exp $"); #endif #endif /* not lint */ @@ -141,7 +141,7 @@ extern const char * const tcptimers[]; #ifdef INET6 -struct inpcb inpcb; +struct in6pcb in6pcb; #ifdef TCP6 struct tcp6cb tcp6cb; #else @@ -288,6 +288,7 @@ getpcblist_kmem(u_long off, const char * struct socket sockb; struct inpcbtable table; struct inpcb *next, *prev; + struct inpcb *inp; int istcp = strcmp(name, "tcp6") == 0; struct kinfo_pcb *pcblist; size_t size = 100, i; @@ -309,33 +310,34 @@ getpcblist_kmem(u_long off, const char * i = 0; while (next != TAILQ_END(head)) { - kread((u_long)next, (char *)&inpcb, sizeof inpcb); - next = TAILQ_NEXT(&inpcb, inp_queue); + kread((u_long)next, (char *)&in6pcb, sizeof in6pcb); + inp = (struct inpcb *)&in6pcb; + next = TAILQ_NEXT(inp, inp_queue); prev = next; - if (inpcb.inp_af != AF_INET6) + if (inp->inp_af != AF_INET6) continue; - kread((u_long)inpcb.inp_socket, (char *)&sockb, + kread((u_long)inp->inp_socket, (char *)&sockb, sizeof (sockb)); if (istcp) { #ifdef TCP6 - kread((u_long)inpcb.inp_ppcb, + kread((u_long)inp->inp_ppcb, (char *)&tcp6cb, sizeof (tcp6cb)); #else - kread((u_long)inpcb.inp_ppcb, + kread((u_long)inp->inp_ppcb, (char *)&tcpcb, sizeof (tcpcb)); #endif } pcblist[i].ki_ppcbaddr = - istcp ? (uintptr_t) inpcb.inp_ppcb : (uintptr_t) prev; + istcp ? (uintptr_t) inp->inp_ppcb : (uintptr_t) prev; pcblist[i].ki_rcvq = (uint64_t)sockb.so_rcv.sb_cc; pcblist[i].ki_sndq = (uint64_t)sockb.so_snd.sb_cc; - sin6.sin6_addr = inpcb.inp_laddr6; - sin6.sin6_port = inpcb.inp_lport; + sin6.sin6_addr = in6p_laddr(inp); + sin6.sin6_port = inp->inp_lport; memcpy(&pcblist[i].ki_s, &sin6, sizeof(sin6)); - sin6.sin6_addr = inpcb.inp_faddr6; - sin6.sin6_port = inpcb.inp_fport; + sin6.sin6_addr = in6p_faddr(inp); + sin6.sin6_port = inp->inp_fport; memcpy(&pcblist[i].ki_d, &sin6, sizeof(sin6)); pcblist[i].ki_tstate = tcpcb.t_state; if (i++ == size) { Index: src/usr.bin/systat/netcmds.c diff -u src/usr.bin/systat/netcmds.c:1.23 src/usr.bin/systat/netcmds.c:1.24 --- src/usr.bin/systat/netcmds.c:1.23 Fri Oct 28 05:24:08 2022 +++ src/usr.bin/systat/netcmds.c Fri Oct 28 05:27:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: netcmds.c,v 1.23 2022/10/28 05:24:08 ozaki-r Exp $ */ +/* $NetBSD: netcmds.c,v 1.24 2022/10/28 05:27:17 ozaki-r Exp $ */ /*- * Copyright (c) 1980, 1992, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)netcmds.c 8.1 (Berkeley) 6/6/93"; #endif -__RCSID("$NetBSD: netcmds.c,v 1.23 2022/10/28 05:24:08 ozaki-r Exp $"); +__RCSID("$NetBSD: netcmds.c,v 1.24 2022/10/28 05:27:17 ozaki-r Exp $"); #endif /* not lint */ /* @@ -331,8 +331,8 @@ checkhost(struct inpcb *inp) if (((struct sockaddr *)&p->addr)->sa_family != AF_INET) continue; s_in = (struct sockaddr_in *)&p->addr; - if (s_in->sin_addr.s_addr == inp->inp_laddr.s_addr || - s_in->sin_addr.s_addr == inp->inp_faddr.s_addr) + if (s_in->sin_addr.s_addr == in4p_laddr(inp).s_addr || + s_in->sin_addr.s_addr == in4p_faddr(inp).s_addr) return (p->onoff); } return (1); @@ -350,8 +350,8 @@ checkhost6(struct inpcb *inp) if (((struct sockaddr *)&p->addr)->sa_family != AF_INET6) continue; sin6 = (struct sockaddr_in6 *)&p->addr; - if (IN6_ARE_ADDR_EQUAL(&sin6->sin6_addr, &inp->inp_laddr6) || - IN6_ARE_ADDR_EQUAL(&sin6->sin6_addr, &inp->inp_faddr6)) + if (IN6_ARE_ADDR_EQUAL(&sin6->sin6_addr, &in6p_laddr(inp)) || + IN6_ARE_ADDR_EQUAL(&sin6->sin6_addr, &in6p_faddr(inp))) return (p->onoff); } return (1); Index: src/usr.bin/systat/netstat.c diff -u src/usr.bin/systat/netstat.c:1.31 src/usr.bin/systat/netstat.c:1.32 --- src/usr.bin/systat/netstat.c:1.31 Fri Oct 28 05:24:08 2022 +++ src/usr.bin/systat/netstat.c Fri Oct 28 05:27:17 2022 @@ -1,4 +1,4 @@ -/* $NetBSD: netstat.c,v 1.31 2022/10/28 05:24:08 ozaki-r Exp $ */ +/* $NetBSD: netstat.c,v 1.32 2022/10/28 05:27:17 ozaki-r Exp $ */ /*- * Copyright (c) 1980, 1992, 1993 @@ -34,7 +34,7 @@ #if 0 static char sccsid[] = "@(#)netstat.c 8.1 (Berkeley) 6/6/93"; #endif -__RCSID("$NetBSD: netstat.c,v 1.31 2022/10/28 05:24:08 ozaki-r Exp $"); +__RCSID("$NetBSD: netstat.c,v 1.32 2022/10/28 05:27:17 ozaki-r Exp $"); #endif /* not lint */ /* @@ -215,7 +215,8 @@ fetchnetstat4(void *off, int istcp) struct inpcbtable pcbtable; struct inpcb **pprev, *next; struct netinfo *p; - struct inpcb inpcb, *inpcbp; + struct inpcb *inpcbp, *inp; + struct in4pcb in4pcb; struct socket sockb; struct tcpcb tcpcb; @@ -224,30 +225,31 @@ fetchnetstat4(void *off, int istcp) next = TAILQ_FIRST(&pcbtable.inpt_queue); while (next != TAILQ_END(&pcbtable.inpt_queue)) { inpcbp = (struct inpcb *)next; - KREAD(inpcbp, &inpcb, sizeof (inpcb)); - if (inpcb.inp_queue.tqe_prev != pprev) { + KREAD(inpcbp, &in4pcb, sizeof (in4pcb)); + inp = (struct inpcb *)&in4pcb; + if (inp->inp_queue.tqe_prev != pprev) { for (p = netcb.ni_forw; p != nhead; p = p->ni_forw) p->ni_seen = 1; error("Kernel state in transition"); return; } pprev = &next->inp_queue.tqe_next; - next = inpcb.inp_queue.tqe_next; + next = inp->inp_queue.tqe_next; - if (inpcb.inp_af != AF_INET) + if (inp->inp_af != AF_INET) continue; - if (!aflag && inet_lnaof(inpcb.inp_laddr) == INADDR_ANY) + if (!aflag && inet_lnaof(in4p_laddr(inp)) == INADDR_ANY) continue; - if (nhosts && !checkhost(&inpcb)) + if (nhosts && !checkhost(inp)) continue; - if (nports && !checkport(&inpcb)) + if (nports && !checkport(inp)) continue; - KREAD(inpcb.inp_socket, &sockb, sizeof (sockb)); + KREAD(inp->inp_socket, &sockb, sizeof (sockb)); if (istcp) { - KREAD(inpcb.inp_ppcb, &tcpcb, sizeof (tcpcb)); - enter(&inpcb, &sockb, tcpcb.t_state, "tcp"); + KREAD(inp->inp_ppcb, &tcpcb, sizeof (tcpcb)); + enter(inp, &sockb, tcpcb.t_state, "tcp"); } else - enter(&inpcb, &sockb, 0, "udp"); + enter(inp, &sockb, 0, "udp"); } } @@ -260,37 +262,39 @@ fetchnetstat6(void *off, int istcp) struct netinfo *p; struct socket sockb; struct tcpcb tcpcb; - struct inpcb inpcb, *inpcbp; + struct inpcb *inp, *inpcbp; + struct in6pcb in6pcb; KREAD(off, &pcbtable, sizeof pcbtable); pprev = &((struct inpcbtable *)off)->inpt_queue.tqh_first; next = TAILQ_FIRST(&pcbtable.inpt_queue); while (next != TAILQ_END(&pcbtable.inpt_queue)) { inpcbp = (struct inpcb *)next; - KREAD(inpcbp, &inpcb, sizeof (inpcb)); - if (inpcb.inp_queue.tqe_prev != pprev) { + KREAD(inpcbp, &in6pcb, sizeof (in6pcb)); + inp = (struct inpcb *)&in6pcb; + if (inp->inp_queue.tqe_prev != pprev) { for (p = netcb.ni_forw; p != nhead; p = p->ni_forw) p->ni_seen = 1; error("Kernel state in transition"); return; } pprev = &next->inp_queue.tqe_next; - next = inpcb.inp_queue.tqe_next; + next = inp->inp_queue.tqe_next; - if (inpcb.inp_af != AF_INET6) + if (inp->inp_af != AF_INET6) continue; - if (!aflag && IN6_IS_ADDR_UNSPECIFIED(&inpcb.inp_laddr6)) + if (!aflag && IN6_IS_ADDR_UNSPECIFIED(&in6p_laddr(inp))) continue; - if (nhosts && !checkhost(&inpcb)) + if (nhosts && !checkhost(inp)) continue; - if (nports && !checkport(&inpcb)) + if (nports && !checkport(inp)) continue; - KREAD(inpcb.inp_socket, &sockb, sizeof (sockb)); + KREAD(inp->inp_socket, &sockb, sizeof (sockb)); if (istcp) { - KREAD(inpcb.inp_ppcb, &tcpcb, sizeof (tcpcb)); - enter6(&inpcb, &sockb, tcpcb.t_state, "tcp"); + KREAD(inp->inp_ppcb, &tcpcb, sizeof (tcpcb)); + enter6(inp, &sockb, tcpcb.t_state, "tcp"); } else - enter6(&inpcb, &sockb, 0, "udp"); + enter6(inp, &sockb, 0, "udp"); } } #endif /*INET6*/ @@ -313,9 +317,9 @@ enter(struct inpcb *inp, struct socket * if (!streq(proto, p->ni_proto)) continue; if (p->ni_lport != inp->inp_lport || - p->ni_laddr.s_addr != inp->inp_laddr.s_addr) + p->ni_laddr.s_addr != in4p_laddr(inp).s_addr) continue; - if (p->ni_faddr.s_addr == inp->inp_faddr.s_addr && + if (p->ni_faddr.s_addr == in4p_faddr(inp).s_addr && p->ni_fport == inp->inp_fport) break; } @@ -329,9 +333,9 @@ enter(struct inpcb *inp, struct socket * netcb.ni_forw->ni_prev = p; netcb.ni_forw = p; p->ni_line = -1; - p->ni_laddr = inp->inp_laddr; + p->ni_laddr = in4p_laddr(inp); p->ni_lport = inp->inp_lport; - p->ni_faddr = inp->inp_faddr; + p->ni_faddr = in4p_faddr(inp); p->ni_fport = inp->inp_fport; p->ni_proto = proto; p->ni_flags = NIF_LACHG | NIF_FACHG; @@ -362,9 +366,9 @@ enter6(struct inpcb *inp, struct socket if (!streq(proto, p->ni_proto)) continue; if (p->ni_lport != inp->inp_lport || - !IN6_ARE_ADDR_EQUAL(&p->ni_laddr6, &inp->inp_laddr6)) + !IN6_ARE_ADDR_EQUAL(&p->ni_laddr6, &in6p_laddr(inp))) continue; - if (IN6_ARE_ADDR_EQUAL(&p->ni_faddr6, &inp->inp_faddr6) && + if (IN6_ARE_ADDR_EQUAL(&p->ni_faddr6, &in6p_faddr(inp)) && p->ni_fport == inp->inp_fport) break; } @@ -378,9 +382,9 @@ enter6(struct inpcb *inp, struct socket netcb.ni_forw->ni_prev = p; netcb.ni_forw = p; p->ni_line = -1; - p->ni_laddr6 = inp->inp_laddr6; + p->ni_laddr6 = in6p_laddr(inp); p->ni_lport = inp->inp_lport; - p->ni_faddr6 = inp->inp_faddr6; + p->ni_faddr6 = in6p_faddr(inp); p->ni_fport = inp->inp_fport; p->ni_proto = proto; p->ni_flags = NIF_LACHG | NIF_FACHG;