scfc / rpms / libatasmart

Forked from rpms/libatasmart 3 years ago
Clone
Blob Blame History Raw
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;