On Fri, 2019-01-11 at 13:01 -0500, Douglas Gilbert wrote:
> On 2019-01-10 6:22 p.m., Bart Van Assche wrote:
> > Hi Doug,
> >
> > Have you ever tried to run the libiscsi conformance tests against
> > the scsi_debug driver? I tried the following:
> >
> > modprobe scsi_debug delay=0 max_luns=3
> > dev=$(for f in
> > /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/[0-9]*/block/*;
> > do echo $f; break; done)
> > dev=/dev/$(basename $dev)
> > libiscsi/test-tool/iscsi-test-cu --dataloss --allow-sanitize "$dev"
> >
> > That test triggers the following output:
> >
> > BUG: unable to handle kernel paging request at ffffa8d741235e00
> > PGD 13b141067 P4D 13b141067 PUD 13b146067 PMD 6fc5a067 PTE 0
> > Oops: 0002 [#1] SMP PTI
> > CPU: 3 PID: 4967 Comm: iscsi-test-cu Not tainted 4.18.0-13-generic
> > #14-Ubuntu
> > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-1
> > 04/01/2014
> > RIP: 0010:memcpy_erms+0x6/0x10
>
> Since memory corruption errors have been found elsewhere in
> lk 5.0-rc1 and a fix looks like it is pending, I will leave this
> one alone as I can't replicate it.
Hi Doug,
I can replicate this crash easily. I also noticed that this crash only occurs if
the scsi_debug driver is loaded with fake_rw=0. It does not occur with
fake_rw=1.
It seems like the following code in resp_write_same() assumes that fake_storep
!= NULL?
/* if ndob then zero 1 logical block, else fetch 1 logical block */
if (ndob) {
memset(fake_storep + lba_off, 0, sdebug_sector_size);
ret = 0;
} else
ret = fetch_to_dev_buffer(scp, fake_storep + lba_off,
sdebug_sector_size);
Bart.