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. Cc: Brian De Wolf <bldewolf@xxxxxxx> Signed-off-by: Benjamin Marzinski <bmarzins@xxxxxxxxxx> --- libmultipath/blacklist.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/libmultipath/blacklist.c b/libmultipath/blacklist.c index 3f9e80b..05f1697 100644 --- a/libmultipath/blacklist.c +++ b/libmultipath/blacklist.c @@ -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; -- 1.8.3.1 -- dm-devel mailing list dm-devel@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/dm-devel