Merge tag 'for-linus-5.14-rc6-tag' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / drivers / md / dm-verity-target.c
index 808a98e..d3e76ae 100644 (file)
@@ -893,6 +893,28 @@ out:
        return r;
 }
 
+static inline bool verity_is_verity_mode(const char *arg_name)
+{
+       return (!strcasecmp(arg_name, DM_VERITY_OPT_LOGGING) ||
+               !strcasecmp(arg_name, DM_VERITY_OPT_RESTART) ||
+               !strcasecmp(arg_name, DM_VERITY_OPT_PANIC));
+}
+
+static int verity_parse_verity_mode(struct dm_verity *v, const char *arg_name)
+{
+       if (v->mode)
+               return -EINVAL;
+
+       if (!strcasecmp(arg_name, DM_VERITY_OPT_LOGGING))
+               v->mode = DM_VERITY_MODE_LOGGING;
+       else if (!strcasecmp(arg_name, DM_VERITY_OPT_RESTART))
+               v->mode = DM_VERITY_MODE_RESTART;
+       else if (!strcasecmp(arg_name, DM_VERITY_OPT_PANIC))
+               v->mode = DM_VERITY_MODE_PANIC;
+
+       return 0;
+}
+
 static int verity_parse_opt_args(struct dm_arg_set *as, struct dm_verity *v,
                                 struct dm_verity_sig_opts *verify_args)
 {
@@ -916,16 +938,12 @@ static int verity_parse_opt_args(struct dm_arg_set *as, struct dm_verity *v,
                arg_name = dm_shift_arg(as);
                argc--;
 
-               if (!strcasecmp(arg_name, DM_VERITY_OPT_LOGGING)) {
-                       v->mode = DM_VERITY_MODE_LOGGING;
-                       continue;
-
-               } else if (!strcasecmp(arg_name, DM_VERITY_OPT_RESTART)) {
-                       v->mode = DM_VERITY_MODE_RESTART;
-                       continue;
-
-               } else if (!strcasecmp(arg_name, DM_VERITY_OPT_PANIC)) {
-                       v->mode = DM_VERITY_MODE_PANIC;
+               if (verity_is_verity_mode(arg_name)) {
+                       r = verity_parse_verity_mode(v, arg_name);
+                       if (r) {
+                               ti->error = "Conflicting error handling parameters";
+                               return r;
+                       }
                        continue;
 
                } else if (!strcasecmp(arg_name, DM_VERITY_OPT_IGN_ZEROES)) {
@@ -1242,7 +1260,7 @@ bad:
 
 static struct target_type verity_target = {
        .name           = "verity",
-       .version        = {1, 7, 0},
+       .version        = {1, 8, 0},
        .module         = THIS_MODULE,
        .ctr            = verity_ctr,
        .dtr            = verity_dtr,