[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20100110.224253.00558907.davem@davemloft.net>
Date: Sun, 10 Jan 2010 22:42:53 -0800 (PST)
From: David Miller <davem@...emloft.net>
To: jengelh@...ozas.de
Cc: sparclinux@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: fstat seems broken on sparc64
From: Jan Engelhardt <jengelh@...ozas.de>
Date: Mon, 11 Jan 2010 00:15:17 +0100 (CET)
> On Sunday 2010-01-10 22:11, David Miller wrote:
>>
>>> libc6 2.10.2-4
>>
>>Perfect, now you just have to audit what changed between the -2 and
>>the -4 package to find the bug :-)
>
> I really do not believe you when you say your glibc is not affected.
Why not :-)
davem@...set:~$ dpkg-query -W | grep libc6-sparc64
libc6-sparc64 2.10.2-2
davem@...set:~$ cat fstat_test.c
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
struct stat sb;
int fd = open("foo", O_RDWR | O_CREAT, 0666);
if (fd < 0)
abort();
if (fstat(fd, &sb) < 0)
abort();
printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
if (stat("foo", &sb) < 0)
abort();
printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
if (fstatat(AT_FDCWD, "foo", &sb, 0) < 0)
abort();
printf("%lu.%lu\n", sb.st_mtim.tv_sec, sb.st_mtim.tv_nsec);
return 0;
}
davem@...set:~$ gcc -m64 -o fstat_test fstat_test.c
davem@...set:~$ ./fstat_test
1261510364.0
1261510364.0
1261510364.0
davem@...set:~$
But, indeed when I run it under strace64 it goes:
open("foo", O_RDWR|O_CREAT, 0666) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
fstat(1, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 2), ...}) = 0
I wonder why I get a sane output from the test program even though
it's not using fstat64.
> - I now found and fixed the problem, here is the patch for
> you to study (as code speaks louder)
>
> Index: glibc-2.10.1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
> ===================================================================
> --- glibc-2.10.1.orig/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
> +++ glibc-2.10.1/sysdeps/unix/sysv/linux/sparc/sparc64/fxstat.c
> @@ -1 +1 @@
> -#include "../../fxstat.c"
> +#include "../../i386/fxstat.c"
>
> (Hint: Compare with sparc64/lxstat.c
Thanks a lot!
Please submit this to the glibc/eglibc folks for inclusion!
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists