[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAGnHSEkj2kXNUyQa=MxmLsTJT3P9xrQjpjoMLYiz6xKPB896EA@mail.gmail.com>
Date: Fri, 22 Jul 2016 05:39:27 +0800
From: Tom Yan <tom.ty89@...il.com>
To: Tejun Heo <tj@...nel.org>
Cc: Hannes Reinecke <hare@...e.de>,
Sergei Shtylyov <sergei.shtylyov@...entembedded.com>,
Arnd Bergmann <arnd@...db.de>,
Stephen Rothwell <sfr@...b.auug.org.au>,
linux-ide@...r.kernel.org, linux-scsi@...r.kernel.org,
linux-kernel@...r.kernel.org, linux-next@...r.kernel.org
Subject: Re: [PATCH resend 3/5] libata-scsi: fix overflow in mode page copy
Well, I mean this is happening when ata_mselect_*() calls ata_msense_*():
[tom@...alhost ~]$ 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@...alhost ~]$ cc test.c
[tom@...alhost ~]$ ./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 <tj@...nel.org> wrote:
> Hello,
>
> On Fri, Jul 22, 2016 at 02:41:52AM +0800, tom.ty89@...il.com wrote:
>> From: Tom Yan <tom.ty89@...il.com>
>>
>> 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?
>
>> 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
Powered by blists - more mailing lists