Hello!

The iprofd contained in isdnutils 3.0 use the same buffer and buffer size
in GETting and SETting via IOCTL IIOC[GS]ETPRF the virtual modem profiles.

The kernel use different sizes, so iprofd set incorrect data, resulting in a
hang of the ttyI from 1 to last. I suppose the right way to implement profile
save & restore will be kernel-version independent and maybe I will work on
that, but at the moment I made the IIOCGETPRF and IIOCSETPRF IOCTLs symmetric:

patch (for 2.4.0-prerelease)



--- drivers/isdn/isdn_common.c.orig     Wed Jan  3 20:39:30 2001
+++ drivers/isdn/isdn_common.c  Wed Jan  3 20:42:16 2001
@@ -1512,7 +1512,7 @@
                                        int i;
 
                                        if ((ret = verify_area(VERIFY_READ, (void *) 
arg,
-                                       (ISDN_MODEM_NUMREG + ISDN_MSNLEN)
+                                       (ISDN_MODEM_NUMREG + ISDN_MSNLEN + 
+ISDN_LMSNLEN)
                                                   * ISDN_MAX_CHANNELS)))
                                                return ret;
 
@@ -1521,6 +1521,9 @@
                                                     ISDN_MODEM_NUMREG))
                                                        return -EFAULT;
                                                p += ISDN_MODEM_NUMREG;
+                                               if 
+(copy_from_user(dev->mdm.info[i].emu.plmsn, p, ISDN_LMSNLEN))
+                                                       return -EFAULT;
+                                               p += ISDN_LMSNLEN;
                                                if 
(copy_from_user(dev->mdm.info[i].emu.pmsn, p, ISDN_MSNLEN))
                                                        return -EFAULT;
                                                p += ISDN_MSNLEN;



Ciao,
 Andrea Baldoni
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/

Reply via email to