2.1.56 zero-file length MSDOS FS bug

Alberto Vignani (alberto.vignani@torino.alpcom.it)
Tue, 07 Oct 1997 20:02:54 +0000 (GMT)


Hi.

I put in the following archive a copy of my '/usr/bin/fromdos' program
together with a small DOS (CR-LF) text file.

What happens to me in 2.1.56 (I don't count 2.1.57 because it is a
total disaster, and I didn't notice this bug before 2.1.56) is that
the result is correct if the files are on an ext2 FS, while on a
MSDOS (==VFAT) FS the result is always a file of zero length.

You can imagine how happy I was discovering that djgpp under dosemu
destroyed my files ;-) .. well, I found a test case, and it's a kernel
bug, probably with unlink or rename.

Please have a look at it.

begin 644 dosbug.tar.gz
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
!````
`
end

Trace follows.

execve("/temp/fromdos", ["/temp/fromdos", "sol.ini"], [/* 47 vars */]) = 0
mmap(0, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x40007000
mprotect(0x40000000, 20682, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
mprotect(0x8048000, 6819, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
stat("/etc/ld.so.cache", {st_mode=S_IFREG|0644, st_size=10274, ...}) = 0
open("/etc/ld.so.cache", O_RDONLY) = 3
mmap(0, 10274, PROT_READ, MAP_SHARED, 3, 0) = 0x40008000
close(3) = 0
stat("/etc/ld.so.preload", 0xbffff9d0) = -1 ENOENT (No such file or directory)
open("/usr/X11R6/lib/libc.so.5", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/lib/libc.so.5", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3"..., 4096) = 4096
mmap(0, 770048, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x4000b000
mmap(0x4000b000, 537343, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 3, 0) = 0x4000b000
mmap(0x4008f000, 19948, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 3, 0x83000) = 0x4008f000
mmap(0x40094000, 207064, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x40094000
close(3) = 0
mprotect(0x4000b000, 537343, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
munmap(0x40008000, 10274) = 0
mprotect(0x8048000, 6819, PROT_READ|PROT_EXEC) = 0
mprotect(0x4000b000, 537343, PROT_READ|PROT_EXEC) = 0
mprotect(0x40000000, 20682, PROT_READ|PROT_EXEC) = 0
personality(PER_LINUX) = 0
geteuid() = 0
getuid() = 0
getgid() = 0
getegid() = 0
sigaction(SIGINT, {0x8048df0, [], SA_INTERRUPT|SA_NOMASK|SA_ONESHOT}, {SIG_DFL}) = 0
sigaction(SIGTERM, {0x8048df0, [], SA_INTERRUPT|SA_NOMASK|SA_ONESHOT}, {SIG_DFL}) = 0
brk(0x804ad2c) = 0x804ad2c
brk(0x804b000) = 0x804b000
stat("/etc/locale/C/libc.cat", 0xbffff54c) = -1 ENOENT (No such file or directory)
stat("/usr/share/locale/C/libc.cat", 0xbffff54c) = -1 ENOENT (No such file or directory)
stat("/usr/share/locale/libc/C", 0xbffff54c) = -1 ENOENT (No such file or directory)
stat("/usr/share/locale/C/libc.cat", 0xbffff54c) = -1 ENOENT (No such file or directory)
stat("/usr/local/share/locale/C/libc.cat", 0xbffff54c) = -1 ENOENT (No such file or directory)
stat("sol.ini", {st_mode=S_IFREG|0644, st_size=33, ...}) = 0
getpid() = 133
stat("./a00133", 0xbffff9b4) = -1 ENOENT (No such file or directory)
open("sol.ini", O_RDONLY) = 3
open("./a00133", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 4
brk(0x8050000) = 0x8050000
brk(0x8055000) = 0x8055000
read(3, "[Solitaire]\r\nOptions=32\r\nBac"..., 16384) = 33
read(3, "", 16384) = 0
close(3) = 0
write(4, "[Solitaire]\nOptions=32\nBack=6\n"..., 30) = 30
close(4) = 0
unlink("sol.ini") = 0
rename("./a00133", "sol.ini") = 0
chmod("sol.ini", 0100644) = 0
_exit(0) = ?

Alberto