libata: prevent devices with blank model names from being DMA blacklisted
authorAndrew Paprocki <andrew@ishiboo.com>
Mon, 15 Oct 2007 19:43:12 +0000 (15:43 -0400)
committerJeff Garzik <jeff@garzik.org>
Mon, 15 Oct 2007 19:44:22 +0000 (15:44 -0400)
The strn_pattern_cmp routine does not handle a blank name parameter
properly. The only patterns which should match a blank name are "*"
and an explicit "". If the function is passed a blank name in current
code, it will always match against the patt parameter. The bug manifests
itself as the device with the empty model name always matching the first
device in the DMA blacklist, forcing it to revert to PIO mode.

Signed-off-by: Andrew Paprocki <andrew@ishiboo.com>
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
drivers/ata/libata-core.c

index d69699973b5845b3a4cfbcb10a8894592dba901f..68699b3e799843249086f7ae4f944b6dd893fe1a 100644 (file)
@@ -4014,8 +4014,14 @@ int strn_pattern_cmp(const char *patt, const char *name, int wildchar)
        p = strchr(patt, wildchar);
        if (p && ((*(p + 1)) == 0))
                len = p - patt;
-       else
+       else {
                len = strlen(name);
+               if (!len) {
+                       if (!*patt)
+                               return 0;
+                       return -1;
+               }
+       }
 
        return strncmp(patt, name, len);
 }