You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
1.1 KiB
26 lines
1.1 KiB
Author: Phillip Susi <psusi@ubuntu.com> |
|
Subject: fix an incorrect IO error reading SMART status |
|
Description: The read SMART status command's return status |
|
was testing for a success/failure value that included 8 |
|
bits that are "N/A" according to the standard, and required |
|
that they be zeros. At least some drives do not fill them |
|
with zeros, so correct this by masking off the undefined |
|
bits. |
|
|
|
Index: b/atasmart.c |
|
=================================================================== |
|
--- a/atasmart.c |
|
+++ b/atasmart.c |
|
@@ -925,10 +925,10 @@ |
|
/* SAT/USB bridges truncate packets, so we only check for 4F, |
|
* not for 2C on those */ |
|
if ((d->type == SK_DISK_TYPE_ATA_PASSTHROUGH_12 || cmd[3] == htons(0x00C2U)) && |
|
- cmd[4] == htons(0x4F00U)) |
|
+ (cmd[4] & htons(0xFF00U)) == htons(0x4F00U)) |
|
*good = TRUE; |
|
else if ((d->type == SK_DISK_TYPE_ATA_PASSTHROUGH_12 || cmd[3] == htons(0x002CU)) && |
|
- cmd[4] == htons(0xF400U)) |
|
+ (cmd[4] & htons(0xFF00U)) == htons(0xF400U)) |
|
*good = FALSE; |
|
else { |
|
errno = EIO;
|
|
|