summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@redhat.com>2010-09-27 22:34:21 -0400
committerPetr Baudis <pasky@suse.cz>2010-11-20 18:58:52 +0100
commit42c95109b2e56489a19c64910bd6127a11e2279b (patch)
treec94cc2d401ad1ae8083ac95ae1bf83e69db62385
parent1e0bcc2ee3019028aa39dd710e32dd8158395328 (diff)
Properly convert f_fsid in statvfs
(cherry picked from commit c21cc9bcb38a87ff638d1099ca871d94a2192b31)
-rw-r--r--ChangeLog6
-rw-r--r--sysdeps/unix/sysv/linux/internal_statvfs.c3
2 files changed, 8 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 8fba8a6ea6..24259f75a7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2010-09-27 Andreas Schwab <schwab@redhat.com>
+
+ [BZ #11611]
+ * sysdeps/unix/sysv/linux/internal_statvfs.c (INTERNAL_STATVFS):
+ Mask out sign-bit copies when constructing f_fsid.
+
2010-11-19 Ulrich Drepper <drepper@gmail.com>
* sysdeps/unix/sysv/linux/i386/bits/mman.h: Define MAP_HUGETLB.
diff --git a/sysdeps/unix/sysv/linux/internal_statvfs.c b/sysdeps/unix/sysv/linux/internal_statvfs.c
index 28c1cb691f..6066c86993 100644
--- a/sysdeps/unix/sysv/linux/internal_statvfs.c
+++ b/sysdeps/unix/sysv/linux/internal_statvfs.c
@@ -214,7 +214,8 @@ INTERNAL_STATVFS (const char *name, struct STATVFS *buf,
buf->f_files = fsbuf->f_files;
buf->f_ffree = fsbuf->f_ffree;
if (sizeof (buf->f_fsid) == sizeof (fsbuf->f_fsid))
- buf->f_fsid = (fsbuf->f_fsid.__val[0]
+ buf->f_fsid = ((fsbuf->f_fsid.__val[0]
+ & ((1UL << (8 * sizeof (fsbuf->f_fsid.__val[0]))) - 1))
| ((unsigned long int) fsbuf->f_fsid.__val[1]
<< (8 * (sizeof (buf->f_fsid)
- sizeof (fsbuf->f_fsid.__val[0])))));