Snap for 11404437 from 6ff16ed4f9c059969356023e02753720be934288 to mainline-conscrypt-release

Change-Id: Id4195036e428b6ec7be9e3b1bf6508772a711f8a
diff --git a/tests/sys_statvfs_test.cpp b/tests/sys_statvfs_test.cpp
index 1761e6a..73b2a96 100644
--- a/tests/sys_statvfs_test.cpp
+++ b/tests/sys_statvfs_test.cpp
@@ -28,9 +28,19 @@
   EXPECT_EQ(4096U, sb.f_bsize);
   EXPECT_EQ(0U, sb.f_bfree);
   EXPECT_EQ(0U, sb.f_ffree);
-  EXPECT_EQ(0U, sb.f_fsid);
   EXPECT_EQ(255U, sb.f_namemax);
 
+  // Linux 6.7 requires that all filesystems have a non-zero fsid.
+  if (sb.f_fsid != 0U) {
+    // fs/libfs.c reuses the filesystem's device number.
+    struct stat proc_sb;
+    ASSERT_EQ(0, stat("/proc", &proc_sb));
+    EXPECT_EQ(proc_sb.st_dev, sb.f_fsid);
+  } else {
+    // Prior to that, the fsid for /proc was just 0.
+    EXPECT_EQ(0U, sb.f_fsid);
+  }
+
   // The kernel sets a private bit to indicate that f_flags is valid.
   // This flag is not supposed to be exposed to libc clients.
   static const uint32_t ST_VALID = 0x0020;
diff --git a/tests/sys_vfs_test.cpp b/tests/sys_vfs_test.cpp
index 242f8d4..363e49b 100644
--- a/tests/sys_vfs_test.cpp
+++ b/tests/sys_vfs_test.cpp
@@ -28,10 +28,21 @@
   EXPECT_EQ(4096, static_cast<int>(sb.f_bsize));
   EXPECT_EQ(0U, sb.f_bfree);
   EXPECT_EQ(0U, sb.f_ffree);
-  EXPECT_EQ(0, sb.f_fsid.__val[0]);
-  EXPECT_EQ(0, sb.f_fsid.__val[1]);
   EXPECT_EQ(255, static_cast<int>(sb.f_namelen));
 
+  // Linux 6.7 requires that all filesystems have a non-zero fsid.
+  if (sb.f_fsid.__val[0] != 0U) {
+    // fs/libfs.c reuses the filesystem's device number.
+    struct stat proc_sb;
+    ASSERT_EQ(0, stat("/proc", &proc_sb));
+    EXPECT_EQ(static_cast<int>(proc_sb.st_dev), sb.f_fsid.__val[0]);
+    EXPECT_EQ(0, sb.f_fsid.__val[1]);
+  } else {
+    // Prior to that, the fsid for /proc was just 0.
+    EXPECT_EQ(0, sb.f_fsid.__val[0]);
+    EXPECT_EQ(0, sb.f_fsid.__val[1]);
+  }
+
   // The kernel sets a private bit to indicate that f_flags is valid.
   // This flag is not supposed to be exposed to libc clients.
   static const uint32_t ST_VALID = 0x0020;
diff --git a/tests/time_test.cpp b/tests/time_test.cpp
index 5f802aa..0dcbcd2 100644
--- a/tests/time_test.cpp
+++ b/tests/time_test.cpp
@@ -167,7 +167,7 @@
 #endif
 }
 
-TEST(time, mktime_EOVERFLOW) {
+TEST(time, DISABLED_mktime_EOVERFLOW) {
   setenv("TZ", "UTC", 1);
 
   struct tm t;