summaryrefslogtreecommitdiffstats
path: root/abs/core-testing/udev/usb_id-fix.patch
diff options
context:
space:
mode:
Diffstat (limited to 'abs/core-testing/udev/usb_id-fix.patch')
-rw-r--r--abs/core-testing/udev/usb_id-fix.patch107
1 files changed, 107 insertions, 0 deletions
diff --git a/abs/core-testing/udev/usb_id-fix.patch b/abs/core-testing/udev/usb_id-fix.patch
new file mode 100644
index 0000000..35fb2e1
--- /dev/null
+++ b/abs/core-testing/udev/usb_id-fix.patch
@@ -0,0 +1,107 @@
+From: Kay Sievers <kay.sievers@vrfy.org>
+Date: Mon, 15 Oct 2007 18:38:20 +0000 (+0200)
+Subject: usb_id: fail if vendor/product can not be retrieved
+X-Git-Url: http://git.kernel.org/?p=linux%2Fhotplug%2Fudev.git;a=commitdiff_plain;h=963033472f8d2aab0bf77147b916de8f3b0b5450
+
+usb_id: fail if vendor/product can not be retrieved
+
+Thanks to Daniel Drake for identifying the bug.
+---
+
+diff --git a/extras/usb_id/usb_id.c b/extras/usb_id/usb_id.c
+index d36a27b..5fb030d 100644
+--- a/extras/usb_id/usb_id.c
++++ b/extras/usb_id/usb_id.c
+@@ -1,7 +1,5 @@
+ /*
+- * usb_id.c
+- *
+- * Identify an USB (block) device
++ * usb_id - identify an USB device
+ *
+ * Copyright (c) 2005 SUSE Linux Products GmbH, Germany
+ *
+@@ -224,8 +222,6 @@ static int usb_id(const char *devpath)
+ struct sysfs_device *dev;
+ struct sysfs_device *dev_interface;
+ struct sysfs_device *dev_usb;
+- const char *scsi_model, *scsi_vendor, *scsi_type, *scsi_rev;
+- const char *usb_model = NULL, *usb_vendor = NULL, *usb_rev, *usb_serial;
+ const char *if_class, *if_subclass;
+ int if_class_num;
+ int protocol = 0;
+@@ -271,6 +267,7 @@ static int usb_id(const char *devpath)
+ /* mass storage */
+ if (protocol == 6 && !use_usb_info) {
+ struct sysfs_device *dev_scsi;
++ const char *scsi_model, *scsi_vendor, *scsi_type, *scsi_rev;
+ int host, bus, target, lun;
+
+ /* get scsi device */
+@@ -321,40 +318,50 @@ static int usb_id(const char *devpath)
+ }
+
+ fallback:
+- /* Fallback to USB vendor & device */
++ /* fallback to USB vendor & device */
+ if (vendor_str[0] == '\0') {
++ const char *usb_vendor = NULL;
++
+ if (!use_num_info)
+- if (!(usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "manufacturer")))
+- dbg("No USB vendor string found, using idVendor");
++ usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "manufacturer");
++
++ if (!usb_vendor)
++ usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "idVendor");
+
+ if (!usb_vendor) {
+- if (!(usb_vendor = sysfs_attr_get_value(dev_usb->devpath, "idVendor"))) {
+- dbg("No USB vendor information available\n");
+- sprintf(vendor_str,"0000");
+- }
++ info("No USB vendor information available");
++ return 1;
+ }
+- set_str(vendor_str,usb_vendor, sizeof(vendor_str) - 1);
++ set_str(vendor_str, usb_vendor, sizeof(vendor_str)-1);
+ }
+-
++
+ if (model_str[0] == '\0') {
++ const char *usb_model = NULL;
++
+ if (!use_num_info)
+- if (!(usb_model = sysfs_attr_get_value(dev_usb->devpath, "product")))
+- dbg("No USB model string found, using idProduct");
+-
++ usb_model = sysfs_attr_get_value(dev_usb->devpath, "product");
++
++ if (!usb_model)
++ usb_model = sysfs_attr_get_value(dev_usb->devpath, "idProduct");
++
+ if (!usb_model) {
+- if (!(usb_model = sysfs_attr_get_value(dev_usb->devpath, "idProduct")))
+- dbg("No USB model information available\n"); sprintf(model_str,"0000");
++ dbg("No USB model information available");
++ return 1;
+ }
+- set_str(model_str, usb_model, sizeof(model_str) - 1);
++ set_str(model_str, usb_model, sizeof(model_str)-1);
+ }
+
+ if (revision_str[0] == '\0') {
++ const char *usb_rev;
++
+ usb_rev = sysfs_attr_get_value(dev_usb->devpath, "bcdDevice");
+ if (usb_rev)
+ set_str(revision_str, usb_rev, sizeof(revision_str)-1);
+ }
+
+ if (serial_str[0] == '\0') {
++ const char *usb_serial;
++
+ usb_serial = sysfs_attr_get_value(dev_usb->devpath, "serial");
+ if (usb_serial)
+ set_str(serial_str, usb_serial, sizeof(serial_str)-1);
+