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