libahci: Fix bug in storing EM messages
PATCH 1/1 libahci: Fix bug in storing EM messages
In function ahci_store_em_buffer(), if the input (signed char*) buffer contains negative data, the constructed 32-bit long message data may be wrong.
Signed-off-by Harry Zhang <[email protected]>
--- drivers/ata/libahci.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
drivers/ata/libahci.c +3 -2
@@ -324,6 +324,7 @@ static ssize_t ahci_store_em_buffer(struct device *dev,struct ahci_host_priv *hpriv = ap->host->private_data;void __iomem *mmio = hpriv->mmio;void __iomem *em_mmio = mmio + hpriv->em_loc; +const unsigned char *msg_buf = buf;u32 em_ctl, msg;unsigned long flags;int i;
@@ -343,8 +344,8 @@ static ssize_t ahci_store_em_buffer(struct device *dev, }for (i =0 ; i < size; i +=4 ) { - msg = buf[i] | buf[i +1 ] <<8 | - buf[i +2 ] <<16 | buf[i +3 ] <<24 ; + msg = msg_buf[i] | msg_buf[i +1 ] <<8 | + msg_buf[i +2 ] <<16 | msg_buf[i +3 ] <<24 ;writel (msg, em_mmio + i); }
Signature · 1 line
1.6.4.2
Quoted 3 lines · Harry Zhang
In function
ahci_store_em_buffer(), if the input (signed char*) buffer contains negative data, the constructed 32-bit long message data may be wrong.
Explaining why it was wrong would be nice. Also is adding a comment explaining why the uchar pointer is needed. Nothing fancy, just simple /* avoid sign extension */ should do.
Other than that, Acked-by: Tejun Heo <[email protected]>
Thanks.
Signature · 1 line
tejun
Jeff Garzik
AppliedQuoted 8 lines · Harry Zhang
In function
ahci_store_em_buffer(), if the input (signed char*) buffer contains negative data, the constructed 32-bit long message data may be wrong.Signed-off-by Harry Zhang<[email protected]>--- drivers/ata/libahci.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
applied