Re: [PATCH resend 3/5] libata-scsi: fix overflow in mode page copy
From: Tom Yan <hidden>
Date: 2016-07-21 21:39:31
Also in:
linux-next, linux-scsi, lkml
From: Tom Yan <hidden>
Date: 2016-07-21 21:39:31
Also in:
linux-next, linux-scsi, lkml
Well, I mean this is happening when ata_mselect_*() calls ata_msense_*():
[tom@localhost ~]$ cat test.c
#include <stdio.h>
#include <string.h>
typedef unsigned char u8;
int main() {
u8 a[2] = { 0xff, 0xff };
char b[2];
memcpy(b, a, 2);
for (int i=0; i<2; i++) {
printf("%d\n", a[i]);
}
for (int i=0; i<2; i++) {
printf("%d\n", b[i]);
}
}
[tom@localhost ~]$ cc test.c
[tom@localhost ~]$ ./a.out
255
255
-1
-1
Let me know how I should polish the description for this.
On 22 July 2016 at 05:17, Tejun Heo [off-list ref] wrote:Hello, On Fri, Jul 22, 2016 at 02:41:52AM +0800, tom.ty89@gmail.com wrote:quoted
From: Tom Yan <redacted> ata_mselect_*() would initialize a char array for storing a copy of the current mode page. However, if char was actually signed char, overflow could occur.Do you mean sign extension?quoted
For example, `0xff` from def_control_mpage[] would be "truncated" to `-1`. This prevented ata_mselect_control() from working at all, since when it did the read-only bits check, there would always be a mismatch.Heh, the description doesn't really make sense. Are you talking about something like the following? char ar[N]; int i; i = ar[x]; if (i == 0xff) asdf; If so, the description isn't quite right. Thanks. -- tejun