Thread (18 messages) 18 messages, 3 authors, 2016-08-10

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

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help