tree-wide: switch dlopen hooks over to DLSYM_PROTOTYPE()/DLSYM_FUNCTION()
We have these pretty macros, let's use them everywhere (so far we mostly used them for newer additions only). This PR is mostly an excercise in "perl -p -i -e", but there are some special cases: * idn-util.c exposes a function whose prototype in the official library headers is marked with the "const" attribute, and this apparently does not propagate along typeof() correctly and then __builtin_types_compatible_p() fails later because it detects that prototype and original function don't match in prototype. * libbpf removed some symbols in newer versions, hence we need to define some prototypes manually to still be able to build. * libcryptsetup marked a symbol as deprecated we want to use (knowing it is deprecated). By using the macros this is detected by the compiler. We work around it via the usual warning off macros. Note by using these macros we assume that all symbols are known during build time. Which might not be the case. We might need to revert this commit for some symbols if this trips up builds on older distros.
This commit is contained in:
committed by
Luca Boccassi
parent
96069e57a0
commit
9dbabd0a8b
@@ -2,6 +2,7 @@
|
||||
#pragma once
|
||||
|
||||
#include "alloc-util.h"
|
||||
#include "dlfcn-util.h"
|
||||
#include "json.h"
|
||||
#include "macro.h"
|
||||
|
||||
@@ -16,43 +17,43 @@
|
||||
#define CRYPT_ACTIVATE_NO_WRITE_WORKQUEUE (1 << 25)
|
||||
#endif
|
||||
|
||||
extern int (*sym_crypt_activate_by_passphrase)(struct crypt_device *cd, const char *name, int keyslot, const char *passphrase, size_t passphrase_size, uint32_t flags);
|
||||
DLSYM_PROTOTYPE(crypt_activate_by_passphrase);
|
||||
#if HAVE_CRYPT_ACTIVATE_BY_SIGNED_KEY
|
||||
extern int (*sym_crypt_activate_by_signed_key)(struct crypt_device *cd, const char *name, const char *volume_key, size_t volume_key_size, const char *signature, size_t signature_size, uint32_t flags);
|
||||
DLSYM_PROTOTYPE(crypt_activate_by_signed_key);
|
||||
#endif
|
||||
extern int (*sym_crypt_activate_by_volume_key)(struct crypt_device *cd, const char *name, const char *volume_key, size_t volume_key_size, uint32_t flags);
|
||||
extern int (*sym_crypt_deactivate_by_name)(struct crypt_device *cd, const char *name, uint32_t flags);
|
||||
extern int (*sym_crypt_format)(struct crypt_device *cd, const char *type, const char *cipher, const char *cipher_mode, const char *uuid, const char *volume_key, size_t volume_key_size, void *params);
|
||||
extern void (*sym_crypt_free)(struct crypt_device *cd);
|
||||
extern const char *(*sym_crypt_get_cipher)(struct crypt_device *cd);
|
||||
extern const char *(*sym_crypt_get_cipher_mode)(struct crypt_device *cd);
|
||||
extern uint64_t (*sym_crypt_get_data_offset)(struct crypt_device *cd);
|
||||
extern const char *(*sym_crypt_get_device_name)(struct crypt_device *cd);
|
||||
extern const char *(*sym_crypt_get_dir)(void);
|
||||
extern const char *(*sym_crypt_get_type)(struct crypt_device *cd);
|
||||
extern const char *(*sym_crypt_get_uuid)(struct crypt_device *cd);
|
||||
extern int (*sym_crypt_get_verity_info)(struct crypt_device *cd, struct crypt_params_verity *vp);
|
||||
extern int (*sym_crypt_get_volume_key_size)(struct crypt_device *cd);
|
||||
extern int (*sym_crypt_init)(struct crypt_device **cd, const char *device);
|
||||
extern int (*sym_crypt_init_by_name)(struct crypt_device **cd, const char *name);
|
||||
extern int (*sym_crypt_keyslot_add_by_volume_key)(struct crypt_device *cd, int keyslot, const char *volume_key, size_t volume_key_size, const char *passphrase, size_t passphrase_size);
|
||||
extern int (*sym_crypt_keyslot_destroy)(struct crypt_device *cd, int keyslot);
|
||||
extern int (*sym_crypt_keyslot_max)(const char *type);
|
||||
extern int (*sym_crypt_load)(struct crypt_device *cd, const char *requested_type, void *params);
|
||||
extern int (*sym_crypt_resize)(struct crypt_device *cd, const char *name, uint64_t new_size);
|
||||
extern int (*sym_crypt_resume_by_passphrase)(struct crypt_device *cd, const char *name, int keyslot, const char *passphrase, size_t passphrase_size);
|
||||
extern int (*sym_crypt_set_data_device)(struct crypt_device *cd, const char *device);
|
||||
extern void (*sym_crypt_set_debug_level)(int level);
|
||||
extern void (*sym_crypt_set_log_callback)(struct crypt_device *cd, void (*log)(int level, const char *msg, void *usrptr), void *usrptr);
|
||||
DLSYM_PROTOTYPE(crypt_activate_by_volume_key);
|
||||
DLSYM_PROTOTYPE(crypt_deactivate_by_name);
|
||||
DLSYM_PROTOTYPE(crypt_format);
|
||||
DLSYM_PROTOTYPE(crypt_free);
|
||||
DLSYM_PROTOTYPE(crypt_get_cipher);
|
||||
DLSYM_PROTOTYPE(crypt_get_cipher_mode);
|
||||
DLSYM_PROTOTYPE(crypt_get_data_offset);
|
||||
DLSYM_PROTOTYPE(crypt_get_device_name);
|
||||
DLSYM_PROTOTYPE(crypt_get_dir);
|
||||
DLSYM_PROTOTYPE(crypt_get_type);
|
||||
DLSYM_PROTOTYPE(crypt_get_uuid);
|
||||
DLSYM_PROTOTYPE(crypt_get_verity_info);
|
||||
DLSYM_PROTOTYPE(crypt_get_volume_key_size);
|
||||
DLSYM_PROTOTYPE(crypt_init);
|
||||
DLSYM_PROTOTYPE(crypt_init_by_name);
|
||||
DLSYM_PROTOTYPE(crypt_keyslot_add_by_volume_key);
|
||||
DLSYM_PROTOTYPE(crypt_keyslot_destroy);
|
||||
DLSYM_PROTOTYPE(crypt_keyslot_max);
|
||||
DLSYM_PROTOTYPE(crypt_load);
|
||||
DLSYM_PROTOTYPE(crypt_resize);
|
||||
DLSYM_PROTOTYPE(crypt_resume_by_passphrase);
|
||||
DLSYM_PROTOTYPE(crypt_set_data_device);
|
||||
DLSYM_PROTOTYPE(crypt_set_debug_level);
|
||||
DLSYM_PROTOTYPE(crypt_set_log_callback);
|
||||
#if HAVE_CRYPT_SET_METADATA_SIZE
|
||||
extern int (*sym_crypt_set_metadata_size)(struct crypt_device *cd, uint64_t metadata_size, uint64_t keyslots_size);
|
||||
DLSYM_PROTOTYPE(crypt_set_metadata_size);
|
||||
#endif
|
||||
extern int (*sym_crypt_set_pbkdf_type)(struct crypt_device *cd, const struct crypt_pbkdf_type *pbkdf);
|
||||
extern int (*sym_crypt_suspend)(struct crypt_device *cd, const char *name);
|
||||
extern int (*sym_crypt_token_json_get)(struct crypt_device *cd, int token, const char **json);
|
||||
extern int (*sym_crypt_token_json_set)(struct crypt_device *cd, int token, const char *json);
|
||||
DLSYM_PROTOTYPE(crypt_set_pbkdf_type);
|
||||
DLSYM_PROTOTYPE(crypt_suspend);
|
||||
DLSYM_PROTOTYPE(crypt_token_json_get);
|
||||
DLSYM_PROTOTYPE(crypt_token_json_set);
|
||||
#if HAVE_CRYPT_TOKEN_MAX
|
||||
extern int (*sym_crypt_token_max)(const char *type);
|
||||
DLSYM_PROTOTYPE(crypt_token_max);
|
||||
#else
|
||||
/* As a fallback, use the same hard-coded value libcryptsetup uses internally. */
|
||||
static inline int crypt_token_max(_unused_ const char *type) {
|
||||
@@ -62,20 +63,22 @@ static inline int crypt_token_max(_unused_ const char *type) {
|
||||
}
|
||||
#define sym_crypt_token_max(type) crypt_token_max(type)
|
||||
#endif
|
||||
extern crypt_token_info (*sym_crypt_token_status)(struct crypt_device *cd, int token, const char **type);
|
||||
extern int (*sym_crypt_volume_key_get)(struct crypt_device *cd, int keyslot, char *volume_key, size_t *volume_key_size, const char *passphrase, size_t passphrase_size);
|
||||
DLSYM_PROTOTYPE(crypt_token_status);
|
||||
DLSYM_PROTOTYPE(crypt_volume_key_get);
|
||||
#if HAVE_CRYPT_REENCRYPT_INIT_BY_PASSPHRASE
|
||||
extern int (*sym_crypt_reencrypt_init_by_passphrase)(struct crypt_device *cd, const char *name, const char *passphrase, size_t passphrase_size, int keyslot_old, int keyslot_new, const char *cipher, const char *cipher_mode, const struct crypt_params_reencrypt *params);
|
||||
DLSYM_PROTOTYPE(crypt_reencrypt_init_by_passphrase);
|
||||
#endif
|
||||
#if HAVE_CRYPT_REENCRYPT
|
||||
extern int (*sym_crypt_reencrypt)(struct crypt_device *cd, int (*progress)(uint64_t size, uint64_t offset, void *usrptr));
|
||||
DISABLE_WARNING_DEPRECATED_DECLARATIONS;
|
||||
DLSYM_PROTOTYPE(crypt_reencrypt);
|
||||
REENABLE_WARNING;
|
||||
#endif
|
||||
extern int (*sym_crypt_metadata_locking)(struct crypt_device *cd, int enable);
|
||||
DLSYM_PROTOTYPE(crypt_metadata_locking);
|
||||
#if HAVE_CRYPT_SET_DATA_OFFSET
|
||||
extern int (*sym_crypt_set_data_offset)(struct crypt_device *cd, uint64_t data_offset);
|
||||
DLSYM_PROTOTYPE(crypt_set_data_offset);
|
||||
#endif
|
||||
extern int (*sym_crypt_header_restore)(struct crypt_device *cd, const char *requested_type, const char *backup_file);
|
||||
extern int (*sym_crypt_volume_key_keyring)(struct crypt_device *cd, int enable);
|
||||
DLSYM_PROTOTYPE(crypt_header_restore);
|
||||
DLSYM_PROTOTYPE(crypt_volume_key_keyring);
|
||||
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct crypt_device *, crypt_free, NULL);
|
||||
DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct crypt_device *, sym_crypt_free, NULL);
|
||||
|
||||
Reference in New Issue
Block a user