On Sun, 2002/11/10 at 17:40:47 +0000, Dima Dorfman wrote:
> Juli Mallett <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> http://www.tu-bs.de/~y0015675/
              <[EMAIL PROTECTED]> http://people.FreeBSD.org/~tmm/
PGP fingerprint: 1C97 A604 2BD0 E492 51D0  9C0F 1FE6 4F1D 419C 776C
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:
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 */
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

Reply via email to