]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
autofs: validate protocol version
authorIan Kent <raven@themaw.net>
Fri, 22 Sep 2023 04:12:13 +0000 (12:12 +0800)
committerChristian Brauner <brauner@kernel.org>
Fri, 22 Sep 2023 08:14:59 +0000 (10:14 +0200)
Move the protocol parameter validation into a seperate function.

Signed-off-by: Ian Kent <raven@themaw.net>
Reviewed-by: Bill O'Donnell <bodonnel@redhat.com>
Message-Id: <20230922041215.13675-7-raven@themaw.net>
Signed-off-by: Christian Brauner <brauner@kernel.org>
fs/autofs/inode.c

index 5e061ce3ab8df044819582c25b714e17869b2f2a..e2026e063d8c7ce971824ba966fc37ed071b234a 100644 (file)
@@ -287,6 +287,28 @@ static struct autofs_sb_info *autofs_alloc_sbi(void)
        return sbi;
 }
 
+static int autofs_validate_protocol(struct autofs_sb_info *sbi)
+{
+       /* Test versions first */
+       if (sbi->max_proto < AUTOFS_MIN_PROTO_VERSION ||
+           sbi->min_proto > AUTOFS_MAX_PROTO_VERSION) {
+               pr_err("kernel does not match daemon version "
+                      "daemon (%d, %d) kernel (%d, %d)\n",
+                      sbi->min_proto, sbi->max_proto,
+                      AUTOFS_MIN_PROTO_VERSION, AUTOFS_MAX_PROTO_VERSION);
+               return -EINVAL;
+       }
+
+       /* Establish highest kernel protocol version */
+       if (sbi->max_proto > AUTOFS_MAX_PROTO_VERSION)
+               sbi->version = AUTOFS_MAX_PROTO_VERSION;
+       else
+               sbi->version = sbi->max_proto;
+       sbi->sub_version = AUTOFS_PROTO_SUBVERSION;
+
+       return 0;
+}
+
 int autofs_fill_super(struct super_block *s, void *data, int silent)
 {
        struct inode *root_inode;
@@ -335,22 +357,8 @@ int autofs_fill_super(struct super_block *s, void *data, int silent)
                goto fail_dput;
        }
 
-       /* Test versions first */
-       if (sbi->max_proto < AUTOFS_MIN_PROTO_VERSION ||
-           sbi->min_proto > AUTOFS_MAX_PROTO_VERSION) {
-               pr_err("kernel does not match daemon version "
-                      "daemon (%d, %d) kernel (%d, %d)\n",
-                      sbi->min_proto, sbi->max_proto,
-                      AUTOFS_MIN_PROTO_VERSION, AUTOFS_MAX_PROTO_VERSION);
+       if (autofs_validate_protocol(sbi))
                goto fail_dput;
-       }
-
-       /* Establish highest kernel protocol version */
-       if (sbi->max_proto > AUTOFS_MAX_PROTO_VERSION)
-               sbi->version = AUTOFS_MAX_PROTO_VERSION;
-       else
-               sbi->version = sbi->max_proto;
-       sbi->sub_version = AUTOFS_PROTO_SUBVERSION;
 
        if (pgrp_set) {
                sbi->oz_pgrp = find_get_pid(pgrp);