[Patch] Segfault on unaligned lseek() on /dev/sdX (was: [ITP] ddrescue 1.3)

Christian Franke Christian.Franke@t-online.de
Sat May 19 17:18:00 GMT 2007


Pedro Alves wrote:
> ...
> I'm just looking at fhandler_floopy.cc for the first time,
> but, isn't there the possibility that bytes_left can be a bit too big
> for alloca?  

AFAIK not: bytes_left is always less than bytes_per_sector.
The _dev_floppy class is only used for Floppy (512), HD (usually 512) 
and CD (2048) devices.


> It looks like that the raw_read call is there to
> advance the position by the needed amount (moving back is forbidden
> a bit above).  Perhaps it would be better to read in a loop with
> read amount limited by the size of the buffer:
>
> while more bytes
> do
>     read minimum of bytes left or size of buffer
>     if couldn't read, bail out. (oooops internal state broken now).
> done
>

BTW: This "oooops" may be an issue in the current code.
The lseek() call returns success if raw_read() fails.
This may possibly lead to undetected read errors in very rare cases.

Christian



More information about the Cygwin-patches mailing list