[PATCH] tipar char driver (divide by zero)

From: Romain Lievin
Date: Fri Apr 16 2004 - 01:27:48 EST


Hi,

a set of 2 patches (2.4 & 2.6) about the tipar.c char driver. It fixes a divide-by-zero error when we try to read/write data after setting timeout to 0.

Please apply...

Romain.
============================[cut here]==========================
diff -Naur linux-2.4.23/drivers/char/tipar.c linux/drivers/char/tipar.c
--- linux-2.4.23/drivers/char/tipar.c 2003-06-01 05:06:24.000000000 +0200
+++ linux/drivers/char/tipar.c 2004-03-21 22:19:54.000000000 +0100
@@ -66,7 +66,7 @@
/*
* Version Information
*/
-#define DRIVER_VERSION "1.18"
+#define DRIVER_VERSION "1.19"
#define DRIVER_AUTHOR "Romain Lievin <roms@xxxxxxxxxxxxxx>"
#define DRIVER_DESC "Device driver for TI/PC parallel link cables"
#define DRIVER_LICENSE "GPL"
@@ -364,11 +364,14 @@

switch (cmd) {
case IOCTL_TIPAR_DELAY:
- delay = (int)arg; //get_user(delay, &arg);
- break;
+ delay = (int)arg; //get_user(delay, &arg);
+ break;
case IOCTL_TIPAR_TIMEOUT:
- timeout = (int)arg; //get_user(timeout, &arg);
- break;
+ if (arg != 0)
+ timeout = (int)arg;
+ else
+ retval = -EINVAL;
+ break;
default:
retval = -ENOTTY;
break;
@@ -402,7 +405,10 @@
str = get_options(str, ARRAY_SIZE(ints), ints);

if (ints[0] > 0) {
- timeout = ints[1];
+ if (ints[1] != 0)
+ timeout = ints[1];
+ else
+ printk("tipar: wrong timeout value (0), using default value instead.");
if (ints[0] > 1) {
delay = ints[2];
}

============================[cut here]==========================
diff -Naur linux-2.6.3/drivers/char/tipar.c linux/drivers/char/tipar.c
--- linux-2.6.3/drivers/char/tipar.c 2004-02-18 04:58:48.000000000 +0100
+++ linux/drivers/char/tipar.c 2004-03-21 22:11:11.000000000 +0100
@@ -67,7 +67,7 @@
/*
* Version Information
*/
-#define DRIVER_VERSION "1.17"
+#define DRIVER_VERSION "1.19"
#define DRIVER_AUTHOR "Romain Lievin <roms@xxxxxxxxxxxxxx>"
#define DRIVER_DESC "Device driver for TI/PC parallel link cables"
#define DRIVER_LICENSE "GPL"
@@ -361,10 +361,13 @@

switch (cmd) {
case IOCTL_TIPAR_DELAY:
- delay = (int)arg; //get_user(delay, &arg);
- break;
+ delay = (int)arg; //get_user(delay, &arg);
+ break;
case IOCTL_TIPAR_TIMEOUT:
- timeout = (int)arg; //get_user(timeout, &arg);
+ if (arg != 0)
+ timeout = (int)arg;
+ else
+ retval = -EINVAL;
break;
default:
retval = -ENOTTY;
@@ -399,7 +402,10 @@
str = get_options(str, ARRAY_SIZE(ints), ints);

if (ints[0] > 0) {
- timeout = ints[1];
+ if (ints[1] != 0)
+ timeout = ints[1];
+ else
+ printk("tipar: wrong timeout value (0), using default value instead.");
if (ints[0] > 1) {
delay = ints[2];
}

--
Romain Liévin (roms): <romain@xxxxxxxxxx>
Web site: http://www.lievin.net
"Linux, y'a moins bien mais c'est plus cher !"






-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/