Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 10 Nov 2002 21:02:16 +0100
From:      Thomas Moestl <tmoestl@gmx.net>
To:        Dima Dorfman <dima@trit.org>
Cc:        current@FreeBSD.org
Subject:   Re: Anyone seeing snp(4) problems?
Message-ID:  <20021110200216.GC333@crow.dom2ip.de>
In-Reply-To: <20021110174046.GS5793@trit.org>
References:  <20021109210938.A73683@FreeBSD.org> <20021110174046.GS5793@trit.org>

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

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

On Sun, 2002/11/10 at 17:40:47 +0000, Dima Dorfman wrote:
> Juli Mallett <jmallett@FreeBSD.org> wrote:
> > I just tried to "sudo watch ttyv1" and ran into the following:
> > 
> > % Fatal trap 12: page fault while in kernel mode
> ..
> > Looks like use of a NULL structure, accessing member at offsetof==0x60?
> > 
> > Anyway, I couldn't get a dump, but I'll keep trying...  Also this kernel
> > is a bit stale, but it'll take a while to get the kernel on this box updated,
> > so I figured I'd go ahead and post now, and try with a new one when I can.
> 
> Is snp loaded from a module, and if it is, are the modules in sync
> with the kernel?  I tried the above command on a -current about a
> month old and it works for me.  If something broke recently, I'm
> interested in tracebacks.

Speaking of snp, what do you think of the attached patches? They fix
three problems:
- the ioctl()s really operate on udev_ts. dev_t is defined differently
  in kernel and userland and is even of different size on 64-bit
  platforms, leading to an ioctl() number mismatch there.
- SNPGTTY returned a kernel pointer instead of a correctly formed
  udev_t 
- watch(8) assumed that FIONREAD takes a size_t *, when it really
  takes just an int *

The last patch updates the manpage accordingly.

	- Thomas

-- 
Thomas Moestl <tmoestl@gmx.net>	http://www.tu-bs.de/~y0015675/
              <tmm@FreeBSD.org>	http://people.FreeBSD.org/~tmm/
PGP fingerprint: 1C97 A604 2BD0 E492 51D0  9C0F 1FE6 4F1D 419C 776C

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

Index: sys/snoop.h
===================================================================
RCS file: /d/ncvs/src/sys/sys/snoop.h,v
retrieving revision 1.21
diff -u -r1.21 snoop.h
--- sys/snoop.h	10 Sep 2002 03:58:44 -0000	1.21
+++ sys/snoop.h	10 Nov 2002 19:49:39 -0000
@@ -30,8 +30,8 @@
  * detached from its current tty.
  */
 
-#define SNPSTTY       _IOW('T', 90, dev_t)
-#define SNPGTTY       _IOR('T', 89, dev_t)
+#define SNPSTTY       _IOW('T', 90, udev_t)
+#define SNPGTTY       _IOR('T', 89, udev_t)
 
 /*
  * These values would be returned by FIONREAD ioctl
Index: dev/snp/snp.c
===================================================================
RCS file: /d/ncvs/src/sys/dev/snp/snp.c,v
retrieving revision 1.73
diff -u -r1.73 snp.c
--- dev/snp/snp.c	10 Apr 2002 03:51:49 -0000	1.73
+++ dev/snp/snp.c	10 Nov 2002 19:49:39 -0000
@@ -544,7 +544,7 @@
 		 * SNPGTTY happy, else we can't know what is device
 		 * major/minor for tty.
 		 */
-		*((dev_t *)data) = snp->snp_target;
+		*((udev_t *)data) = dev2udev(snp->snp_target);
 		break;
 
 	case FIONBIO:

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

Index: watch.c
===================================================================
RCS file: /d/ncvs/src/usr.sbin/watch/watch.c,v
retrieving revision 1.26
diff -u -r1.26 watch.c
--- watch.c	10 Aug 2002 08:42:10 -0000	1.26
+++ watch.c	10 Nov 2002 19:49:09 -0000
@@ -285,8 +285,8 @@
 int
 main(int ac, char *av[])
 {
-	int             res, idata, rv;
-	size_t		nread, b_size = MIN_SIZE;
+	int             res, rv, nread;
+	size_t		b_size = MIN_SIZE;
 	char            ch, *buf, chb[READB_LEN];
 	fd_set          fd_s;
 
@@ -362,7 +362,7 @@
 			if (nread > READB_LEN)
 				nread = READB_LEN;
 			rv = read(std_in, chb, nread);
-			if (rv == -1 || (unsigned)rv != nread)
+			if (rv == -1 || rv != nread)
 				fatal(EX_IOERR, "read (stdin) failed");
 
 			switch (chb[0]) {
@@ -379,7 +379,7 @@
 			default:
 				if (opt_write) {
 					rv = write(snp_io, chb, nread);
-					if (rv == -1 || (unsigned)rv != nread) {
+					if (rv == -1 || rv != nread) {
 						detach_snp();
 						if (opt_no_switch)
 							fatal(EX_IOERR,
@@ -394,10 +394,10 @@
 		if (!FD_ISSET(snp_io, &fd_s))
 			continue;
 
-		if ((res = ioctl(snp_io, FIONREAD, &idata)) != 0)
+		if ((res = ioctl(snp_io, FIONREAD, &nread)) != 0)
 			fatal(EX_OSERR, "ioctl(FIONREAD)");
 
-		switch (idata) {
+		switch (nread) {
 		case SNP_OFLOW:
 			if (opt_reconn_oflow)
 				attach_snp();
@@ -418,7 +418,6 @@
 				cleanup(-1);
 			break;
 		default:
-			nread = (unsigned)idata;
 			if (nread < (b_size / 2) && (b_size / 2) > MIN_SIZE) {
 				free(buf);
 				if (!(buf = (char *) malloc(b_size / 2)))
@@ -432,10 +431,10 @@
 					fatal(EX_UNAVAILABLE, "malloc failed");
 			}
 			rv = read(snp_io, buf, nread);
-			if (rv == -1 || (unsigned)rv != nread)
+			if (rv == -1 || rv != nread)
 				fatal(EX_IOERR, "read failed");
 			rv = write(std_out, buf, nread);
-			if (rv == -1 || (unsigned)rv != nread)
+			if (rv == -1 || rv != nread)
 				fatal(EX_IOERR, "write failed");
 		}
 	}			/* While */

--oyUTqETQ0mS9luUI
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="snp.4.diff"

Index: snp.4
===================================================================
RCS file: /d/ncvs/src/share/man/man4/snp.4,v
retrieving revision 1.24
diff -u -r1.24 snp.4
--- snp.4	13 Aug 2002 14:12:31 -0000	1.24
+++ snp.4	10 Nov 2002 20:02:09 -0000
@@ -36,11 +36,11 @@
 The argument passed to the
 .Xr ioctl 2
 is the address of a variable of type
-.Vt dev_t .
+.Vt udev_t .
 To detach the
 .Nm
 device from a tty use a pointer to a value of
-.Po Vt dev_t Pc Ns \-1 .
+.Dv NOUDEV .
 .Pp
 The
 .Dv SNPGTTY

--oyUTqETQ0mS9luUI--

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?20021110200216.GC333>