From: Karel Zak Date: Tue, 6 Mar 2018 13:44:23 +0000 (+0100) Subject: libmount: fix fs pattern usage in mount --all X-Git-Tag: v2.32~52 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=76de2157cf579c98620535c2d6352096063aa2b1;p=thirdparty%2Futil-linux.git libmount: fix fs pattern usage in mount --all The command "mount -a -t " uses the -t as pattern to filter fstab entries. And "mount -t " is used to specify FS type. Unfortunately libmount does not care about this difference when it calls standard mount functionality. The original pattern is still in the library control struct and mnt_do_mount() tries to use it as FS type. This patch is just bugfix. Maybe the long term solution would be to differentiate between the pattern and type in the library API. Now the library follows mount(8) command line and it's little bit messy. Reported-by: Lukas Czerner Signed-off-by: Karel Zak --- diff --git a/libmount/src/context_mount.c b/libmount/src/context_mount.c index 139fb5a287..fc07ca1844 100644 --- a/libmount/src/context_mount.c +++ b/libmount/src/context_mount.c @@ -1175,6 +1175,7 @@ int mnt_context_next_mount(struct libmnt_context *cxt, { struct libmnt_table *fstab, *mtab; const char *o, *tgt; + char *pattern; int rc, mounted = 0; if (ignored) @@ -1254,7 +1255,18 @@ int mnt_context_next_mount(struct libmnt_context *cxt, rc = mnt_context_set_fs(cxt, *fs); if (!rc) { + /* + * "-t " is used to filter out fstab entries, but for ordinary + * mount operation -t means "-t ". We have to zeroize the pattern + * to avoid misinterpretation. + */ + pattern = cxt->fstype_pattern; + cxt->fstype_pattern = NULL; + rc = mnt_context_mount(cxt); + + cxt->fstype_pattern = pattern; + if (mntrc) *mntrc = rc; }