- 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;