libmutipath: allow blanks in device blacklist
authorBenjamin Marzinski <bmarzins@redhat.com>
Sun, 8 Mar 2015 03:31:39 +0000 (21:31 -0600)
committerChristophe Varoqui <christophe.varoqui@opensvc.com>
Sun, 8 Mar 2015 09:40:33 +0000 (10:40 +0100)
As Brian De Wolf noticed, multipath crashes if you don't have both
vendor and product specified in a device blacklist entry. This patch
makes device blacklists work when either the vendor or the product is
blank. If both are missing, the entry is ignored.

Signed-off-by: Benjamin Marzinski <bmarzins@redhat.com>
libmultipath/blacklist.c

index 3f9e80b..05f1697 100644 (file)
@@ -135,8 +135,12 @@ _blacklist_exceptions_device(vector elist, char * vendor, char * product)
        struct blentry_device * ble;
 
        vector_foreach_slot (elist, ble, i) {
-               if (!regexec(&ble->vendor_reg, vendor, 0, NULL, 0) &&
-                   !regexec(&ble->product_reg, product, 0, NULL, 0))
+               if (!ble->vendor && !ble->product)
+                       continue;
+               if ((!ble->vendor ||
+                    !regexec(&ble->vendor_reg, vendor, 0, NULL, 0)) &&
+                   (!ble->product ||
+                    !regexec(&ble->product_reg, product, 0, NULL, 0)))
                        return 1;
        }
        return 0;
@@ -149,8 +153,12 @@ _blacklist_device (vector blist, char * vendor, char * product)
        struct blentry_device * ble;
 
        vector_foreach_slot (blist, ble, i) {
-               if (!regexec(&ble->vendor_reg, vendor, 0, NULL, 0) &&
-                   !regexec(&ble->product_reg, product, 0, NULL, 0))
+               if (!ble->vendor && !ble->product)
+                       continue;
+               if ((!ble->vendor ||
+                    !regexec(&ble->vendor_reg, vendor, 0, NULL, 0)) &&
+                   (!ble->product ||
+                    !regexec(&ble->product_reg, product, 0, NULL, 0)))
                        return 1;
        }
        return 0;