Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 14 Apr 2002 15:29:28 +0900
From:      qhwt@myrealbox.com
To:        brian@FreeBSD.org
Cc:        current@freebsd.org
Subject:   Re: cvs commit: src/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 netgraph.c netgraph.h physical.c physical.h route.c tcp.c ...
Message-ID:  <20020414062928.GA378.qhwt@myrealbox.com>
In-Reply-To: <200203301230.g2UCUBK41067@freefall.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help

--azLHFNyN32YCQGCU
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

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.

--azLHFNyN32YCQGCU
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="ppp.diff"

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 *, ...);

--azLHFNyN32YCQGCU--

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-current" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20020414062928.GA378.qhwt>