Remove bootp
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 12 Feb 2016 22:48:22 +0000 (17:48 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sat, 13 Feb 2016 17:33:42 +0000 (12:33 -0500)
This was just a source of null pointer faults in the kernel.  bootp was a
function pointer, set to null.  You can crash the kernel with:

/ $ echo "bootp" > /net/ipifc/0/ctl

As Ron aptly put it: "bootp is dead to me."

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/include/ip.h
kern/src/net/devip.c
kern/src/net/ipifc.c

index 2eb6e3c..509d675 100644 (file)
@@ -683,12 +683,6 @@ static inline void ptclcsum_finalize(struct block *bp, unsigned int feat)
 }
 
 /*
- * bootp.c
- */
-char *(*bootp) (struct Ipifc * unused_ipifc);
-int (*bootpread) (char *unused_char_p_t, uint32_t, int);
-
-/*
  *  iprouter.c
  */
 void useriprouter(struct Fs *, struct Ipifc *unused_ipifc, struct block *);
index 1c9362b..94b0818 100644 (file)
@@ -51,7 +51,6 @@ enum {
        Qtopdir = 1,                            /* top level directory */
        Qtopbase,
        Qarp = Qtopbase,
-       Qbootp,
        Qndb,
        Qiproute,
        Qiprouter,
@@ -193,11 +192,6 @@ static int ip1gen(struct chan *c, int i, struct dir *dp)
                case Qarp:
                        p = "arp";
                        break;
-               case Qbootp:
-                       if (bootp == NULL)
-                               return 0;
-                       p = "bootp";
-                       break;
                case Qndb:
                        p = "ndb";
                        len = strlen(f->ndb);
@@ -246,7 +240,6 @@ ipgen(struct chan *c, char *unused_char_p_t, struct dirtab *d, int unused_int,
                        s -= f->np;
                        return ip1gen(c, s + Qtopbase, dp);
                case Qarp:
-               case Qbootp:
                case Qndb:
                case Qlog:
                case Qiproute:
@@ -433,7 +426,6 @@ static struct chan *ipopen(struct chan *c, int omode)
                case Qremote:
                case Qlocal:
                case Qstats:
-               case Qbootp:
                case Qipselftab:
                        if (omode & O_WRITE)
                                error(EPERM, ERROR_FIXME);
@@ -755,8 +747,6 @@ static long ipread(struct chan *ch, void *a, long n, int64_t off)
                        return devdirread(ch, a, n, 0, 0, ipgen);
                case Qarp:
                        return arpread(f->arp, a, offset, n);
-               case Qbootp:
-                       return bootpread(a, offset, n);
                case Qndb:
                        return readstr(offset, a, n, f->ndb);
                case Qiproute:
index c249103..1cfd22b 100644 (file)
@@ -807,8 +807,6 @@ static char *ipifcctl(struct conv *c, char **argv, int argc)
        ifc = (struct Ipifc *)c->ptcl;
        if (strcmp(argv[0], "add") == 0)
                return ipifcadd(ifc, argv, argc, 0, NULL);
-       else if (strcmp(argv[0], "bootp") == 0)
-               return bootp(ifc);
        else if (strcmp(argv[0], "try") == 0)
                return ipifcadd(ifc, argv, argc, 1, NULL);
        else if (strcmp(argv[0], "remove") == 0)