From bd99f9cf24e16643752b02fb4fa7b48f2124ab4e Mon Sep 17 00:00:00 2001
From: Miklos Szeredi <miklos@szeredi.hu>
Date: Mon, 8 Nov 2010 15:35:35 +0100
Subject: [PATCH] Fix check for read-only fs in mtab update

---
 ChangeLog        |  6 +++++-
 lib/mount_util.c | 13 ++++++++++++-
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 4df581e..7b202dd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,10 @@
+2010-11-08  Miklos Szeredi <miklos@szeredi.hu>
+
+	* Fix check for read-only fs in mtab update
+
 2010-10-14  Miklos Szeredi <miklos@szeredi.hu>
 
-	Use LTLIBICONV when linking libfuse.  This fixes building against
+	* Use LTLIBICONV when linking libfuse.  This fixes building against
 	uclibc + libiconv.  Patch by Natanael Copa
 
 2010-10-05  Miklos Szeredi <miklos@szeredi.hu>
diff --git a/lib/mount_util.c b/lib/mount_util.c
index 9926fe8..dbf9219 100644
--- a/lib/mount_util.c
+++ b/lib/mount_util.c
@@ -50,11 +50,22 @@ static int mtab_needs_update(const char *mnt)
 		if (errno == ENOENT)
 			return 0;
 	} else {
+		uid_t ruid;
+		int err;
+
 		if (S_ISLNK(stbuf.st_mode))
 			return 0;
 
+		ruid = getuid();
+		if (ruid != 0)
+			setreuid(0, -1);
+
 		res = access(_PATH_MOUNTED, W_OK);
-		if (res == -1 && errno == EROFS)
+		err = (res == -1) ? errno : 0;
+		if (ruid != 0)
+			setreuid(ruid, -1);
+
+		if (err == EROFS)
 			return 0;
 	}
 
-- 
2.30.2