- Fix an off-by-one error that caused uvm_fault when changing the config
with ancontrol(8).
- Do not allow regular users to change the configuration of the device.
Apply by doing:
cd /usr/src
patch -p0 < 011_an.patch
And then rebuild your kernel.
Index: sys/dev/ic/an.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/an.c,v
retrieving revision 1.2
retrieving revision 1.4
diff -u -r1.2 -r1.4
--- sys/dev/ic/an.c 2000/04/06 04:01:49 1.2
+++ sys/dev/ic/an.c 2000/06/18 03:56:07 1.4
@@ -1,4 +1,4 @@
-/* $OpenBSD: an.c,v 1.2 2000/04/06 04:01:49 mickey Exp $ */
+/* $OpenBSD: an.c,v 1.4 2000/06/18 03:56:07 aaron Exp $ */
/*
* Copyright (c) 1997, 1998, 1999
@@ -97,6 +97,7 @@
#include <sys/mbuf.h>
#include <sys/malloc.h>
#include <sys/kernel.h>
+#include <sys/proc.h>
#include <sys/socket.h>
#include <sys/timeout.h>
#ifdef ANCACHE
@@ -797,7 +798,7 @@
case AN_RID_GENCONFIG:
cfg = (struct an_ltv_genconfig *)areq;
- ifa = ifnet_addrs[ifp->if_index - 1];
+ ifa = ifnet_addrs[ifp->if_index];
sdl = (struct sockaddr_dl *)ifa->ifa_addr;
bcopy((char *)&cfg->an_macaddr, (char *)&sc->arpcom.ac_enaddr,
ETHER_ADDR_LEN);
@@ -879,6 +880,7 @@
struct an_softc *sc;
struct an_req areq;
struct ifreq *ifr;
+ struct proc *p = curproc;
struct ifaddr *ifa = (struct ifaddr *)data;
s = splimp();
@@ -960,6 +962,9 @@
error = copyout(&areq, ifr->ifr_data, sizeof(areq));
break;
case SIOCSAIRONET:
+ error = suser(p->p_ucred, &p->p_acflag);
+ if (error)
+ break;
error = copyin(ifr->ifr_data, &areq, sizeof(areq));
if (error)
break;