about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@redhat.com>2010-09-27 22:34:21 -0400
committerAndreas Schwab <schwab@redhat.com>2010-12-01 15:35:19 +0100
commit24990266ba20fcff9fe4f08646350fdece96f27a (patch)
tree301704fee45f2a90e0f0f0fe840bcf4558927cd9
parent482d2a54b9709e15e254dff5670f3f3fe60ccfa0 (diff)
downloadglibc-24990266ba20fcff9fe4f08646350fdece96f27a.tar.gz
glibc-24990266ba20fcff9fe4f08646350fdece96f27a.tar.xz
glibc-24990266ba20fcff9fe4f08646350fdece96f27a.zip
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 87dcc427f5..45fc5eb5f2 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 59b173ed73..63184d0254 100644
--- a/sysdeps/unix/sysv/linux/internal_statvfs.c
+++ b/sysdeps/unix/sysv/linux/internal_statvfs.c
@@ -221,7 +221,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])))));