]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
cryptsetup-util: introduce crypt_free_and_replace()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 16 Sep 2022 18:24:26 +0000 (03:24 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 17 Sep 2022 19:57:10 +0000 (04:57 +0900)
src/shared/cryptsetup-util.h
src/shared/dissect-image.c

index fc80edb4112a5084293e9448229b002d5d9b1594..b1ce07ec8a50c1254ffed06045ee7c5aa54ef486 100644 (file)
@@ -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);
index 274c33c35e4b49eeff7d79c0c34b6e8e91bd9aff..5eaff64f87f30ef4cd2f80afadc2f5e77b53cb56 100644 (file)
@@ -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)