]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
btrfs: reject unknown mount options early
authorQu Wenruo <wqu@suse.com>
Wed, 27 Sep 2023 01:13:15 +0000 (10:43 +0930)
committerDavid Sterba <dsterba@suse.com>
Tue, 3 Oct 2023 23:03:08 +0000 (01:03 +0200)
[BUG]
The following script would allow invalid mount options to be specified
(although such invalid options would just be ignored):

  # mkfs.btrfs -f $dev
  # mount $dev $mnt1 <<< Successful mount expected
  # mount $dev $mnt2 -o junk <<< Failed mount expected
  # echo $?
  0

[CAUSE]
For the 2nd mount, since the fs is already mounted, we won't go through
open_ctree() thus no btrfs_parse_options(), but only through
btrfs_parse_subvol_options().

However we do not treat unrecognized options from valid but irrelevant
options, thus those invalid options would just be ignored by
btrfs_parse_subvol_options().

[FIX]
Add the handling for Opt_err to handle invalid options and error out,
while still ignore other valid options inside btrfs_parse_subvol_options().

Reported-by: Anand Jain <anand.jain@oracle.com>
CC: stable@vger.kernel.org # 4.14+
Signed-off-by: Qu Wenruo <wqu@suse.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/super.c

index 1a093ec0f7e3626cd7468575a1697746f9034dd9..f49e597e197f0822d5bc94ed22fb9312f6981fee 100644 (file)
@@ -954,6 +954,10 @@ static int btrfs_parse_subvol_options(const char *options, char **subvol_name,
 
                        *subvol_objectid = subvolid;
                        break;
+               case Opt_err:
+                       btrfs_err(NULL, "unrecognized mount option '%s'", p);
+                       error = -EINVAL;
+                       goto out;
                default:
                        break;
                }