aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/ata
diff options
context:
space:
mode:
authorAndrew Paprocki <andrew@ishiboo.com>2007-10-15 15:43:12 -0400
committerJeff Garzik <jeff@garzik.org>2007-10-15 15:44:22 -0400
commit317b50b8ad2f544a12c8f29d99a91225e8c5db1d (patch)
tree43af04f1f7eedd4dca63ad401c4ca65bc4247d5c /drivers/ata
parent8f73a6880183dd11b97d70e738cf82d15931d98b (diff)
libata: prevent devices with blank model names from being DMA blacklisted
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>
Diffstat (limited to 'drivers/ata')
-rw-r--r--drivers/ata/libata-core.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index d69699973b58..68699b3e7998 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -4014,8 +4014,14 @@ int strn_pattern_cmp(const char *patt, const char *name, int wildchar)
4014 p = strchr(patt, wildchar); 4014 p = strchr(patt, wildchar);
4015 if (p && ((*(p + 1)) == 0)) 4015 if (p && ((*(p + 1)) == 0))
4016 len = p - patt; 4016 len = p - patt;
4017 else 4017 else {
4018 len = strlen(name); 4018 len = strlen(name);
4019 if (!len) {
4020 if (!*patt)
4021 return 0;
4022 return -1;
4023 }
4024 }
4019 4025
4020 return strncmp(patt, name, len); 4026 return strncmp(patt, name, len);
4021} 4027}