blob: 9b32bba5dd632fd17eca9a1492d9c4644299b150 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
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.
Bug: https://bugs.freedesktop.org/show_bug.cgi?id=61998
Bug-Ubuntu: https://launchpad.net/bugs/1143495
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;
|