From 0b5426da12c1762100fbaf56bd2793f9b3329395 Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Thu, 3 Sep 2020 16:15:09 +0200 Subject: [PATCH] Add explicit ARG_SET_TRUE macro. and dissalow ARG_SET() query macro to be abused to change the value. --- src/cryptsetup.c | 14 +++++++------- src/cryptsetup_reencrypt.c | 2 +- src/integritysetup.c | 2 +- src/utils_arg_macros.h | 6 +++++- src/veritysetup.c | 2 +- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/cryptsetup.c b/src/cryptsetup.c index a51bb815..06b93c0d 100644 --- a/src/cryptsetup.c +++ b/src/cryptsetup.c @@ -1243,7 +1243,7 @@ static int _luksFormat(struct crypt_device **r_cd, char **r_password, size_t *r_ /* Never call pwquality if using null cipher */ if (tools_is_cipher_null(cipher)) - ARG_SET(OPT_FORCE_PASSWORD_ID) = true; + ARG_SET_TRUE(OPT_FORCE_PASSWORD_ID); if ((r = crypt_init(&cd, header_device))) { if (ARG_SET(OPT_HEADER_ID)) @@ -1653,7 +1653,7 @@ static int luksAddUnboundKey(void) /* Never call pwquality if using null cipher */ if (tools_is_cipher_null(crypt_get_cipher(cd))) - ARG_SET(OPT_FORCE_PASSWORD_ID) = true; + ARG_SET_TRUE(OPT_FORCE_PASSWORD_ID); keysize = ARG_UINT32(OPT_KEY_SIZE_ID) / 8; r = set_pbkdf_params(cd, crypt_get_type(cd)); @@ -1720,7 +1720,7 @@ static int action_luksAddKey(void) /* Never call pwquality if using null cipher */ if (tools_is_cipher_null(crypt_get_cipher(cd))) - ARG_SET(OPT_FORCE_PASSWORD_ID) = true; + ARG_SET_TRUE(OPT_FORCE_PASSWORD_ID); keysize = crypt_get_volume_key_size(cd); r = set_pbkdf_params(cd, crypt_get_type(cd)); @@ -1823,7 +1823,7 @@ static int action_luksChangeKey(void) /* Never call pwquality if using null cipher */ if (tools_is_cipher_null(crypt_get_cipher(cd))) - ARG_SET(OPT_FORCE_PASSWORD_ID) = true; + ARG_SET_TRUE(OPT_FORCE_PASSWORD_ID); r = set_pbkdf_params(cd, crypt_get_type(cd)); if (r) { @@ -3651,7 +3651,7 @@ int main(int argc, const char **argv) device_type = "luks2"; } else if (!strcmp(aname, "refresh")) { aname = OPEN_ACTION; - ARG_SET(OPT_REFRESH_ID) = true; + ARG_SET_TRUE(OPT_REFRESH_ID); } else if (ARG_SET(OPT_TYPE_ID)) device_type = ARG_STR(OPT_TYPE_ID); @@ -3815,8 +3815,8 @@ int main(int argc, const char **argv) poptGetInvocationName(popt_context)); if (ARG_SET(OPT_DEBUG_ID) || ARG_SET(OPT_DEBUG_JSON_ID)) { - ARG_SET(OPT_DEBUG_ID) = true; - ARG_SET(OPT_VERBOSE_ID) = true; + ARG_SET_TRUE(OPT_DEBUG_ID); + ARG_SET_TRUE(OPT_VERBOSE_ID); crypt_set_debug_level(ARG_SET(OPT_DEBUG_JSON_ID)? CRYPT_DEBUG_JSON : CRYPT_DEBUG_ALL); dbg_version_and_cmd(argc, argv); } diff --git a/src/cryptsetup_reencrypt.c b/src/cryptsetup_reencrypt.c index 3988900f..ead558e6 100644 --- a/src/cryptsetup_reencrypt.c +++ b/src/cryptsetup_reencrypt.c @@ -1720,7 +1720,7 @@ int main(int argc, const char **argv) poptGetInvocationName(popt_context)); if (ARG_SET(OPT_DEBUG_ID)) { - ARG_SET(OPT_VERBOSE_ID) = true; + ARG_SET_TRUE(OPT_VERBOSE_ID); crypt_set_debug_level(CRYPT_DEBUG_ALL); dbg_version_and_cmd(argc, argv); } diff --git a/src/integritysetup.c b/src/integritysetup.c index 8f0618b2..a42e1441 100644 --- a/src/integritysetup.c +++ b/src/integritysetup.c @@ -622,7 +622,7 @@ int main(int argc, const char **argv) poptGetInvocationName(popt_context)); if (ARG_SET(OPT_DEBUG_ID)) { - ARG_SET(OPT_VERBOSE_ID) = true; + ARG_SET_TRUE(OPT_VERBOSE_ID); crypt_set_debug_level(CRYPT_DEBUG_ALL); dbg_version_and_cmd(argc, argv); } diff --git a/src/utils_arg_macros.h b/src/utils_arg_macros.h index ca532ff3..6a3c574e 100644 --- a/src/utils_arg_macros.h +++ b/src/utils_arg_macros.h @@ -24,7 +24,7 @@ #include -#define ARG_SET(X) tool_core_args[(X)].set +#define ARG_SET(X) !!tool_core_args[(X)].set #define ARG_STR(X) ({ \ assert(tool_core_args[(X)].type == CRYPT_ARG_STRING); \ @@ -51,6 +51,10 @@ tool_core_args[(X)].u.u64_value; \ }) +#define ARG_SET_TRUE(X) do { \ + tool_core_args[(X)].set = true; \ +} while (0) + #define ARG_SET_STR(X, Y) \ do { \ char *str; \ diff --git a/src/veritysetup.c b/src/veritysetup.c index 5c431532..55aa5425 100644 --- a/src/veritysetup.c +++ b/src/veritysetup.c @@ -549,7 +549,7 @@ int main(int argc, const char **argv) poptGetInvocationName(popt_context)); if (ARG_SET(OPT_DEBUG_ID)) { - ARG_SET(OPT_VERBOSE_ID) = true; + ARG_SET_TRUE(OPT_VERBOSE_ID); crypt_set_debug_level(CRYPT_DEBUG_ALL); dbg_version_and_cmd(argc, argv); }