提交 219a9b5e 编写于 作者: J JeongHyeon Lee 提交者: Mike Snitzer

dm verity: allow only one error handling mode

If more than one one handling mode is requested during DM verity table
load, the last requested mode will be used.

Change this to impose more strict checking so that the table load will
fail if more than one error handling mode is requested.
Signed-off-by: NJeongHyeon Lee <jhs2.lee@samsung.com>
Signed-off-by: NMike Snitzer <snitzer@redhat.com>
上级 8615cb65
...@@ -893,6 +893,28 @@ static int verity_alloc_zero_digest(struct dm_verity *v) ...@@ -893,6 +893,28 @@ static int verity_alloc_zero_digest(struct dm_verity *v)
return r; 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, static int verity_parse_opt_args(struct dm_arg_set *as, struct dm_verity *v,
struct dm_verity_sig_opts *verify_args) 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, ...@@ -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); arg_name = dm_shift_arg(as);
argc--; argc--;
if (!strcasecmp(arg_name, DM_VERITY_OPT_LOGGING)) { if (verity_is_verity_mode(arg_name)) {
v->mode = DM_VERITY_MODE_LOGGING; r = verity_parse_verity_mode(v, arg_name);
continue; if (r) {
ti->error = "Conflicting error handling parameters";
} else if (!strcasecmp(arg_name, DM_VERITY_OPT_RESTART)) { return r;
v->mode = DM_VERITY_MODE_RESTART; }
continue;
} else if (!strcasecmp(arg_name, DM_VERITY_OPT_PANIC)) {
v->mode = DM_VERITY_MODE_PANIC;
continue; continue;
} else if (!strcasecmp(arg_name, DM_VERITY_OPT_IGN_ZEROES)) { } else if (!strcasecmp(arg_name, DM_VERITY_OPT_IGN_ZEROES)) {
...@@ -1242,7 +1260,7 @@ static int verity_ctr(struct dm_target *ti, unsigned argc, char **argv) ...@@ -1242,7 +1260,7 @@ static int verity_ctr(struct dm_target *ti, unsigned argc, char **argv)
static struct target_type verity_target = { static struct target_type verity_target = {
.name = "verity", .name = "verity",
.version = {1, 7, 0}, .version = {1, 8, 0},
.module = THIS_MODULE, .module = THIS_MODULE,
.ctr = verity_ctr, .ctr = verity_ctr,
.dtr = verity_dtr, .dtr = verity_dtr,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册