From 76de2157cf579c98620535c2d6352096063aa2b1 Mon Sep 17 00:00:00 2001 From: Karel Zak Date: Tue, 6 Mar 2018 14:44:23 +0100 Subject: 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 --- libmount/src/context_mount.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'libmount/src/context_mount.c') diff --git a/libmount/src/context_mount.c b/libmount/src/context_mount.c index 139fb5a28..fc07ca184 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; } -- cgit v1.2.3-55-g7522