From: Karel Zak Date: Tue, 26 Mar 2013 15:05:07 +0000 (+0100) Subject: libmount: fix user-mount by root for mount. helpers X-Git-Tag: v2.23-rc2~113 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=17206c059dc2e42e7081079b76eafda68cc9a5b8;p=thirdparty%2Futil-linux.git libmount: fix user-mount by root for mount. helpers Append options like "exec" "suid" and "dev" to mount. helpers command line if the options are in fstab. This is relevant for root user who calls mount(8) for fstab entries with "user,exec" etc. Signed-off-by: Karel Zak --- diff --git a/libmount/src/context_mount.c b/libmount/src/context_mount.c index 00738b4b5e..3b280ab9b6 100644 --- a/libmount/src/context_mount.c +++ b/libmount/src/context_mount.c @@ -275,6 +275,28 @@ static int generate_helper_optstr(struct libmnt_context *cxt, char **optstr) if (!*optstr) return -ENOMEM; + if (cxt->user_mountflags & MNT_MS_USER) { + /* + * This is unnecessary for real user-mounts as mount. + * helpers have to always follow fstab rather than mount + * options on command line. + * + * But if you call mount. as root then the helper follows + * command line. If there is (for example) "user,exec" in fstab + * then we have to manually append the "exec" back to the options + * string, bacause there is nothing like MS_EXEC (we have only + * MS_NOEXEC in mount flags and we don't care about the original + * mount string in libmount for VFS options). + */ + if (!(cxt->mountflags & MS_NOEXEC)) + mnt_optstr_append_option(optstr, "exec", NULL); + if (!(cxt->mountflags & MS_NOSUID)) + mnt_optstr_append_option(optstr, "suid", NULL); + if (!(cxt->mountflags & MS_NODEV)) + mnt_optstr_append_option(optstr, "dev", NULL); + } + + if (cxt->flags & MNT_FL_SAVED_USER) rc = mnt_optstr_set_option(optstr, "user", cxt->orig_user); if (rc)