]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Properly convert f_fsid in statvfs
authorAndreas Schwab <schwab@redhat.com>
Tue, 28 Sep 2010 02:34:21 +0000 (22:34 -0400)
committerPetr Baudis <pasky@suse.cz>
Sat, 20 Nov 2010 17:58:52 +0000 (18:58 +0100)
(cherry picked from commit c21cc9bcb38a87ff638d1099ca871d94a2192b31)

ChangeLog
sysdeps/unix/sysv/linux/internal_statvfs.c

index 8fba8a6ea64ad4102ed31a82212b1f5cab9b2166..24259f75a728444fdd0a7a211001afb58218c895 100644 (file)
--- 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.
index 28c1cb691fa1b329cf5fee60cd493b56ff85e4bd..6066c869938d13da59f8c9c23af3ed592051664d 100644 (file)
@@ -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])))));