From: Yu Watanabe Date: Fri, 16 Sep 2022 18:24:26 +0000 (+0900) Subject: cryptsetup-util: introduce crypt_free_and_replace() X-Git-Tag: v252-rc1~161 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cf610e1d873d6bf1a6017597ef50a6cf68f18313;p=thirdparty%2Fsystemd.git cryptsetup-util: introduce crypt_free_and_replace() --- diff --git a/src/shared/cryptsetup-util.h b/src/shared/cryptsetup-util.h index fc80edb4112..b1ce07ec8a5 100644 --- a/src/shared/cryptsetup-util.h +++ b/src/shared/cryptsetup-util.h @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ #pragma once +#include "alloc-util.h" #include "json.h" #include "macro.h" @@ -69,6 +70,10 @@ int dlopen_cryptsetup(void); DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct crypt_device *, crypt_free, NULL); DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct crypt_device *, sym_crypt_free, NULL); +/* Be careful, this works with dlopen_cryptsetup(), that is, it calls sym_crypt_free() instead of crypt_free(). */ +#define crypt_free_and_replace(a, b) \ + free_and_replace_full(a, b, sym_crypt_free) + void cryptsetup_enable_logging(struct crypt_device *cd); int cryptsetup_set_minimal_pbkdf(struct crypt_device *cd); diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c index 274c33c35e4..5eaff64f87f 100644 --- a/src/shared/dissect-image.c +++ b/src/shared/dissect-image.c @@ -2016,8 +2016,7 @@ static int verity_partition( if (r < 0) return r; - sym_crypt_free(cd); - cd = TAKE_PTR(existing_cd); + crypt_free_and_replace(cd, existing_cd); } } if (r >= 0)