Enhance persistent flags handling in cryptsetup.

With --persistent option, write only flags actually
used during activation. In other words we will not
store anymore flags not supported by running kernel.
This commit is contained in:
Ondrej Kozina
2018-02-23 12:00:50 +01:00
committed by Milan Broz
parent f6cb8e4118
commit 471f781022

View File

@@ -1077,6 +1077,17 @@ out:
return r;
}
static int update_persistent_flags(struct crypt_device *cd, const char *name, uint32_t activation_flags)
{
struct crypt_active_device cad;
/* write only flags not filtered by current kernel during activation */
if (crypt_get_active_device(cd, name, &cad))
return -EINVAL;
return crypt_persistent_flags_set(cd, CRYPT_FLAGS_ACTIVATION, cad.flags & activation_flags);
}
static int action_open_luks(void)
{
struct crypt_device *cd = NULL;
@@ -1139,10 +1150,9 @@ static int action_open_luks(void)
}
out:
if (r >= 0 && opt_persistent &&
crypt_persistent_flags_set(cd, CRYPT_FLAGS_ACTIVATION, activate_flags))
update_persistent_flags(cd, activated_name, activate_flags))
log_err(_("Device activated but cannot make flags persistent.\n"));
crypt_safe_free(key);
crypt_safe_free(password);
crypt_free(cd);