54 lines
2.1 KiB
Diff
54 lines
2.1 KiB
Diff
From: "Eric W. Biederman" <ebiederm@xmission.com>
|
|
Date: Mon, 28 Jul 2014 17:36:04 -0700
|
|
Subject: [4/5] mnt: Change the default remount atime from relatime to the
|
|
existing value
|
|
Origin: https://git.kernel.org/linus/ffbc6f0ead47fa5a1dc9642b0331cb75c20a640e
|
|
|
|
Since March 2009 the kernel has treated the state that if no
|
|
MS_..ATIME flags are passed then the kernel defaults to relatime.
|
|
|
|
Defaulting to relatime instead of the existing atime state during a
|
|
remount is silly, and causes problems in practice for people who don't
|
|
specify any MS_...ATIME flags and to get the default filesystem atime
|
|
setting. Those users may encounter a permission error because the
|
|
default atime setting does not work.
|
|
|
|
A default that does not work and causes permission problems is
|
|
ridiculous, so preserve the existing value to have a default
|
|
atime setting that is always guaranteed to work.
|
|
|
|
Using the default atime setting in this way is particularly
|
|
interesting for applications built to run in restricted userspace
|
|
environments without /proc mounted, as the existing atime mount
|
|
options of a filesystem can not be read from /proc/mounts.
|
|
|
|
In practice this fixes user space that uses the default atime
|
|
setting on remount that are broken by the permission checks
|
|
keeping less privileged users from changing more privileged users
|
|
atime settings.
|
|
|
|
Cc: stable@vger.kernel.org
|
|
Acked-by: Serge E. Hallyn <serge.hallyn@ubuntu.com>
|
|
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
|
|
---
|
|
fs/namespace.c | 8 ++++++++
|
|
1 file changed, 8 insertions(+)
|
|
|
|
--- a/fs/namespace.c
|
|
+++ b/fs/namespace.c
|
|
@@ -2475,6 +2475,14 @@ long do_mount(const char *dev_name, cons
|
|
if (flags & MS_RDONLY)
|
|
mnt_flags |= MNT_READONLY;
|
|
|
|
+ /* The default atime for remount is preservation */
|
|
+ if ((flags & MS_REMOUNT) &&
|
|
+ ((flags & (MS_NOATIME | MS_NODIRATIME | MS_RELATIME |
|
|
+ MS_STRICTATIME)) == 0)) {
|
|
+ mnt_flags &= ~MNT_ATIME_MASK;
|
|
+ mnt_flags |= path.mnt->mnt_flags & MNT_ATIME_MASK;
|
|
+ }
|
|
+
|
|
flags &= ~(MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_ACTIVE | MS_BORN |
|
|
MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT |
|
|
MS_STRICTATIME);
|