This patch is written by Herbert Xu and looks correct.

-- Pete

diff -urp -X dontdiff linux-2.4.27-pre2/drivers/usb/hiddev.c 
linux-2.4.27-pre2-usb/drivers/usb/hiddev.c
--- linux-2.4.27-pre2/drivers/usb/hiddev.c      2004-04-14 17:33:16.000000000 -0700
+++ linux-2.4.27-pre2-usb/drivers/usb/hiddev.c  2004-05-15 23:06:11.000000000 -0700
@@ -433,7 +433,9 @@ static int hiddev_ioctl(struct inode *in
                dinfo.product = dev->descriptor.idProduct;
                dinfo.version = dev->descriptor.bcdDevice;
                dinfo.num_applications = hid->maxapplication;
-               return copy_to_user((void *) arg, &dinfo, sizeof(dinfo));
+               if (copy_to_user((void *) arg, &dinfo, sizeof(dinfo)))
+                       return -EFAULT;
+               return 0;
 
        case HIDIOCGFLAG:
                return put_user(list->flags, (int *) arg);
@@ -522,7 +524,9 @@ static int hiddev_ioctl(struct inode *in
 
                rinfo.num_fields = report->maxfield;
 
-               return copy_to_user((void *) arg, &rinfo, sizeof(rinfo));
+               if (copy_to_user((void *) arg, &rinfo, sizeof(rinfo)))
+                       return -EFAULT;
+               return 0;
 
        case HIDIOCGFIELDINFO:
                if (copy_from_user(&finfo, (void *) arg, sizeof(finfo)))
@@ -552,7 +556,9 @@ static int hiddev_ioctl(struct inode *in
                finfo.unit_exponent = field->unit_exponent;
                finfo.unit = field->unit;
 
-               return copy_to_user((void *) arg, &finfo, sizeof(finfo));
+               if (copy_to_user((void *) arg, &finfo, sizeof(finfo)))
+                       return -EFAULT;
+               return 0;
 
        case HIDIOCGUCODE:
                if (copy_from_user(uref, (void *) arg, sizeof(*uref)))
@@ -572,7 +578,9 @@ static int hiddev_ioctl(struct inode *in
 
                uref->usage_code = field->usage[uref->usage_index].hid;
 
-               return copy_to_user((void *) arg, uref, sizeof(*uref));
+               if (copy_to_user((void *) arg, uref, sizeof(*uref)))
+                       return -EFAULT;
+               return 0;
 
        case HIDIOCGUSAGE:
        case HIDIOCSUSAGE:
@@ -656,7 +664,9 @@ static int hiddev_ioctl(struct inode *in
                cinfo.usage = hid->collection[cinfo.index].usage;
                cinfo.level = hid->collection[cinfo.index].level;
 
-               return copy_to_user((void *) arg, &cinfo, sizeof(cinfo));
+               if (copy_to_user((void *) arg, &cinfo, sizeof(cinfo)))
+                       return -EFAULT;
+               return 0;
 
        default:
 


-------------------------------------------------------
This SF.Net email is sponsored by: SourceForge.net Broadband
Sign-up now for SourceForge Broadband and get the fastest
6.0/768 connection for only $19.95/mo for the first 3 months!
http://ads.osdn.com/?ad_id=2562&alloc_id=6184&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to