Re: [hatari-devel] Disk driver memory access checks (was: Cycle exact setting affects nf_scsidrv) |
[ Thread Index |
Date Index
| More lists.tuxfamily.org/hatari-devel Archives
]
- To: hatari-devel@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [hatari-devel] Disk driver memory access checks (was: Cycle exact setting affects nf_scsidrv)
- From: Uwe Seimet <Uwe.Seimet@xxxxxxxxx>
- Date: Sat, 13 Oct 2018 10:35:08 +0200
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1539419708; s=strato-dkim-0002; d=seimet.de; h=In-Reply-To:References:Message-ID:Subject:To:From:Date: X-RZG-CLASS-ID:X-RZG-AUTH:From:Subject:Sender; bh=k2/QZBqYZRGvf8++Q4Ta2A38N0aJ5CFjyZFmv3fyYT8=; b=OAfNPVoEKpaJri2LfFDjzOvpK/7cuCgda2SOzoYufO5GTkCvk54kzbs6Py/IUuaiWF +CFKP4VuyDIqbdZJFHmHxi6965BfDgKk8TQLtXYViObgb1bjm4fpjUQiCcJq4x9zi3rx y2qgRDCHIq+gHSo3cyIPziS5zx9pW/VfMXCpZsA3zudCMAnFm5O/YHjtQDFU9cW/e7Y8 ThEwaGBvtpTA9bXa93e3aeA33Bp+nXE1JQRhsynHI6XeQW/UsrV/HRbB16Jku74azydS j5wl2elgQdIKKLYzWUaXRYd3/n1fazPFQ6R6+9iKunmbc0BaYrn9WSZ1+dfWJvIQHCQ1 /KUg==
Hi,
I'm not sure whether a modified patch is required. This is the patched
code:
if ( !dir && !STMemory_CheckAreaType ( st_buffer, transfer_len, ABFLAG_RAM ) )
{
!dir means read access, i.e. in case of a write operation nothing is checked at
all, meaning any source address is allowed for writes.
Best regards
Uwe
> Hi,
>
> On 10/13/18 10:15 AM, Uwe Seimet wrote:
> > Please see the attachment. This is the result in case of an invalid RAM
> > address when reading: >
> > scsidrv_inout: handle=0, dir=0, cmd_len=10, buffer=0x5632a9f5c9e0,
> > transfer_len=65536, sense_buffer=0x5632a91dbfb0, timeout=10000,
> > cmd=$28:$00:$00:$00:$00:$00:$00:$00:$80:$00ERROR: pBank flags mismatch: 0x2 & 0x1 (RAM = 0x1)
> > WARN : scsidrv_interface_fetures: Invalid RAM range 0xe00000+65536
> > -> -1
>
> Thanks!
>
>
> > Note that writing is allowed, it does not have to be a RAM address in
> > this case.
>
> If you mean that write could also be from ROM area, you need to use:
> ABFLAG_RAM | ABFLAG_ROM
>
> (see what the other disk drivers do.)
>
> New patch?
>
>
> - Eero
>
> Ps. Thomas, I didn't see Hatari IDE driver doing these checks, but on
> quick check, I didn't find it doing any buffer transfers, only
> byte/word/long register reads & writes...?
>
> > Best regards
> >
> > Uwe
> >
> >> Hi,
> >>
> >> On 10/12/18 12:25 AM, Uwe Seimet wrote:
> >>>> Is st_buffer data something that could be program code read from
> >>>> the SCSI disk? If yes, all caches would need to be flushed for that.
> >>>
> >>> Yes, you are probably right. Just checked that I'm also flushing both in
> >>> HDDRIVER. One more updated patch attached. The sense data buffer and
> >>> the buffer for the bus name do not need flushing the instruction cache
> >>> because you cannot transfer program code this way.
> >>
> >> Thanks, I pushed you patch:
> >> https://hg.tuxfamily.org/mercurialroot/hatari/hatari/rev/d6355bb2dc25
> >>
> >> When checking that, I noticed that nf_scsidrv.c doesn't validate
> >> that the memory addresses specified through the NF API are valid,
> >> like GEMDOS HD driver does:
> >> -----------------------------
> >> /* Check that read is to valid memory area */
> >> if ( !STMemory_CheckAreaType ( Addr, Size, ABFLAG_RAM ) )
> >> {
> >> Log_Printf(LOG_WARN, "GEMDOS Fread() failed due to
> >> invalid RAM range 0x%x+%i\n", Addr, Size);
> >> Regs[REG_D0] = GEMDOS_ERANGE;
> >> return true;
> >> }
> >> -----------------------------
> >>
> >> Could you send also a (tested) patch that adds those checks?
> >>
> >>
> >> - Eero
> >>
> >>
>
>