[PATCH] xfs: reject completely bogus remount options
Eric Sandeen
sandeen at redhat.com
Tue Jun 5 11:41:36 CDT 2012
There's a long comment about handling non-remountable
options in xfs_fs_remount, but nothing addresses the case
of completely bogus mount options at remount time, which
can lead to some severe strangeness:
# for I in `seq 1 10`; do mount -o remount,noacl /mnt/test2; done
# for I in `seq 1 10`; do mount -o remount,badoption /mnt/test2; done
# grep sdb4 /etc/mtab
/dev/sdb4 /mnt/test2 xfs rw,noacl,noacl,noacl,noacl,noacl,noacl,noacl,noacl,noacl,noacl,noacl,badoption,badoption,badoption,badoption,badoption,badoption,badoption,badoption,badoption,badoption 0 0
This is a bit of a hack, but we can re-use xfs_parseargs()
with a dummy mount struct to just vet all of the remount
options which were passed in. With this, we get a saner
result:
[44898.102990] EXT4-fs (sdb4): Unrecognized mount option "badoption" or missing value
if we try to remount with something ridiculous.
In the long run we should probably revamp a lot of the mount option
handling...
Signed-off-by: Eric Sandeen <sandeen at redhat.com>
---
diff --git a/fs/xfs/linux-2.6/xfs_super.c b/fs/xfs/linux-2.6/xfs_super.c
index 9a72dda..0402f9c 100644
--- a/fs/xfs/linux-2.6/xfs_super.c
+++ b/fs/xfs/linux-2.6/xfs_super.c
@@ -1157,11 +1157,22 @@ xfs_fs_remount(
int *flags,
char *options)
{
- struct xfs_mount *mp = XFS_M(sb);
+ struct xfs_mount *mp = XFS_M(sb), dummy_mp;
substring_t args[MAX_OPT_ARGS];
char *p;
int error;
+ /*
+ * Check all the mount options presented to be sure
+ * there's nothing too crazy in there. Non-remountable
+ * but valid options are a different issue.
+ */
+ memset(&dummy_mp, 0, sizeof(struct xfs_mount));
+ dummy_mp.m_super = sb;
+ error = xfs_parseargs(&dummy_mp, options);
+ if (error)
+ return -error;
+
while ((p = strsep(&options, ",")) != NULL) {
int token;
More information about the xfs
mailing list