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) &&

Reply via email to