Module Name: src Committed By: martin Date: Mon Jul 31 16:37:18 UTC 2023
Modified Files: src/sys/compat/common [netbsd-10]: if_43.c src/sys/netatalk [netbsd-10]: at_control.c ddp_input.c ddp_output.c Log Message: Pull up following revision(s) (requested by riastradh in ticket #278): sys/netatalk/ddp_output.c: revision 1.22 sys/compat/common/if_43.c: revision 1.27 sys/netatalk/ddp_input.c: revision 1.34 sys/netatalk/at_control.c: revision 1.43 atalk(4): Don't abuse queue(9) internals. atalk(4): Omit spurious satosat. The input is already a struct sockaddr_at pointer. To generate a diff of this commit: cvs rdiff -u -r1.26 -r1.26.4.1 src/sys/compat/common/if_43.c cvs rdiff -u -r1.42.4.1 -r1.42.4.2 src/sys/netatalk/at_control.c cvs rdiff -u -r1.33 -r1.33.4.1 src/sys/netatalk/ddp_input.c cvs rdiff -u -r1.21 -r1.21.34.1 src/sys/netatalk/ddp_output.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/compat/common/if_43.c diff -u src/sys/compat/common/if_43.c:1.26 src/sys/compat/common/if_43.c:1.26.4.1 --- src/sys/compat/common/if_43.c:1.26 Wed Sep 28 15:32:09 2022 +++ src/sys/compat/common/if_43.c Mon Jul 31 16:37:18 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: if_43.c,v 1.26 2022/09/28 15:32:09 msaitoh Exp $ */ +/* $NetBSD: if_43.c,v 1.26.4.1 2023/07/31 16:37:18 martin Exp $ */ /* * Copyright (c) 1982, 1986, 1989, 1990, 1993 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_43.c,v 1.26 2022/09/28 15:32:09 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_43.c,v 1.26.4.1 2023/07/31 16:37:18 martin Exp $"); #if defined(_KERNEL_OPT) #include "opt_compat_netbsd.h" @@ -254,20 +254,29 @@ compat_ifioctl(struct socket *so, u_long } switch (ocmd) { + enum { maxlen = sizeof(oifr->ifr_ifru) }; + CTASSERT(maxlen == 16); + socklen_t famlen; case OSIOCSIFADDR: case OSIOCSIFDSTADDR: case OSIOCSIFBRDADDR: case OSIOCSIFNETMASK: sa = &ifr->ifr_addr; #if BYTE_ORDER != BIG_ENDIAN - if (sa->sa_family == 0 && sa->sa_len < 16) { + if (sa->sa_family == 0 && sa->sa_len < maxlen) { sa->sa_family = sa->sa_len; - sa->sa_len = 16; + sa->sa_len = maxlen; } #else if (sa->sa_len == 0) - sa->sa_len = 16; + sa->sa_len = maxlen; #endif + famlen = sockaddr_getsize_by_family(sa->sa_family); + if (famlen > sa->sa_len) { + curlwp_bindx(bound); + return EAFNOSUPPORT; + } + break; } Index: src/sys/netatalk/at_control.c diff -u src/sys/netatalk/at_control.c:1.42.4.1 src/sys/netatalk/at_control.c:1.42.4.2 --- src/sys/netatalk/at_control.c:1.42.4.1 Mon Jul 31 16:13:40 2023 +++ src/sys/netatalk/at_control.c Mon Jul 31 16:37:18 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: at_control.c,v 1.42.4.1 2023/07/31 16:13:40 martin Exp $ */ +/* $NetBSD: at_control.c,v 1.42.4.2 2023/07/31 16:37:18 martin Exp $ */ /* * Copyright (c) 1990,1994 Regents of The University of Michigan. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: at_control.c,v 1.42.4.1 2023/07/31 16:13:40 martin Exp $"); +__KERNEL_RCSID(0, "$NetBSD: at_control.c,v 1.42.4.2 2023/07/31 16:37:18 martin Exp $"); #include "opt_atalk.h" @@ -88,7 +88,7 @@ at_control(u_long cmd, void *data, struc * If we have an ifp, then find the matching at_ifaddr if it exists */ if (ifp) - for (aa = at_ifaddr.tqh_first; aa; aa = aa->aa_list.tqe_next) + TAILQ_FOREACH(aa, &at_ifaddr, aa_list) if (aa->aa_ifp == ifp) break; @@ -109,7 +109,7 @@ at_control(u_long cmd, void *data, struc * NEXT interface! */ if (ifra->ifra_addr.sat_family == AF_APPLETALK) { - for (; aa; aa = aa->aa_list.tqe_next) + for (; aa; aa = TAILQ_NEXT(aa, aa_list)) if (aa->aa_ifp == ifp && sateqaddr(&aa->aa_addr, &ifra->ifra_addr)) break; @@ -141,7 +141,7 @@ at_control(u_long cmd, void *data, struc * This may leave aa pointing to the first address on * the NEXT interface! */ - for (; aa; aa = aa->aa_list.tqe_next) { + for (; aa; aa = TAILQ_NEXT(aa, aa_list)) { if (aa->aa_ifp == ifp && (aa->aa_flags & AFA_PHASE2) == 0) break; @@ -152,7 +152,7 @@ at_control(u_long cmd, void *data, struc * This may leave aa pointing to the first address on * the NEXT interface! */ - for (; aa; aa = aa->aa_list.tqe_next) { + for (; aa; aa = TAILQ_NEXT(aa, aa_list)) { if (aa->aa_ifp == ifp && (aa->aa_flags & AFA_PHASE2)) break; @@ -177,7 +177,7 @@ at_control(u_long cmd, void *data, struc callout_init(&aa->aa_probe_ch, 0); - if ((aa0 = at_ifaddr.tqh_first) != NULL) { + if ((aa0 = TAILQ_FIRST(&at_ifaddr)) != NULL) { /* * Don't let the loopback be first, since the * first address is the machine's default @@ -245,7 +245,7 @@ at_control(u_long cmd, void *data, struc * If the request is specifying phase 1, then * only look at a phase one address */ - for (; aa; aa = aa->aa_list.tqe_next) { + for (; aa; aa = TAILQ_NEXT(aa, aa_list)) { if (aa->aa_ifp == ifp && (aa->aa_flags & AFA_PHASE2) == 0) break; @@ -255,7 +255,7 @@ at_control(u_long cmd, void *data, struc * If the request is specifying phase 2, then * only look at a phase two address */ - for (; aa; aa = aa->aa_list.tqe_next) { + for (; aa; aa = TAILQ_NEXT(aa, aa_list)) { if (aa->aa_ifp == ifp && (aa->aa_flags & AFA_PHASE2)) break; @@ -264,7 +264,7 @@ at_control(u_long cmd, void *data, struc /* * default to everything */ - for (; aa; aa = aa->aa_list.tqe_next) { + for (; aa; aa = TAILQ_NEXT(aa, aa_list)) { if (aa->aa_ifp == ifp) break; } @@ -682,7 +682,7 @@ at_broadcast(const struct sockaddr_at *s /* * failing that, if the net is one we have, it's a broadcast as well. */ - for (aa = at_ifaddr.tqh_first; aa; aa = aa->aa_list.tqe_next) { + TAILQ_FOREACH(aa, &at_ifaddr, aa_list) { if ((aa->aa_ifp->if_flags & IFF_BROADCAST) && (ntohs(sat->sat_addr.s_net) >= ntohs(aa->aa_firstnet) && ntohs(sat->sat_addr.s_net) <= ntohs(aa->aa_lastnet))) Index: src/sys/netatalk/ddp_input.c diff -u src/sys/netatalk/ddp_input.c:1.33 src/sys/netatalk/ddp_input.c:1.33.4.1 --- src/sys/netatalk/ddp_input.c:1.33 Sat Sep 3 02:48:00 2022 +++ src/sys/netatalk/ddp_input.c Mon Jul 31 16:37:18 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: ddp_input.c,v 1.33 2022/09/03 02:48:00 thorpej Exp $ */ +/* $NetBSD: ddp_input.c,v 1.33.4.1 2023/07/31 16:37:18 martin Exp $ */ /* * Copyright (c) 1990,1994 Regents of The University of Michigan. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ddp_input.c,v 1.33 2022/09/03 02:48:00 thorpej Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ddp_input.c,v 1.33.4.1 2023/07/31 16:37:18 martin Exp $"); #include "opt_atalk.h" #include <sys/param.h> @@ -163,7 +163,7 @@ ddp_input(struct mbuf *m, struct ifnet * from.sat_addr.s_node = elh->el_snode; from.sat_port = ddps.dsh_sport; - for (aa = at_ifaddr.tqh_first; aa; aa = aa->aa_list.tqe_next) { + TAILQ_FOREACH(aa, &at_ifaddr, aa_list) { if (aa->aa_ifp == ifp && (aa->aa_flags & AFA_PHASE2) == 0 && (AA_SAT(aa)->sat_addr.s_node == @@ -199,8 +199,7 @@ ddp_input(struct mbuf *m, struct ifnet * to.sat_port = ddpe.deh_dport; if (to.sat_addr.s_net == ATADDR_ANYNET) { - for (aa = at_ifaddr.tqh_first; aa; - aa = aa->aa_list.tqe_next) { + TAILQ_FOREACH(aa, &at_ifaddr, aa_list) { if (phase == 1 && (aa->aa_flags & AFA_PHASE2)) continue; @@ -216,8 +215,7 @@ ddp_input(struct mbuf *m, struct ifnet * break; } } else { - for (aa = at_ifaddr.tqh_first; aa; - aa = aa->aa_list.tqe_next) { + TAILQ_FOREACH(aa, &at_ifaddr, aa_list) { if (to.sat_addr.s_net == aa->aa_firstnet && to.sat_addr.s_node == 0) break; Index: src/sys/netatalk/ddp_output.c diff -u src/sys/netatalk/ddp_output.c:1.21 src/sys/netatalk/ddp_output.c:1.21.34.1 --- src/sys/netatalk/ddp_output.c:1.21 Sat Feb 17 19:10:18 2018 +++ src/sys/netatalk/ddp_output.c Mon Jul 31 16:37:18 2023 @@ -1,4 +1,4 @@ -/* $NetBSD: ddp_output.c,v 1.21 2018/02/17 19:10:18 rjs Exp $ */ +/* $NetBSD: ddp_output.c,v 1.21.34.1 2023/07/31 16:37:18 martin Exp $ */ /* * Copyright (c) 1990,1991 Regents of The University of Michigan. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: ddp_output.c,v 1.21 2018/02/17 19:10:18 rjs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ddp_output.c,v 1.21.34.1 2023/07/31 16:37:18 martin Exp $"); #include "opt_atalk.h" #include <sys/param.h> @@ -172,7 +172,7 @@ ddp_route(struct mbuf *m, struct route * } elh = mtod(m, struct elaphdr *); - elh->el_snode = satosat(&aa->aa_addr)->sat_addr.s_node; + elh->el_snode = aa->aa_addr.sat_addr.s_node; elh->el_type = ELAP_DDPEXTEND; if (ntohs(satocsat(rtcache_getdst(ro))->sat_addr.s_net) >= ntohs(aa->aa_firstnet) &&