[Patch] Segfault on unaligned lseek() on /dev/sdX (was: [ITP] ddrescue 1.3)
Pedro Alves
pedro_alves@portugalmail.pt
Sat May 19 10:09:00 GMT 2007
Christopher Faylor escreveu:
> On Fri, May 18, 2007 at 09:02:15PM +0200, Christian Franke wrote:
>> Hi,
>>
>> Cygwin 1.5.24-2 segfaults on unaligned lseek() on raw block devices with
>> sector size >512 bytes.
>>
>> Testcases:
>> $ dd skip=1000 bs=2047 if=/dev/scd0 of=/dev/null
>>
>> $ ddrescue -c 1 /dev/scd0 file.iso
>>
>>
>> This is due to a fixed 512 byte buffer in fhandler_dev_floppy::lseek().
>> It is still present in HEAD revision.
>>
>> The attached patch should fix. It should work for any sector size.
>> (Smoke-)tested with 1.5.24-2 (too busy to test with current CVS, sorry).
>>
>> 2007-05-18 Christian Franke <franke@computer.org>
>>
>> * fhandler_floppy.cc (fhandler_dev_floppy::lseek): Fixed segfault on
>> unaligned seek due to fixed size buffer.
>>
>
> It seems like this could be done without the heavyweight use of malloc,
> like use an automatic array of length 512 + 4 and calculate an aligned
> address from that.
>
Or use alloca instead?
- char buf[512];
+ char *buf = (char *) alloca (512);
Cheers,
Pedro Alves
More information about the Cygwin-patches
mailing list