sync with OpenBSD -current

This commit is contained in:
purplerain 2024-02-28 20:57:49 +00:00
parent 8d80bb2dde
commit 0f90c06c31
Signed by: purplerain
GPG key ID: F42C07F07E2E35B7
15 changed files with 176 additions and 142 deletions

View file

@ -1,4 +1,4 @@
/* $OpenBSD: cpu.c,v 1.105 2024/02/23 21:52:12 kettenis Exp $ */
/* $OpenBSD: cpu.c,v 1.106 2024/02/28 00:53:16 jsg Exp $ */
/*
* Copyright (c) 2016 Dale Rahn <drahn@dalerahn.com>
@ -766,7 +766,7 @@ cpu_identify(struct cpu_info *ci)
}
/*
* ID_AA64PFR0
* ID_AA64PFR1
*/
id = READ_SPECIALREG(id_aa64pfr1_el1);
@ -782,6 +782,11 @@ cpu_identify(struct cpu_info *ci)
if (ID_AA64PFR1_SBSS(id) >= ID_AA64PFR1_SBSS_PSTATE_MSR)
printf("+MSR");
if (ID_AA64PFR1_MTE(id) >= ID_AA64PFR1_MTE_IMPL) {
printf("%sMTE", sep);
sep = ",";
}
#ifdef CPU_DEBUG
id = READ_SPECIALREG(id_aa64afr0_el1);
printf("\nID_AA64AFR0_EL1: 0x%016llx", id);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: fxp.c,v 1.133 2023/11/10 15:51:20 bluhm Exp $ */
/* $OpenBSD: fxp.c,v 1.134 2024/02/28 12:53:31 miod Exp $ */
/* $NetBSD: if_fxp.c,v 1.2 1997/06/05 02:01:55 thorpej Exp $ */
/*
@ -1382,11 +1382,12 @@ fxp_init(void *xsc)
else
bufs = FXP_NRFABUFS_MIN;
if (sc->rx_bufs > bufs) {
while (sc->rfa_headm != NULL && sc->rx_bufs-- > bufs) {
while (sc->rfa_headm != NULL && sc->rx_bufs > bufs) {
rxmap = *((bus_dmamap_t *)sc->rfa_headm->m_ext.ext_buf);
bus_dmamap_unload(sc->sc_dmat, rxmap);
FXP_RXMAP_PUT(sc, rxmap);
sc->rfa_headm = m_free(sc->rfa_headm);
sc->rx_bufs--;
}
} else if (sc->rx_bufs < bufs) {
int err, tmp_rx_bufs = sc->rx_bufs;

View file

@ -1,4 +1,4 @@
/* $OpenBSD: kern_sched.c,v 1.94 2024/01/24 19:23:38 cheloha Exp $ */
/* $OpenBSD: kern_sched.c,v 1.95 2024/02/28 13:43:44 mpi Exp $ */
/*
* Copyright (c) 2007, 2008 Artur Grabowski <art@openbsd.org>
*
@ -293,8 +293,7 @@ setrunqueue(struct cpu_info *ci, struct proc *p, uint8_t prio)
if (cpuset_isset(&sched_idle_cpus, p->p_cpu))
cpu_unidle(p->p_cpu);
if (prio < spc->spc_curpriority)
else if (prio < spc->spc_curpriority)
need_resched(ci);
}

View file

@ -1,4 +1,4 @@
/* $OpenBSD: if_ppp.c,v 1.117 2020/08/21 22:59:27 kn Exp $ */
/* $OpenBSD: if_ppp.c,v 1.118 2024/02/28 16:08:34 denis Exp $ */
/* $NetBSD: if_ppp.c,v 1.39 1997/05/17 21:11:59 christos Exp $ */
/*
@ -494,6 +494,11 @@ pppioctl(struct ppp_softc *sc, u_long cmd, caddr_t data, int flag,
case PPP_IP:
npx = NP_IP;
break;
#ifdef INET6
case PPP_IPV6:
npx = NP_IPV6;
break;
#endif
default:
return EINVAL;
}
@ -579,15 +584,19 @@ pppsioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
break;
case SIOCSIFADDR:
if (ifa->ifa_addr->sa_family != AF_INET)
error = EAFNOSUPPORT;
break;
case SIOCSIFDSTADDR:
if (ifa->ifa_addr->sa_family != AF_INET)
switch (ifa->ifa_addr->sa_family) {
case AF_INET:
break;
#ifdef INET6
case AF_INET6:
break;
#endif
default:
error = EAFNOSUPPORT;
break;
}
break;
case SIOCSIFMTU:
sc->sc_if.if_mtu = ifr->ifr_mtu;
break;
@ -674,6 +683,14 @@ pppoutput(struct ifnet *ifp, struct mbuf *m0, struct sockaddr *dst,
protocol = PPP_IP;
mode = sc->sc_npmode[NP_IP];
break;
#ifdef INET6
case AF_INET6:
address = PPP_ALLSTATIONS;
control = PPP_UI;
protocol = PPP_IPV6;
mode = sc->sc_npmode[NP_IPV6];
break;
#endif
case AF_UNSPEC:
address = PPP_ADDRESS(dst->sa_data);
control = PPP_CONTROL(dst->sa_data);
@ -804,6 +821,11 @@ ppp_requeue(struct ppp_softc *sc)
case PPP_IP:
mode = sc->sc_npmode[NP_IP];
break;
#ifdef INET6
case PPP_IPV6:
mode = sc->sc_npmode[NP_IPV6];
break;
#endif
default:
mode = NPMODE_PASS;
}
@ -1391,7 +1413,25 @@ ppp_inproc(struct ppp_softc *sc, struct mbuf *m)
ipv4_input(ifp, m);
rv = 1;
break;
#ifdef INET6
case PPP_IPV6:
/*
* IPv6 packet - take off the ppp header and pass it up to IPv6.
*/
if ((ifp->if_flags & IFF_UP) == 0 ||
sc->sc_npmode[NP_IPV6] != NPMODE_PASS) {
/* interface is down - drop the packet. */
m_freem(m);
return;
}
m->m_pkthdr.len -= PPP_HDRLEN;
m->m_data += PPP_HDRLEN;
m->m_len -= PPP_HDRLEN;
ipv6_input(ifp, m);
rv = 1;
break;
#endif
default:
/*
* Some other protocol - place on input queue for read().

View file

@ -1,4 +1,4 @@
/* $OpenBSD: if_pppvar.h,v 1.20 2020/05/20 06:44:30 mpi Exp $ */
/* $OpenBSD: if_pppvar.h,v 1.21 2024/02/28 16:08:34 denis Exp $ */
/* $NetBSD: if_pppvar.h,v 1.5 1997/01/03 07:23:29 mikel Exp $ */
/*
* if_pppvar.h - private structures and declarations for PPP.
@ -81,7 +81,8 @@
* indexing sc_npmode.
*/
#define NP_IP 0 /* Internet Protocol */
#define NUM_NP 1 /* Number of NPs. */
#define NP_IPV6 1 /* Internet Protocol v6 */
#define NUM_NP 2 /* Number of NPs. */
struct ppp_pkt;

View file

@ -1,4 +1,4 @@
/* $OpenBSD: ip_input.c,v 1.390 2024/02/22 14:25:58 bluhm Exp $ */
/* $OpenBSD: ip_input.c,v 1.391 2024/02/28 10:57:20 bluhm Exp $ */
/* $NetBSD: ip_input.c,v 1.30 1996/03/16 23:53:58 christos Exp $ */
/*
@ -391,7 +391,10 @@ ip_input_if(struct mbuf **mp, int *offp, int nxt, int af, struct ifnet *ifp)
struct rtentry *rt = NULL;
struct ip *ip;
int hlen;
in_addr_t pfrdr = 0;
#if NPF > 0
struct in_addr odst;
#endif
int pfrdr = 0;
KASSERT(*offp == 0);
@ -412,7 +415,7 @@ ip_input_if(struct mbuf **mp, int *offp, int nxt, int af, struct ifnet *ifp)
/*
* Packet filter
*/
pfrdr = ip->ip_dst.s_addr;
odst = ip->ip_dst;
if (pf_test(AF_INET, PF_IN, ifp, mp) != PF_PASS)
goto bad;
m = *mp;
@ -420,7 +423,7 @@ ip_input_if(struct mbuf **mp, int *offp, int nxt, int af, struct ifnet *ifp)
goto bad;
ip = mtod(m, struct ip *);
pfrdr = (pfrdr != ip->ip_dst.s_addr);
pfrdr = odst.s_addr != ip->ip_dst.s_addr;
#endif
hlen = ip->ip_hl << 2;
@ -1472,7 +1475,7 @@ const u_char inetctlerrmap[PRC_NCMDS] = {
void
ip_forward(struct mbuf *m, struct ifnet *ifp, struct rtentry *rt, int srcrt)
{
struct mbuf mfake, *mcopy = NULL;
struct mbuf mfake, *mcopy;
struct ip *ip = mtod(m, struct ip *);
struct route ro;
int error = 0, type = 0, code = 0, destmtu = 0, fake = 0, len;
@ -1482,11 +1485,11 @@ ip_forward(struct mbuf *m, struct ifnet *ifp, struct rtentry *rt, int srcrt)
if (m->m_flags & (M_BCAST|M_MCAST) || in_canforward(ip->ip_dst) == 0) {
ipstat_inc(ips_cantforward);
m_freem(m);
goto freecopy;
goto done;
}
if (ip->ip_ttl <= IPTTLDEC) {
icmp_error(m, ICMP_TIMXCEED, ICMP_TIMXCEED_INTRANS, dest, 0);
goto freecopy;
goto done;
}
ro.ro_rt = NULL;
@ -1563,10 +1566,10 @@ ip_forward(struct mbuf *m, struct ifnet *ifp, struct rtentry *rt, int srcrt)
if (type)
ipstat_inc(ips_redirectsent);
else
goto freecopy;
goto done;
}
if (!fake)
goto freecopy;
goto done;
switch (error) {
case 0: /* forwarded, but need redirect */
@ -1590,7 +1593,7 @@ ip_forward(struct mbuf *m, struct ifnet *ifp, struct rtentry *rt, int srcrt)
}
ipstat_inc(ips_cantfrag);
if (destmtu == 0)
goto freecopy;
goto done;
break;
case EACCES:
@ -1598,7 +1601,7 @@ ip_forward(struct mbuf *m, struct ifnet *ifp, struct rtentry *rt, int srcrt)
* pf(4) blocked the packet. There is no need to send an ICMP
* packet back since pf(4) takes care of it.
*/
goto freecopy;
goto done;
case ENOBUFS:
/*
@ -1607,7 +1610,7 @@ ip_forward(struct mbuf *m, struct ifnet *ifp, struct rtentry *rt, int srcrt)
* source quench could be a big problem under DoS attacks,
* or the underlying interface is rate-limited.
*/
goto freecopy;
goto done;
case ENETUNREACH: /* shouldn't happen, checked above */
case EHOSTUNREACH:
@ -1619,10 +1622,10 @@ ip_forward(struct mbuf *m, struct ifnet *ifp, struct rtentry *rt, int srcrt)
break;
}
mcopy = m_copym(&mfake, 0, len, M_DONTWAIT);
if (mcopy)
if (mcopy != NULL)
icmp_error(mcopy, type, code, dest, destmtu);
freecopy:
done:
if (fake)
m_tag_delete_chain(&mfake);
rtfree(rt);

View file

@ -1,4 +1,4 @@
/* $OpenBSD: ip6_forward.c,v 1.115 2024/02/22 14:25:58 bluhm Exp $ */
/* $OpenBSD: ip6_forward.c,v 1.116 2024/02/28 10:57:20 bluhm Exp $ */
/* $KAME: ip6_forward.c,v 1.75 2001/06/29 12:42:13 jinmei Exp $ */
/*
@ -89,7 +89,7 @@ ip6_forward(struct mbuf *m, struct rtentry *rt, int srcrt)
struct route ro;
struct ifnet *ifp = NULL;
int error = 0, type = 0, code = 0, destmtu = 0;
struct mbuf *mcopy = NULL;
struct mbuf *mcopy;
#ifdef IPSEC
struct tdb *tdb = NULL;
#endif /* IPSEC */
@ -121,13 +121,13 @@ ip6_forward(struct mbuf *m, struct rtentry *rt, int srcrt)
m->m_pkthdr.ph_ifidx);
}
m_freem(m);
goto out;
goto done;
}
if (ip6->ip6_hlim <= IPV6_HLIMDEC) {
icmp6_error(m, ICMP6_TIME_EXCEEDED,
ICMP6_TIME_EXCEED_TRANSIT, 0);
goto out;
goto done;
}
ip6->ip6_hlim -= IPV6_HLIMDEC;
@ -175,12 +175,12 @@ reroute:
m->m_pkthdr.ph_rtableid);
if (rt == NULL) {
ip6stat_inc(ip6s_noroute);
if (mcopy) {
if (mcopy != NULL) {
icmp6_error(mcopy, ICMP6_DST_UNREACH,
ICMP6_DST_UNREACH_NOROUTE, 0);
}
m_freem(m);
goto out;
goto done;
}
}
ro.ro_rt = rt;
@ -211,11 +211,11 @@ reroute:
ip6->ip6_nxt,
m->m_pkthdr.ph_ifidx, rt->rt_ifidx);
}
if (mcopy)
if (mcopy != NULL)
icmp6_error(mcopy, ICMP6_DST_UNREACH,
ICMP6_DST_UNREACH_BEYONDSCOPE, 0);
m_freem(m);
goto out;
goto done;
}
#ifdef IPSEC
@ -270,11 +270,11 @@ reroute:
* type/code is based on suggestion by Rich Draves.
* not sure if it is the best pick.
*/
if (mcopy)
if (mcopy != NULL)
icmp6_error(mcopy, ICMP6_DST_UNREACH,
ICMP6_DST_UNREACH_ADDR, 0);
m_freem(m);
goto out;
goto done;
}
type = ND_REDIRECT;
}
@ -327,18 +327,18 @@ reroute:
if (mcopy != NULL)
icmp6_error(mcopy, ICMP6_PACKET_TOO_BIG, 0, ifp->if_mtu);
m_freem(m);
goto out;
goto done;
senderr:
if (mcopy == NULL)
goto out;
goto done;
switch (error) {
case 0:
if (type == ND_REDIRECT) {
icmp6_redirect_output(mcopy, rt);
ip6stat_inc(ip6s_redirectsent);
goto out;
goto done;
}
goto freecopy;
@ -383,11 +383,11 @@ senderr:
break;
}
icmp6_error(mcopy, type, code, destmtu);
goto out;
goto done;
freecopy:
freecopy:
m_freem(mcopy);
out:
done:
rtfree(rt);
if_put(ifp);
#ifdef IPSEC

View file

@ -1,4 +1,4 @@
/* $OpenBSD: ip6_input.c,v 1.258 2024/02/22 14:25:58 bluhm Exp $ */
/* $OpenBSD: ip6_input.c,v 1.259 2024/02/28 10:57:20 bluhm Exp $ */
/* $KAME: ip6_input.c,v 1.188 2001/03/29 05:34:31 itojun Exp $ */
/*
@ -366,7 +366,7 @@ ip6_input_if(struct mbuf **mp, int *offp, int nxt, int af, struct ifnet *ifp)
#if NPF > 0
struct in6_addr odst;
#endif
int srcrt = 0;
int pfrdr = 0;
KASSERT(*offp == 0);
@ -413,7 +413,7 @@ ip6_input_if(struct mbuf **mp, int *offp, int nxt, int af, struct ifnet *ifp)
goto bad;
ip6 = mtod(m, struct ip6_hdr *);
srcrt = !IN6_ARE_ADDR_EQUAL(&odst, &ip6->ip6_dst);
pfrdr = !IN6_ARE_ADDR_EQUAL(&odst, &ip6->ip6_dst);
#endif
/*
@ -618,7 +618,7 @@ ip6_input_if(struct mbuf **mp, int *offp, int nxt, int af, struct ifnet *ifp)
}
#endif /* IPSEC */
ip6_forward(m, rt, srcrt);
ip6_forward(m, rt, pfrdr);
*mp = NULL;
return IPPROTO_DONE;
bad:

View file

@ -1,4 +1,4 @@
/* $OpenBSD: ip6_output.c,v 1.287 2024/02/22 14:25:58 bluhm Exp $ */
/* $OpenBSD: ip6_output.c,v 1.288 2024/02/28 10:57:20 bluhm Exp $ */
/* $KAME: ip6_output.c,v 1.172 2001/03/25 09:55:56 itojun Exp $ */
/*
@ -748,8 +748,16 @@ reroute:
(error = if_output_ml(ifp, &ml, sin6tosa(dst), ro->ro_rt)))
goto done;
ip6stat_inc(ip6s_fragmented);
goto done;
done:
freehdrs:
m_freem(exthdrs.ip6e_hbh); /* m_freem will check if mbuf is 0 */
m_freem(exthdrs.ip6e_dest1);
m_freem(exthdrs.ip6e_rthdr);
m_freem(exthdrs.ip6e_dest2);
bad:
m_freem(m);
done:
if (ro == &iproute && ro->ro_rt) {
rtfree(ro->ro_rt);
} else if (ro_pmtu == &iproute && ro_pmtu->ro_rt) {
@ -760,16 +768,6 @@ done:
tdb_unref(tdb);
#endif /* IPSEC */
return (error);
freehdrs:
m_freem(exthdrs.ip6e_hbh); /* m_freem will check if mbuf is 0 */
m_freem(exthdrs.ip6e_dest1);
m_freem(exthdrs.ip6e_rthdr);
m_freem(exthdrs.ip6e_dest2);
/* FALLTHROUGH */
bad:
m_freem(m);
goto done;
}
int