This is the mail archive of the cygwin-patches mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]