Bug#287824: libc6: fseek() fails and returns -1 without setting errno
Package: libc6
Version: 2.3.2.ds1-18
Severity: normal
The output of the following program is:
"
johan@foo:~/src/test$ ./a.out
fseek: Unknown error 12345
"
Since I set errno to 12345 before making the (failing) fseek() call,
fseek() itself apparently fails without setting errno.
Here's the strace output between opening the file and failing:
"
open("/proc/self/mem", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0600, st_size=0, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fe8000
_llseek(3, 18446744072635807744, [3526037055030344891], SEEK_SET) = -1073743872
dup(2) = 4
fcntl64(4, F_GETFL) = 0x2 (flags O_RDWR)
fstat64(4, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 5), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7fe7000
_llseek(4, 0, 0xbffff768, SEEK_CUR) = -1 ESPIPE (Illegal seek)
write(4, "fseek: Unknown error 12345\n", 27fseek: Unknown error 12345
) = 27
"
And the program itself:
"
/* The point of this program is to try to access one of its own local
* variables by reading it from /proc/self/mem. */
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main(int argc, char *argv[])
{
int variable = 42;
int readvalue = 0;
FILE *mem = fopen("/proc/self/mem", "r");
errno = 12345;
if (fseek(mem, (size_t)&variable, SEEK_SET) != 0) {
perror("fseek");
exit(EXIT_FAILURE);
}
if (fread(&readvalue, sizeof(variable), 1, mem) != 1) {
perror("fread");
exit(EXIT_FAILURE);
}
printf("Localvar=%d, read value=%d\n", variable, readvalue);
return 0;
}
"
-- System Information:
Debian Release: 3.1
APT prefers testing
APT policy: (990, 'testing')
Architecture: i386 (i686)
Kernel: Linux 2.6.9-1-686
Locale: LANG=sv_SE, LC_CTYPE=sv_SE (charmap=ISO-8859-1)
Versions of packages libc6 depends on:
ii libdb1-compat 2.1.3-7 The Berkeley database routines [gl
-- no debconf information
Reply to: