Hello.

> brian       2002/03/30 04:30:11 PST

>   Modified files:
>     usr.sbin/ppp         Makefile async.c async.h atm.c bundle.c 
>                          ccp.c ccp.h chap.c chap.h chat.c 
>                          command.c datalink.c datalink.h defs.c 
>                          defs.h ether.c exec.c i4b.c lcp.c lcp.h 
>                          main.c mppe.c physical.c physical.h 
>                          route.c tcp.c tty.c udp.c 

                        :

>   1.126     +13 -17    src/usr.sbin/ppp/bundle.c

In the 6th chunk, a decrement to bundle.unit after succeeding ID0kldload()
is lost. This results in the unit number of tun device set to 1(tun1)
instead of 0(tun0) when if_tun.ko is not yet kldload'ed() before ppp is
invoked. If I exit from ppp and start it again, ppp uses tun0, leaving
tun1 behind. After that and receiving a few megabytes, I've experienced
a mysterious panic (getnewvnode: free vnode isn't). The panic itself, though,
is something similar to that I'm always seeing whenever I didn't kill
pccardd before doing acpiconf -s3, so it might be unrelated to this issue.
Anyway, a patch is attached.

Regards.
Index: usr.sbin/ppp/bundle.c
===================================================================
RCS file: /home/cvs/freebsd/src/usr.sbin/ppp/bundle.c,v
retrieving revision 1.127
diff -u -r1.127 bundle.c
--- usr.sbin/ppp/bundle.c       30 Mar 2002 12:52:55 -0000      1.127
+++ usr.sbin/ppp/bundle.c       14 Apr 2002 05:46:37 -0000
@@ -711,7 +711,8 @@
         * Attempt to load the tunnel interface KLD if it isn't loaded
         * already.
          */
-        loadmodules(LOAD_VERBOSLY, "if_tun", NULL);
+        if (loadmodules(LOAD_VERBOSLY, "if_tun", NULL) > 0)
+               bundle.unit--;
         continue;
       }
 #endif
Index: usr.sbin/ppp/defs.c
===================================================================
RCS file: /home/cvs/freebsd/src/usr.sbin/ppp/defs.c,v
retrieving revision 1.45
diff -u -r1.45 defs.c
--- usr.sbin/ppp/defs.c 30 Mar 2002 12:30:09 -0000      1.45
+++ usr.sbin/ppp/defs.c 14 Apr 2002 05:46:13 -0000
@@ -420,19 +420,26 @@
   }
 }
 
-void
+/* return: number of modules kldload'ed */
+int
 loadmodules(int how, const char *module, ...)
 {
 #if defined(__FreeBSD__) && !defined(NOKLDLOAD)
   va_list ap;
+  int     loaded = 0;
 
   va_start(ap, module);
   while (module != NULL) {
-    if (modfind(module) == -1 && ID0kldload(module) == -1 &&
-        how == LOAD_VERBOSLY)
-      log_Printf(LogWARN, "%s: Cannot load module\n", module);
+    if (modfind(module) == -1) {
+      if (ID0kldload(module) == -1) {
+       if (how == LOAD_VERBOSLY)
+         log_Printf(LogWARN, "%s: Cannot load module\n", module);
+      } else
+       ++loaded;
+    }
     module = va_arg(ap, const char *);
   }
   va_end(ap);
 #endif
+  return loaded;
 }
Index: usr.sbin/ppp/defs.h
===================================================================
RCS file: /home/cvs/freebsd/src/usr.sbin/ppp/defs.h,v
retrieving revision 1.65
diff -u -r1.65 defs.h
--- usr.sbin/ppp/defs.h 30 Mar 2002 12:30:09 -0000      1.65
+++ usr.sbin/ppp/defs.h 14 Apr 2002 05:31:00 -0000
@@ -139,4 +139,4 @@
 extern fd_set *mkfdset(void);
 extern void zerofdset(fd_set *);
 extern void Concatinate(char *, size_t, int, const char *const *);
-extern void loadmodules(int, const char *, ...);
+extern int loadmodules(int, const char *, ...);

Reply via email to