diff --git a/lib/Makemodule.am b/lib/Makemodule.am index 5e21d6e2..3c503d14 100644 --- a/lib/Makemodule.am +++ b/lib/Makemodule.am @@ -50,6 +50,7 @@ libcryptsetup_la_SOURCES = \ lib/bitops.h \ lib/nls.h \ lib/libcryptsetup.h \ + lib/libcryptsetup_macros.h \ lib/utils.c \ lib/utils_benchmark.c \ lib/utils_crypt.c \ diff --git a/lib/internal.h b/lib/internal.h index 10066ae3..f50c4a19 100644 --- a/lib/internal.h +++ b/lib/internal.h @@ -46,38 +46,13 @@ #include "libcryptsetup.h" -/* to silent gcc -Wcast-qual for const cast */ -#define CONST_CAST(x) (x)(uintptr_t) +#include "libcryptsetup_macros.h" -#define SHIFT_4K 12 -#define SECTOR_SHIFT 9 -#define SECTOR_SIZE (1 << SECTOR_SHIFT) -#define MAX_SECTOR_SIZE 4096 /* min page size among all platforms */ -#define DEFAULT_DISK_ALIGNMENT 1048576 /* 1MiB */ -#define DEFAULT_MEM_ALIGNMENT 4096 #define LOG_MAX_LEN 4096 #define MAX_DM_DEPS 32 #define CRYPT_SUBDEV "SUBDEV" /* prefix for sublayered devices underneath public crypt types */ -#define at_least(a, b) ({ __typeof__(a) __at_least = (a); (__at_least >= (b))?__at_least:(b); }) - -#define MISALIGNED(a, b) ((a) & ((b) - 1)) -#define MISALIGNED_4K(a) MISALIGNED((a), 1 << SHIFT_4K) -#define MISALIGNED_512(a) MISALIGNED((a), 1 << SECTOR_SHIFT) -#define NOTPOW2(a) MISALIGNED((a), (a)) - -#ifndef ARRAY_SIZE -# define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) -#endif - -#define MOVE_REF(x, y) \ - do { \ - __typeof__(x) *_px = &(x), *_py = &(y); \ - *_px = *_py; \ - *_py = NULL; \ - } while (0) - #ifndef O_CLOEXEC #define O_CLOEXEC 0 #endif diff --git a/lib/libcryptsetup_macros.h b/lib/libcryptsetup_macros.h new file mode 100644 index 00000000..6b7f02dc --- /dev/null +++ b/lib/libcryptsetup_macros.h @@ -0,0 +1,59 @@ +/* + * Definitions of common constant and generic macros fo libcryptsetup + * + * Copyright (C) 2009-2021 Red Hat, Inc. All rights reserved. + * Copyright (C) 2009-2021 Milan Broz + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef _LIBCRYPTSETUP_MACROS_H +#define _LIBCRYPTSETUP_MACROS_H + +/* to silent gcc -Wcast-qual for const cast */ +#define CONST_CAST(x) (x)(uintptr_t) + +#define UNUSED(x) (void)(x) + +#ifndef ARRAY_SIZE +# define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) +#endif + +#define MOVE_REF(x, y) \ + do { \ + __typeof__(x) *_px = &(x), *_py = &(y); \ + *_px = *_py; \ + *_py = NULL; \ + } while (0) + +#define FREE_AND_NULL(x) do { free(x); x = NULL; } while (0) + +#define AT_LEAST(a, b) ({ __typeof__(a) __at_least = (a); (__at_least >= (b))?__at_least:(b); }) + +#define SHIFT_4K 12 +#define SECTOR_SHIFT 9 +#define SECTOR_SIZE (1 << SECTOR_SHIFT) +#define MAX_SECTOR_SIZE 4096 /* min page size among all platforms */ +#define ROUND_SECTOR(x) (((x) + SECTOR_SIZE - 1) / SECTOR_SIZE) + +#define MISALIGNED(a, b) ((a) & ((b) - 1)) +#define MISALIGNED_4K(a) MISALIGNED((a), 1 << SHIFT_4K) +#define MISALIGNED_512(a) MISALIGNED((a), 1 << SECTOR_SHIFT) +#define NOTPOW2(a) MISALIGNED((a), (a)) + +#define DEFAULT_DISK_ALIGNMENT 1048576 /* 1MiB */ +#define DEFAULT_MEM_ALIGNMENT 4096 + +#endif /* _LIBCRYPTSETUP_MACROS_H */ diff --git a/lib/luks1/keymanage.c b/lib/luks1/keymanage.c index b6575841..3f07595a 100644 --- a/lib/luks1/keymanage.c +++ b/lib/luks1/keymanage.c @@ -800,7 +800,7 @@ int LUKS_generate_phdr(struct luks_phdr *header, if (PBKDF2_temp > (double)UINT32_MAX) return -EINVAL; - header->mkDigestIterations = at_least((uint32_t)PBKDF2_temp, LUKS_MKD_ITERATIONS_MIN); + header->mkDigestIterations = AT_LEAST((uint32_t)PBKDF2_temp, LUKS_MKD_ITERATIONS_MIN); assert(header->mkDigestIterations); r = crypt_pbkdf(CRYPT_KDF_PBKDF2, header->hashSpec, vk->key,vk->keylength, @@ -874,7 +874,7 @@ int LUKS_set_key(unsigned int keyIndex, * Final iteration count is at least LUKS_SLOT_ITERATIONS_MIN */ hdr->keyblock[keyIndex].passwordIterations = - at_least(pbkdf->iterations, LUKS_SLOT_ITERATIONS_MIN); + AT_LEAST(pbkdf->iterations, LUKS_SLOT_ITERATIONS_MIN); log_dbg(ctx, "Key slot %d use %" PRIu32 " password iterations.", keyIndex, hdr->keyblock[keyIndex].passwordIterations); diff --git a/lib/luks2/luks2_internal.h b/lib/luks2/luks2_internal.h index 0095e1c2..86716499 100644 --- a/lib/luks2/luks2_internal.h +++ b/lib/luks2/luks2_internal.h @@ -30,8 +30,6 @@ #include "base64.h" #include "luks2.h" -#define UNUSED(x) (void)(x) - /* override useless forward slash escape when supported by json-c */ #ifndef JSON_C_TO_STRING_NOSLASHESCAPE #define JSON_C_TO_STRING_NOSLASHESCAPE 0 diff --git a/lib/utils_benchmark.c b/lib/utils_benchmark.c index 6b2efdcd..7a9736d8 100644 --- a/lib/utils_benchmark.c +++ b/lib/utils_benchmark.c @@ -196,7 +196,7 @@ int crypt_benchmark_pbkdf_internal(struct crypt_device *cd, PBKDF2_tmp = ((double)pbkdf->iterations * pbkdf->time_ms / 1000.); if (PBKDF2_tmp > (double)UINT32_MAX) return -EINVAL; - pbkdf->iterations = at_least((uint32_t)PBKDF2_tmp, pbkdf_limits.min_iterations); + pbkdf->iterations = AT_LEAST((uint32_t)PBKDF2_tmp, pbkdf_limits.min_iterations); } else { /* Already benchmarked */ if (pbkdf->iterations) { diff --git a/src/cryptsetup.h b/src/cryptsetup.h index b229de7f..24956c81 100644 --- a/src/cryptsetup.h +++ b/src/cryptsetup.h @@ -46,22 +46,15 @@ #include "lib/utils_fips.h" #include "lib/utils_io.h" #include "lib/utils_blkid.h" +#include "lib/libcryptsetup_macros.h" #include "libcryptsetup.h" -#define CONST_CAST(x) (x)(uintptr_t) #define DEFAULT_CIPHER(type) (DEFAULT_##type##_CIPHER "-" DEFAULT_##type##_MODE) -#define SECTOR_SIZE 512 -#define MAX_SECTOR_SIZE 4096 -#define ROUND_SECTOR(x) (((x) + SECTOR_SIZE - 1) / SECTOR_SIZE) #define DEFAULT_WIPE_BLOCK 1048576 /* 1 MiB */ #define MAX_ACTIONS 16 -#ifndef ARRAY_SIZE -# define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) -#endif - /* Common tools */ void tool_log(int level, const char *msg, void *usrptr __attribute__((unused))); void quiet_log(int level, const char *msg, void *usrptr); @@ -123,8 +116,6 @@ int tools_lookup_crypt_device(struct crypt_device *cd, const char *type, /* each utility is required to implement it */ void tools_cleanup(void); -#define FREE_AND_NULL(x) do { free(x); x = NULL; } while (0) - /* Log */ #define log_dbg(x...) crypt_logf(NULL, CRYPT_LOG_DEBUG, x) #define log_std(x...) crypt_logf(NULL, CRYPT_LOG_NORMAL, x)