Lucas De Marchi | e8fd8fe | 2012-07-18 10:19:48 -0300 | [diff] [blame] | 1 | #pragma once |
Lucas De Marchi | 586fc30 | 2011-11-21 14:35:35 -0200 | [diff] [blame] | 2 | |
| 3 | #include <stdbool.h> |
Lucas De Marchi | 4462c4a | 2011-11-29 18:05:43 -0200 | [diff] [blame] | 4 | #include <stdio.h> |
Lucas De Marchi | 586fc30 | 2011-11-21 14:35:35 -0200 | [diff] [blame] | 5 | #include <syslog.h> |
Gustavo Sverzut Barbieri | d917f27 | 2011-12-10 21:00:19 -0200 | [diff] [blame] | 6 | #include <limits.h> |
Lucas De Marchi | 586fc30 | 2011-11-21 14:35:35 -0200 | [diff] [blame] | 7 | |
Lucas De Marchi | 576dd43 | 2014-10-02 22:03:19 -0300 | [diff] [blame] | 8 | #include <shared/macro.h> |
Lucas De Marchi | 8b7189b | 2014-10-02 22:08:47 -0300 | [diff] [blame] | 9 | #include <shared/missing.h> |
Lucas De Marchi | 576dd43 | 2014-10-02 22:03:19 -0300 | [diff] [blame] | 10 | |
Lucas De Marchi | 586fc30 | 2011-11-21 14:35:35 -0200 | [diff] [blame] | 11 | #include "libkmod.h" |
| 12 | |
Lucas De Marchi | a70c1e7 | 2012-05-23 20:27:23 -0300 | [diff] [blame] | 13 | static _always_inline_ _printf_format_(2, 3) void |
Lucas De Marchi | 586fc30 | 2011-11-21 14:35:35 -0200 | [diff] [blame] | 14 | kmod_log_null(struct kmod_ctx *ctx, const char *format, ...) {} |
| 15 | |
| 16 | #define kmod_log_cond(ctx, prio, arg...) \ |
| 17 | do { \ |
| 18 | if (kmod_get_log_priority(ctx) >= prio) \ |
Jan Engelhardt | 87beacc | 2011-12-20 16:27:40 +0100 | [diff] [blame] | 19 | kmod_log(ctx, prio, __FILE__, __LINE__, __func__, ## arg);\ |
Lucas De Marchi | 586fc30 | 2011-11-21 14:35:35 -0200 | [diff] [blame] | 20 | } while (0) |
| 21 | |
| 22 | #ifdef ENABLE_LOGGING |
| 23 | # ifdef ENABLE_DEBUG |
Lucas De Marchi | ae6df84 | 2011-11-25 01:05:30 -0200 | [diff] [blame] | 24 | # define DBG(ctx, arg...) kmod_log_cond(ctx, LOG_DEBUG, ## arg) |
Lucas De Marchi | 586fc30 | 2011-11-21 14:35:35 -0200 | [diff] [blame] | 25 | # else |
Lucas De Marchi | ae6df84 | 2011-11-25 01:05:30 -0200 | [diff] [blame] | 26 | # define DBG(ctx, arg...) kmod_log_null(ctx, ## arg) |
Lucas De Marchi | 586fc30 | 2011-11-21 14:35:35 -0200 | [diff] [blame] | 27 | # endif |
Lucas De Marchi | ae6df84 | 2011-11-25 01:05:30 -0200 | [diff] [blame] | 28 | # define INFO(ctx, arg...) kmod_log_cond(ctx, LOG_INFO, ## arg) |
| 29 | # define ERR(ctx, arg...) kmod_log_cond(ctx, LOG_ERR, ## arg) |
Lucas De Marchi | 586fc30 | 2011-11-21 14:35:35 -0200 | [diff] [blame] | 30 | #else |
Lucas De Marchi | ae6df84 | 2011-11-25 01:05:30 -0200 | [diff] [blame] | 31 | # define DBG(ctx, arg...) kmod_log_null(ctx, ## arg) |
| 32 | # define INFO(ctx, arg...) kmod_log_null(ctx, ## arg) |
| 33 | # define ERR(ctx, arg...) kmod_log_null(ctx, ## arg) |
Lucas De Marchi | 586fc30 | 2011-11-21 14:35:35 -0200 | [diff] [blame] | 34 | #endif |
| 35 | |
| 36 | #define KMOD_EXPORT __attribute__ ((visibility("default"))) |
| 37 | |
Lucas De Marchi | 1684e44 | 2011-12-14 17:19:19 -0200 | [diff] [blame] | 38 | #define KCMD_LINE_SIZE 4096 |
| 39 | |
Cristian RodrÃguez | 41a51c2 | 2013-02-11 15:07:52 -0300 | [diff] [blame] | 40 | #ifndef HAVE_SECURE_GETENV |
| 41 | # ifdef HAVE___SECURE_GETENV |
| 42 | # define secure_getenv __secure_getenv |
| 43 | # else |
| 44 | # warning neither secure_getenv nor __secure_getenv is available |
| 45 | # define secure_getenv getenv |
| 46 | # endif |
| 47 | #endif |
| 48 | |
Gustavo Sverzut Barbieri | 1bdd951 | 2011-12-08 13:47:55 -0200 | [diff] [blame] | 49 | void kmod_log(const struct kmod_ctx *ctx, |
Lucas De Marchi | 586fc30 | 2011-11-21 14:35:35 -0200 | [diff] [blame] | 50 | int priority, const char *file, int line, const char *fn, |
Gustavo Sverzut Barbieri | 12d9419 | 2011-12-02 20:34:58 -0200 | [diff] [blame] | 51 | const char *format, ...) __attribute__((format(printf, 6, 7))) __attribute__((nonnull(1, 3, 5))); |
Lucas De Marchi | 586fc30 | 2011-11-21 14:35:35 -0200 | [diff] [blame] | 52 | |
Lucas De Marchi | 6924e47 | 2011-11-22 05:38:28 -0200 | [diff] [blame] | 53 | struct list_node { |
| 54 | struct list_node *next, *prev; |
| 55 | }; |
| 56 | |
| 57 | struct kmod_list { |
| 58 | struct list_node node; |
| 59 | void *data; |
| 60 | }; |
| 61 | |
Lucas De Marchi | a70c1e7 | 2012-05-23 20:27:23 -0300 | [diff] [blame] | 62 | struct kmod_list *kmod_list_append(struct kmod_list *list, const void *data) _must_check_ __attribute__((nonnull(2))); |
| 63 | struct kmod_list *kmod_list_prepend(struct kmod_list *list, const void *data) _must_check_ __attribute__((nonnull(2))); |
| 64 | struct kmod_list *kmod_list_remove(struct kmod_list *list) _must_check_; |
Lucas De Marchi | 6924e47 | 2011-11-22 05:38:28 -0200 | [diff] [blame] | 65 | struct kmod_list *kmod_list_remove_data(struct kmod_list *list, |
Lucas De Marchi | a70c1e7 | 2012-05-23 20:27:23 -0300 | [diff] [blame] | 66 | const void *data) _must_check_ __attribute__((nonnull(2))); |
Lucas De Marchi | 62be799 | 2011-12-01 15:27:42 -0200 | [diff] [blame] | 67 | struct kmod_list *kmod_list_remove_n_latest(struct kmod_list *list, |
Lucas De Marchi | a70c1e7 | 2012-05-23 20:27:23 -0300 | [diff] [blame] | 68 | unsigned int n) _must_check_; |
Lucas De Marchi | 86e8788 | 2011-12-05 23:41:14 -0200 | [diff] [blame] | 69 | struct kmod_list *kmod_list_insert_after(struct kmod_list *list, const void *data) __attribute__((nonnull(2))); |
Lucas De Marchi | b91a1c6 | 2011-12-05 23:53:56 -0200 | [diff] [blame] | 70 | struct kmod_list *kmod_list_insert_before(struct kmod_list *list, const void *data) __attribute__((nonnull(2))); |
Lucas De Marchi | a70c1e7 | 2012-05-23 20:27:23 -0300 | [diff] [blame] | 71 | struct kmod_list *kmod_list_append_list(struct kmod_list *list1, struct kmod_list *list2) _must_check_; |
Lucas De Marchi | 86e8788 | 2011-12-05 23:41:14 -0200 | [diff] [blame] | 72 | |
Lucas De Marchi | cf91579 | 2011-12-05 11:33:15 -0200 | [diff] [blame] | 73 | #undef kmod_list_foreach |
| 74 | #define kmod_list_foreach(list_entry, first_entry) \ |
Lucas De Marchi | d2d648d | 2011-12-06 01:44:08 -0200 | [diff] [blame] | 75 | for (list_entry = ((first_entry) == NULL) ? NULL : (first_entry); \ |
Lucas De Marchi | cf91579 | 2011-12-05 11:33:15 -0200 | [diff] [blame] | 76 | list_entry != NULL; \ |
Lucas De Marchi | d2d648d | 2011-12-06 01:44:08 -0200 | [diff] [blame] | 77 | list_entry = (list_entry->node.next == &((first_entry)->node)) ? NULL : \ |
Lucas De Marchi | cf91579 | 2011-12-05 11:33:15 -0200 | [diff] [blame] | 78 | container_of(list_entry->node.next, struct kmod_list, node)) |
Lucas De Marchi | 60aa4d8 | 2011-11-30 18:57:38 -0200 | [diff] [blame] | 79 | |
Gustavo Sverzut Barbieri | d6b55b7 | 2011-12-16 22:33:08 -0200 | [diff] [blame] | 80 | #undef kmod_list_foreach_reverse |
| 81 | #define kmod_list_foreach_reverse(list_entry, first_entry) \ |
| 82 | for (list_entry = (((first_entry) == NULL) ? NULL : container_of(first_entry->node.prev, struct kmod_list, node)); \ |
| 83 | list_entry != NULL; \ |
| 84 | list_entry = ((list_entry == first_entry) ? NULL : \ |
| 85 | container_of(list_entry->node.prev, struct kmod_list, node))) |
| 86 | |
Lucas De Marchi | 60aa4d8 | 2011-11-30 18:57:38 -0200 | [diff] [blame] | 87 | /* libkmod.c */ |
Gustavo Sverzut Barbieri | 12d9419 | 2011-12-02 20:34:58 -0200 | [diff] [blame] | 88 | int kmod_lookup_alias_from_config(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3))); |
| 89 | int kmod_lookup_alias_from_symbols_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3))); |
| 90 | int kmod_lookup_alias_from_aliases_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3))); |
| 91 | int kmod_lookup_alias_from_moddep_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3))); |
Lucas De Marchi | 3805274 | 2012-02-16 20:43:16 -0200 | [diff] [blame] | 92 | int kmod_lookup_alias_from_builtin_file(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3))); |
Harish Jenny K N | fd44a98 | 2015-02-22 15:41:07 -0300 | [diff] [blame] | 93 | bool kmod_lookup_alias_is_builtin(struct kmod_ctx *ctx, const char *name) __attribute__((nonnull(1, 2))); |
Lucas De Marchi | f4fc552 | 2011-12-16 03:57:12 -0200 | [diff] [blame] | 94 | int kmod_lookup_alias_from_commands(struct kmod_ctx *ctx, const char *name, struct kmod_list **list) __attribute__((nonnull(1, 2, 3))); |
Lucas De Marchi | ece09aa | 2012-01-18 01:26:44 -0200 | [diff] [blame] | 95 | void kmod_set_modules_visited(struct kmod_ctx *ctx, bool visited) __attribute__((nonnull((1)))); |
Michal Marek | 450bd1b | 2014-03-31 15:18:50 +0200 | [diff] [blame] | 96 | void kmod_set_modules_required(struct kmod_ctx *ctx, bool required) __attribute__((nonnull((1)))); |
Lucas De Marchi | fd186ae | 2011-12-06 03:38:37 -0200 | [diff] [blame] | 97 | |
Lucas De Marchi | 671d489 | 2011-12-05 20:23:05 -0200 | [diff] [blame] | 98 | char *kmod_search_moddep(struct kmod_ctx *ctx, const char *name) __attribute__((nonnull(1,2))); |
Lucas De Marchi | 221631d | 2011-11-24 16:41:01 -0200 | [diff] [blame] | 99 | |
Lucas De Marchi | 8bdeca1 | 2011-12-15 13:11:51 -0200 | [diff] [blame] | 100 | struct kmod_module *kmod_pool_get_module(struct kmod_ctx *ctx, const char *key) __attribute__((nonnull(1,2))); |
Lucas De Marchi | 1114e78 | 2013-04-30 12:34:55 -0300 | [diff] [blame] | 101 | void kmod_pool_add_module(struct kmod_ctx *ctx, struct kmod_module *mod, const char *key) __attribute__((nonnull(1, 2, 3))); |
| 102 | void kmod_pool_del_module(struct kmod_ctx *ctx, struct kmod_module *mod, const char *key) __attribute__((nonnull(1, 2, 3))); |
Lucas De Marchi | fd186ae | 2011-12-06 03:38:37 -0200 | [diff] [blame] | 103 | |
Lucas De Marchi | e7fc2c8 | 2012-06-12 01:43:46 -0300 | [diff] [blame] | 104 | const struct kmod_config *kmod_get_config(const struct kmod_ctx *ctx) __attribute__((nonnull(1))); |
Lucas De Marchi | fd186ae | 2011-12-06 03:38:37 -0200 | [diff] [blame] | 105 | |
Lucas De Marchi | 60aa4d8 | 2011-11-30 18:57:38 -0200 | [diff] [blame] | 106 | /* libkmod-config.c */ |
Lucas De Marchi | b6a4dfb | 2011-12-31 18:48:05 -0200 | [diff] [blame] | 107 | struct kmod_config_path { |
| 108 | unsigned long long stamp; |
| 109 | char path[]; |
| 110 | }; |
| 111 | |
Lucas De Marchi | 7c2ab35 | 2011-11-29 18:07:43 -0200 | [diff] [blame] | 112 | struct kmod_config { |
Gustavo Sverzut Barbieri | d13e606 | 2011-12-02 21:40:22 -0200 | [diff] [blame] | 113 | struct kmod_ctx *ctx; |
Lucas De Marchi | 7c2ab35 | 2011-11-29 18:07:43 -0200 | [diff] [blame] | 114 | struct kmod_list *aliases; |
Lucas De Marchi | 81cf206 | 2011-11-29 18:48:02 -0200 | [diff] [blame] | 115 | struct kmod_list *blacklists; |
Lucas De Marchi | 615c42b | 2011-12-07 03:18:57 -0200 | [diff] [blame] | 116 | struct kmod_list *options; |
Lucas De Marchi | a5cce6d | 2011-12-07 11:31:28 -0200 | [diff] [blame] | 117 | struct kmod_list *remove_commands; |
| 118 | struct kmod_list *install_commands; |
Gustavo Sverzut Barbieri | 1c52260 | 2011-12-16 21:18:10 -0200 | [diff] [blame] | 119 | struct kmod_list *softdeps; |
Lucas De Marchi | b6a4dfb | 2011-12-31 18:48:05 -0200 | [diff] [blame] | 120 | |
| 121 | struct kmod_list *paths; |
Lucas De Marchi | 7c2ab35 | 2011-11-29 18:07:43 -0200 | [diff] [blame] | 122 | }; |
Lucas De Marchi | b6a4dfb | 2011-12-31 18:48:05 -0200 | [diff] [blame] | 123 | |
Gustavo Sverzut Barbieri | cb8d4d3 | 2011-12-11 20:37:01 -0200 | [diff] [blame] | 124 | int kmod_config_new(struct kmod_ctx *ctx, struct kmod_config **config, const char * const *config_paths) __attribute__((nonnull(1, 2,3))); |
Gustavo Sverzut Barbieri | d13e606 | 2011-12-02 21:40:22 -0200 | [diff] [blame] | 125 | void kmod_config_free(struct kmod_config *config) __attribute__((nonnull(1))); |
Lucas De Marchi | c1c9c44 | 2011-12-24 10:50:47 -0200 | [diff] [blame] | 126 | const char *kmod_blacklist_get_modname(const struct kmod_list *l) __attribute__((nonnull(1))); |
Gustavo Sverzut Barbieri | 12d9419 | 2011-12-02 20:34:58 -0200 | [diff] [blame] | 127 | const char *kmod_alias_get_name(const struct kmod_list *l) __attribute__((nonnull(1))); |
| 128 | const char *kmod_alias_get_modname(const struct kmod_list *l) __attribute__((nonnull(1))); |
Gustavo Sverzut Barbieri | bd3f553 | 2011-12-10 20:47:01 -0200 | [diff] [blame] | 129 | const char *kmod_option_get_options(const struct kmod_list *l) __attribute__((nonnull(1))); |
| 130 | const char *kmod_option_get_modname(const struct kmod_list *l) __attribute__((nonnull(1))); |
| 131 | const char *kmod_command_get_command(const struct kmod_list *l) __attribute__((nonnull(1))); |
| 132 | const char *kmod_command_get_modname(const struct kmod_list *l) __attribute__((nonnull(1))); |
| 133 | |
Gustavo Sverzut Barbieri | 1c52260 | 2011-12-16 21:18:10 -0200 | [diff] [blame] | 134 | const char *kmod_softdep_get_name(const struct kmod_list *l) __attribute__((nonnull(1))); |
| 135 | const char * const *kmod_softdep_get_pre(const struct kmod_list *l, unsigned int *count) __attribute__((nonnull(1, 2))); |
| 136 | const char * const *kmod_softdep_get_post(const struct kmod_list *l, unsigned int *count); |
| 137 | |
Lucas De Marchi | 7c2ab35 | 2011-11-29 18:07:43 -0200 | [diff] [blame] | 138 | |
Lucas De Marchi | 7636e72 | 2011-12-01 17:56:03 -0200 | [diff] [blame] | 139 | /* libkmod-module.c */ |
Lucas De Marchi | 6ad5f26 | 2011-12-13 14:12:50 -0200 | [diff] [blame] | 140 | int kmod_module_new_from_alias(struct kmod_ctx *ctx, const char *alias, const char *name, struct kmod_module **mod); |
Lucas De Marchi | 671d489 | 2011-12-05 20:23:05 -0200 | [diff] [blame] | 141 | int kmod_module_parse_depline(struct kmod_module *mod, char *line) __attribute__((nonnull(1, 2))); |
Lucas De Marchi | f4fc552 | 2011-12-16 03:57:12 -0200 | [diff] [blame] | 142 | void kmod_module_set_install_commands(struct kmod_module *mod, const char *cmd) __attribute__((nonnull(1))); |
| 143 | void kmod_module_set_remove_commands(struct kmod_module *mod, const char *cmd) __attribute__((nonnull(1))); |
Lucas De Marchi | ece09aa | 2012-01-18 01:26:44 -0200 | [diff] [blame] | 144 | void kmod_module_set_visited(struct kmod_module *mod, bool visited) __attribute__((nonnull(1))); |
Lucas De Marchi | 3805274 | 2012-02-16 20:43:16 -0200 | [diff] [blame] | 145 | void kmod_module_set_builtin(struct kmod_module *mod, bool builtin) __attribute__((nonnull((1)))); |
Michal Marek | 450bd1b | 2014-03-31 15:18:50 +0200 | [diff] [blame] | 146 | void kmod_module_set_required(struct kmod_module *mod, bool required) __attribute__((nonnull(1))); |
Harish Jenny K N | fd44a98 | 2015-02-22 15:41:07 -0300 | [diff] [blame] | 147 | bool kmod_module_is_builtin(struct kmod_module *mod) __attribute__((nonnull(1))); |
Gustavo Sverzut Barbieri | 7db0865 | 2011-12-05 00:17:37 -0200 | [diff] [blame] | 148 | |
Gustavo Sverzut Barbieri | 3d8226e | 2011-12-16 16:08:53 -0200 | [diff] [blame] | 149 | /* libkmod-file.c */ |
Lucas De Marchi | a70c1e7 | 2012-05-23 20:27:23 -0300 | [diff] [blame] | 150 | struct kmod_file *kmod_file_open(const struct kmod_ctx *ctx, const char *filename) _must_check_ __attribute__((nonnull(1,2))); |
Lucas De Marchi | 1eff942 | 2012-10-18 01:36:33 -0300 | [diff] [blame] | 151 | struct kmod_elf *kmod_file_get_elf(struct kmod_file *file) __attribute__((nonnull(1))); |
Lucas De Marchi | a70c1e7 | 2012-05-23 20:27:23 -0300 | [diff] [blame] | 152 | void *kmod_file_get_contents(const struct kmod_file *file) _must_check_ __attribute__((nonnull(1))); |
| 153 | off_t kmod_file_get_size(const struct kmod_file *file) _must_check_ __attribute__((nonnull(1))); |
Kees Cook | 144d182 | 2013-02-18 12:02:32 -0800 | [diff] [blame] | 154 | bool kmod_file_get_direct(const struct kmod_file *file) _must_check_ __attribute__((nonnull(1))); |
| 155 | int kmod_file_get_fd(const struct kmod_file *file) _must_check_ __attribute__((nonnull(1))); |
Gustavo Sverzut Barbieri | 3d8226e | 2011-12-16 16:08:53 -0200 | [diff] [blame] | 156 | void kmod_file_unref(struct kmod_file *file) __attribute__((nonnull(1))); |
| 157 | |
Gustavo Sverzut Barbieri | 708624a | 2011-12-18 01:25:06 -0200 | [diff] [blame] | 158 | /* libkmod-elf.c */ |
| 159 | struct kmod_elf; |
| 160 | struct kmod_modversion { |
| 161 | uint64_t crc; |
Gustavo Sverzut Barbieri | 674f859 | 2011-12-20 11:54:53 -0200 | [diff] [blame] | 162 | enum kmod_symbol_bind bind; |
Gustavo Sverzut Barbieri | 708624a | 2011-12-18 01:25:06 -0200 | [diff] [blame] | 163 | char *symbol; |
| 164 | }; |
| 165 | |
Lucas De Marchi | a70c1e7 | 2012-05-23 20:27:23 -0300 | [diff] [blame] | 166 | struct kmod_elf *kmod_elf_new(const void *memory, off_t size) _must_check_ __attribute__((nonnull(1))); |
Gustavo Sverzut Barbieri | 708624a | 2011-12-18 01:25:06 -0200 | [diff] [blame] | 167 | void kmod_elf_unref(struct kmod_elf *elf) __attribute__((nonnull(1))); |
Lucas De Marchi | a70c1e7 | 2012-05-23 20:27:23 -0300 | [diff] [blame] | 168 | const void *kmod_elf_get_memory(const struct kmod_elf *elf) _must_check_ __attribute__((nonnull(1))); |
| 169 | int kmod_elf_get_strings(const struct kmod_elf *elf, const char *section, char ***array) _must_check_ __attribute__((nonnull(1,2,3))); |
| 170 | int kmod_elf_get_modversions(const struct kmod_elf *elf, struct kmod_modversion **array) _must_check_ __attribute__((nonnull(1,2))); |
| 171 | int kmod_elf_get_symbols(const struct kmod_elf *elf, struct kmod_modversion **array) _must_check_ __attribute__((nonnull(1,2))); |
| 172 | int kmod_elf_get_dependency_symbols(const struct kmod_elf *elf, struct kmod_modversion **array) _must_check_ __attribute__((nonnull(1,2))); |
| 173 | int kmod_elf_strip_section(struct kmod_elf *elf, const char *section) _must_check_ __attribute__((nonnull(1,2))); |
| 174 | int kmod_elf_strip_vermagic(struct kmod_elf *elf) _must_check_ __attribute__((nonnull(1))); |
Gustavo Sverzut Barbieri | 7db0865 | 2011-12-05 00:17:37 -0200 | [diff] [blame] | 175 | |
Lucas De Marchi | ea17e2b | 2012-01-26 01:21:17 -0200 | [diff] [blame] | 176 | /* |
| 177 | * Debug mock lib need to find section ".gnu.linkonce.this_module" in order to |
| 178 | * get modname |
| 179 | */ |
Lucas De Marchi | a70c1e7 | 2012-05-23 20:27:23 -0300 | [diff] [blame] | 180 | int kmod_elf_get_section(const struct kmod_elf *elf, const char *section, const void **buf, uint64_t *buf_size) _must_check_ __attribute__((nonnull(1,2,3,4))); |
Lucas De Marchi | ea17e2b | 2012-01-26 01:21:17 -0200 | [diff] [blame] | 181 | |
Michal Marek | 8fe1681 | 2013-01-16 09:52:01 +0100 | [diff] [blame] | 182 | /* libkmod-signature.c */ |
| 183 | struct kmod_signature_info { |
| 184 | const char *signer; |
| 185 | size_t signer_len; |
| 186 | const char *key_id; |
| 187 | size_t key_id_len; |
| 188 | const char *algo, *hash_algo, *id_type; |
| 189 | }; |
| 190 | bool kmod_module_signature_info(const struct kmod_file *file, struct kmod_signature_info *sig_info) _must_check_ __attribute__((nonnull(1, 2))); |