1
2
3
4
5
6
7
8
9#ifndef _LINUX_MODULE_H
10#define _LINUX_MODULE_H
11
12#include <linux/list.h>
13#include <linux/stat.h>
14#include <linux/buildid.h>
15#include <linux/compiler.h>
16#include <linux/cache.h>
17#include <linux/kmod.h>
18#include <linux/init.h>
19#include <linux/elf.h>
20#include <linux/stringify.h>
21#include <linux/kobject.h>
22#include <linux/moduleparam.h>
23#include <linux/jump_label.h>
24#include <linux/export.h>
25#include <linux/rbtree_latch.h>
26#include <linux/error-injection.h>
27#include <linux/tracepoint-defs.h>
28#include <linux/srcu.h>
29#include <linux/static_call_types.h>
30#include <linux/cfi.h>
31
32#include <linux/percpu.h>
33#include <asm/module.h>
34
35#define MODULE_NAME_LEN MAX_PARAM_PREFIX_LEN
36
37struct modversion_info {
38 unsigned long crc;
39 char name[MODULE_NAME_LEN];
40};
41
42struct module;
43struct exception_table_entry;
44
45struct module_kobject {
46 struct kobject kobj;
47 struct module *mod;
48 struct kobject *drivers_dir;
49 struct module_param_attrs *mp;
50 struct completion *kobj_completion;
51} __randomize_layout;
52
53struct module_attribute {
54 struct attribute attr;
55 ssize_t (*show)(struct module_attribute *, struct module_kobject *,
56 char *);
57 ssize_t (*store)(struct module_attribute *, struct module_kobject *,
58 const char *, size_t count);
59 void (*setup)(struct module *, const char *);
60 int (*test)(struct module *);
61 void (*free)(struct module *);
62};
63
64struct module_version_attribute {
65 struct module_attribute mattr;
66 const char *module_name;
67 const char *version;
68};
69
70extern ssize_t __modver_version_show(struct module_attribute *,
71 struct module_kobject *, char *);
72
73extern struct module_attribute module_uevent;
74
75
76extern int init_module(void);
77extern void cleanup_module(void);
78
79#ifndef MODULE
80
81
82
83
84
85
86
87
88#define module_init(x) __initcall(x);
89
90
91
92
93
94
95
96
97
98
99
100#define module_exit(x) __exitcall(x);
101
102#else
103
104
105
106
107
108
109
110
111#define early_initcall(fn) module_init(fn)
112#define core_initcall(fn) module_init(fn)
113#define core_initcall_sync(fn) module_init(fn)
114#define postcore_initcall(fn) module_init(fn)
115#define postcore_initcall_sync(fn) module_init(fn)
116#define arch_initcall(fn) module_init(fn)
117#define subsys_initcall(fn) module_init(fn)
118#define subsys_initcall_sync(fn) module_init(fn)
119#define fs_initcall(fn) module_init(fn)
120#define fs_initcall_sync(fn) module_init(fn)
121#define rootfs_initcall(fn) module_init(fn)
122#define device_initcall(fn) module_init(fn)
123#define device_initcall_sync(fn) module_init(fn)
124#define late_initcall(fn) module_init(fn)
125#define late_initcall_sync(fn) module_init(fn)
126
127#define console_initcall(fn) module_init(fn)
128
129
130#define module_init(initfn) \
131 static inline initcall_t __maybe_unused __inittest(void) \
132 { return initfn; } \
133 int init_module(void) __copy(initfn) \
134 __attribute__((alias(#initfn))); \
135 __CFI_ADDRESSABLE(init_module, __initdata);
136
137
138#define module_exit(exitfn) \
139 static inline exitcall_t __maybe_unused __exittest(void) \
140 { return exitfn; } \
141 void cleanup_module(void) __copy(exitfn) \
142 __attribute__((alias(#exitfn))); \
143 __CFI_ADDRESSABLE(cleanup_module, __exitdata);
144
145#endif
146
147
148
149#ifdef CONFIG_MODULES
150#define __init_or_module
151#define __initdata_or_module
152#define __initconst_or_module
153#define __INIT_OR_MODULE .text
154#define __INITDATA_OR_MODULE .data
155#define __INITRODATA_OR_MODULE .section ".rodata","a",%progbits
156#else
157#define __init_or_module __init
158#define __initdata_or_module __initdata
159#define __initconst_or_module __initconst
160#define __INIT_OR_MODULE __INIT
161#define __INITDATA_OR_MODULE __INITDATA
162#define __INITRODATA_OR_MODULE __INITRODATA
163#endif
164
165
166#define MODULE_INFO(tag, info) __MODULE_INFO(tag, tag, info)
167
168
169#define MODULE_ALIAS(_alias) MODULE_INFO(alias, _alias)
170
171
172
173
174#define MODULE_SOFTDEP(_softdep) MODULE_INFO(softdep, _softdep)
175
176
177
178
179
180#ifdef MODULE
181#define MODULE_FILE
182#else
183#define MODULE_FILE MODULE_INFO(file, KBUILD_MODFILE);
184#endif
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230#define MODULE_LICENSE(_license) MODULE_FILE MODULE_INFO(license, _license)
231
232
233
234
235
236#define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)
237
238
239#define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)
240
241#ifdef MODULE
242
243#define MODULE_DEVICE_TABLE(type, name) \
244extern typeof(name) __mod_##type##__##name##_device_table \
245 __attribute__ ((unused, alias(__stringify(name))))
246#else
247#define MODULE_DEVICE_TABLE(type, name)
248#endif
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267#if defined(MODULE) || !defined(CONFIG_SYSFS)
268#define MODULE_VERSION(_version) MODULE_INFO(version, _version)
269#else
270#define MODULE_VERSION(_version) \
271 MODULE_INFO(version, _version); \
272 static struct module_version_attribute __modver_attr \
273 __used __section("__modver") \
274 __aligned(__alignof__(struct module_version_attribute)) \
275 = { \
276 .mattr = { \
277 .attr = { \
278 .name = "version", \
279 .mode = S_IRUGO, \
280 }, \
281 .show = __modver_version_show, \
282 }, \
283 .module_name = KBUILD_MODNAME, \
284 .version = _version, \
285 }
286#endif
287
288
289
290
291#define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware)
292
293#define MODULE_IMPORT_NS(ns) MODULE_INFO(import_ns, #ns)
294
295struct notifier_block;
296
297#ifdef CONFIG_MODULES
298
299extern int modules_disabled;
300
301void *__symbol_get(const char *symbol);
302void *__symbol_get_gpl(const char *symbol);
303#define symbol_get(x) ((typeof(&x))(__symbol_get(__stringify(x))))
304
305
306struct module_use {
307 struct list_head source_list;
308 struct list_head target_list;
309 struct module *source, *target;
310};
311
312enum module_state {
313 MODULE_STATE_LIVE,
314 MODULE_STATE_COMING,
315 MODULE_STATE_GOING,
316 MODULE_STATE_UNFORMED,
317};
318
319struct mod_tree_node {
320 struct module *mod;
321 struct latch_tree_node node;
322};
323
324struct module_layout {
325
326 void *base;
327
328 unsigned int size;
329
330 unsigned int text_size;
331
332 unsigned int ro_size;
333
334 unsigned int ro_after_init_size;
335
336#ifdef CONFIG_MODULES_TREE_LOOKUP
337 struct mod_tree_node mtn;
338#endif
339};
340
341#ifdef CONFIG_MODULES_TREE_LOOKUP
342
343#define __module_layout_align ____cacheline_aligned
344#else
345#define __module_layout_align
346#endif
347
348struct mod_kallsyms {
349 Elf_Sym *symtab;
350 unsigned int num_symtab;
351 char *strtab;
352 char *typetab;
353};
354
355#ifdef CONFIG_LIVEPATCH
356struct klp_modinfo {
357 Elf_Ehdr hdr;
358 Elf_Shdr *sechdrs;
359 char *secstrings;
360 unsigned int symndx;
361};
362#endif
363
364struct module {
365 enum module_state state;
366
367
368 struct list_head list;
369
370
371 char name[MODULE_NAME_LEN];
372
373#ifdef CONFIG_STACKTRACE_BUILD_ID
374
375 unsigned char build_id[BUILD_ID_SIZE_MAX];
376#endif
377
378
379 struct module_kobject mkobj;
380 struct module_attribute *modinfo_attrs;
381 const char *version;
382 const char *srcversion;
383 struct kobject *holders_dir;
384
385
386 const struct kernel_symbol *syms;
387 const s32 *crcs;
388 unsigned int num_syms;
389
390#ifdef CONFIG_CFI_CLANG
391 cfi_check_fn cfi_check;
392#endif
393
394
395#ifdef CONFIG_SYSFS
396 struct mutex param_lock;
397#endif
398 struct kernel_param *kp;
399 unsigned int num_kp;
400
401
402 unsigned int num_gpl_syms;
403 const struct kernel_symbol *gpl_syms;
404 const s32 *gpl_crcs;
405 bool using_gplonly_symbols;
406
407#ifdef CONFIG_MODULE_SIG
408
409 bool sig_ok;
410#endif
411
412 bool async_probe_requested;
413
414
415 unsigned int num_exentries;
416 struct exception_table_entry *extable;
417
418
419 int (*init)(void);
420
421
422 struct module_layout core_layout __module_layout_align;
423 struct module_layout init_layout;
424
425
426 struct mod_arch_specific arch;
427
428 unsigned long taints;
429
430#ifdef CONFIG_GENERIC_BUG
431
432 unsigned num_bugs;
433 struct list_head bug_list;
434 struct bug_entry *bug_table;
435#endif
436
437#ifdef CONFIG_KALLSYMS
438
439 struct mod_kallsyms __rcu *kallsyms;
440 struct mod_kallsyms core_kallsyms;
441
442
443 struct module_sect_attrs *sect_attrs;
444
445
446 struct module_notes_attrs *notes_attrs;
447#endif
448
449
450
451 char *args;
452
453#ifdef CONFIG_SMP
454
455 void __percpu *percpu;
456 unsigned int percpu_size;
457#endif
458 void *noinstr_text_start;
459 unsigned int noinstr_text_size;
460
461#ifdef CONFIG_TRACEPOINTS
462 unsigned int num_tracepoints;
463 tracepoint_ptr_t *tracepoints_ptrs;
464#endif
465#ifdef CONFIG_TREE_SRCU
466 unsigned int num_srcu_structs;
467 struct srcu_struct **srcu_struct_ptrs;
468#endif
469#ifdef CONFIG_BPF_EVENTS
470 unsigned int num_bpf_raw_events;
471 struct bpf_raw_event_map *bpf_raw_events;
472#endif
473#ifdef CONFIG_DEBUG_INFO_BTF_MODULES
474 unsigned int btf_data_size;
475 void *btf_data;
476#endif
477#ifdef CONFIG_JUMP_LABEL
478 struct jump_entry *jump_entries;
479 unsigned int num_jump_entries;
480#endif
481#ifdef CONFIG_TRACING
482 unsigned int num_trace_bprintk_fmt;
483 const char **trace_bprintk_fmt_start;
484#endif
485#ifdef CONFIG_EVENT_TRACING
486 struct trace_event_call **trace_events;
487 unsigned int num_trace_events;
488 struct trace_eval_map **trace_evals;
489 unsigned int num_trace_evals;
490#endif
491#ifdef CONFIG_FTRACE_MCOUNT_RECORD
492 unsigned int num_ftrace_callsites;
493 unsigned long *ftrace_callsites;
494#endif
495#ifdef CONFIG_KPROBES
496 void *kprobes_text_start;
497 unsigned int kprobes_text_size;
498 unsigned long *kprobe_blacklist;
499 unsigned int num_kprobe_blacklist;
500#endif
501#ifdef CONFIG_HAVE_STATIC_CALL_INLINE
502 int num_static_call_sites;
503 struct static_call_site *static_call_sites;
504#endif
505
506#ifdef CONFIG_LIVEPATCH
507 bool klp;
508 bool klp_alive;
509
510
511 struct klp_modinfo *klp_info;
512#endif
513
514#ifdef CONFIG_MODULE_UNLOAD
515
516 struct list_head source_list;
517
518 struct list_head target_list;
519
520
521 void (*exit)(void);
522
523 atomic_t refcnt;
524#endif
525
526#ifdef CONFIG_CONSTRUCTORS
527
528 ctor_fn_t *ctors;
529 unsigned int num_ctors;
530#endif
531
532#ifdef CONFIG_FUNCTION_ERROR_INJECTION
533 struct error_injection_entry *ei_funcs;
534 unsigned int num_ei_funcs;
535#endif
536} ____cacheline_aligned __randomize_layout;
537#ifndef MODULE_ARCH_INIT
538#define MODULE_ARCH_INIT {}
539#endif
540
541#ifndef HAVE_ARCH_KALLSYMS_SYMBOL_VALUE
542static inline unsigned long kallsyms_symbol_value(const Elf_Sym *sym)
543{
544 return sym->st_value;
545}
546#endif
547
548
549
550
551static inline bool module_is_live(struct module *mod)
552{
553 return mod->state != MODULE_STATE_GOING;
554}
555
556struct module *__module_text_address(unsigned long addr);
557struct module *__module_address(unsigned long addr);
558bool is_module_address(unsigned long addr);
559bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr);
560bool is_module_percpu_address(unsigned long addr);
561bool is_module_text_address(unsigned long addr);
562
563static inline bool within_module_core(unsigned long addr,
564 const struct module *mod)
565{
566 return (unsigned long)mod->core_layout.base <= addr &&
567 addr < (unsigned long)mod->core_layout.base + mod->core_layout.size;
568}
569
570static inline bool within_module_init(unsigned long addr,
571 const struct module *mod)
572{
573 return (unsigned long)mod->init_layout.base <= addr &&
574 addr < (unsigned long)mod->init_layout.base + mod->init_layout.size;
575}
576
577static inline bool within_module(unsigned long addr, const struct module *mod)
578{
579 return within_module_init(addr, mod) || within_module_core(addr, mod);
580}
581
582
583struct module *find_module(const char *name);
584
585
586
587int module_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
588 char *name, char *module_name, int *exported);
589
590
591unsigned long module_kallsyms_lookup_name(const char *name);
592
593extern void __noreturn __module_put_and_exit(struct module *mod,
594 long code);
595#define module_put_and_exit(code) __module_put_and_exit(THIS_MODULE, code)
596
597#ifdef CONFIG_MODULE_UNLOAD
598int module_refcount(struct module *mod);
599void __symbol_put(const char *symbol);
600#define symbol_put(x) __symbol_put(__stringify(x))
601void symbol_put_addr(void *addr);
602
603
604
605extern void __module_get(struct module *module);
606
607
608
609extern bool try_module_get(struct module *module);
610
611extern void module_put(struct module *module);
612
613#else
614static inline bool try_module_get(struct module *module)
615{
616 return !module || module_is_live(module);
617}
618static inline void module_put(struct module *module)
619{
620}
621static inline void __module_get(struct module *module)
622{
623}
624#define symbol_put(x) do { } while (0)
625#define symbol_put_addr(p) do { } while (0)
626
627#endif
628
629
630#define module_name(mod) \
631({ \
632 struct module *__mod = (mod); \
633 __mod ? __mod->name : "kernel"; \
634})
635
636
637void *dereference_module_function_descriptor(struct module *mod, void *ptr);
638
639
640
641
642const char *module_address_lookup(unsigned long addr,
643 unsigned long *symbolsize,
644 unsigned long *offset,
645 char **modname, const unsigned char **modbuildid,
646 char *namebuf);
647int lookup_module_symbol_name(unsigned long addr, char *symname);
648int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name);
649
650int register_module_notifier(struct notifier_block *nb);
651int unregister_module_notifier(struct notifier_block *nb);
652
653extern void print_modules(void);
654
655static inline bool module_requested_async_probing(struct module *module)
656{
657 return module && module->async_probe_requested;
658}
659
660#ifdef CONFIG_LIVEPATCH
661static inline bool is_livepatch_module(struct module *mod)
662{
663 return mod->klp;
664}
665#else
666static inline bool is_livepatch_module(struct module *mod)
667{
668 return false;
669}
670#endif
671
672bool is_module_sig_enforced(void);
673void set_module_sig_enforced(void);
674
675#else
676
677static inline struct module *__module_address(unsigned long addr)
678{
679 return NULL;
680}
681
682static inline struct module *__module_text_address(unsigned long addr)
683{
684 return NULL;
685}
686
687static inline bool is_module_address(unsigned long addr)
688{
689 return false;
690}
691
692static inline bool is_module_percpu_address(unsigned long addr)
693{
694 return false;
695}
696
697static inline bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr)
698{
699 return false;
700}
701
702static inline bool is_module_text_address(unsigned long addr)
703{
704 return false;
705}
706
707static inline bool within_module_core(unsigned long addr,
708 const struct module *mod)
709{
710 return false;
711}
712
713static inline bool within_module_init(unsigned long addr,
714 const struct module *mod)
715{
716 return false;
717}
718
719static inline bool within_module(unsigned long addr, const struct module *mod)
720{
721 return false;
722}
723
724
725#define symbol_get(x) ({ extern typeof(x) x __attribute__((weak,visibility("hidden"))); &(x); })
726#define symbol_put(x) do { } while (0)
727#define symbol_put_addr(x) do { } while (0)
728
729static inline void __module_get(struct module *module)
730{
731}
732
733static inline bool try_module_get(struct module *module)
734{
735 return true;
736}
737
738static inline void module_put(struct module *module)
739{
740}
741
742#define module_name(mod) "kernel"
743
744
745static inline const char *module_address_lookup(unsigned long addr,
746 unsigned long *symbolsize,
747 unsigned long *offset,
748 char **modname,
749 const unsigned char **modbuildid,
750 char *namebuf)
751{
752 return NULL;
753}
754
755static inline int lookup_module_symbol_name(unsigned long addr, char *symname)
756{
757 return -ERANGE;
758}
759
760static inline int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name)
761{
762 return -ERANGE;
763}
764
765static inline int module_get_kallsym(unsigned int symnum, unsigned long *value,
766 char *type, char *name,
767 char *module_name, int *exported)
768{
769 return -ERANGE;
770}
771
772static inline unsigned long module_kallsyms_lookup_name(const char *name)
773{
774 return 0;
775}
776
777static inline int register_module_notifier(struct notifier_block *nb)
778{
779
780 return 0;
781}
782
783static inline int unregister_module_notifier(struct notifier_block *nb)
784{
785 return 0;
786}
787
788#define module_put_and_exit(code) do_exit(code)
789
790static inline void print_modules(void)
791{
792}
793
794static inline bool module_requested_async_probing(struct module *module)
795{
796 return false;
797}
798
799static inline bool is_module_sig_enforced(void)
800{
801 return false;
802}
803
804static inline void set_module_sig_enforced(void)
805{
806}
807
808
809static inline
810void *dereference_module_function_descriptor(struct module *mod, void *ptr)
811{
812 return ptr;
813}
814
815#endif
816
817#ifdef CONFIG_SYSFS
818extern struct kset *module_kset;
819extern struct kobj_type module_ktype;
820extern int module_sysfs_initialized;
821#endif
822
823#define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x)
824
825
826
827#define __MODULE_STRING(x) __stringify(x)
828
829#ifdef CONFIG_GENERIC_BUG
830void module_bug_finalize(const Elf_Ehdr *, const Elf_Shdr *,
831 struct module *);
832void module_bug_cleanup(struct module *);
833
834#else
835
836static inline void module_bug_finalize(const Elf_Ehdr *hdr,
837 const Elf_Shdr *sechdrs,
838 struct module *mod)
839{
840}
841static inline void module_bug_cleanup(struct module *mod) {}
842#endif
843
844#ifdef CONFIG_RETPOLINE
845extern bool retpoline_module_ok(bool has_retpoline);
846#else
847static inline bool retpoline_module_ok(bool has_retpoline)
848{
849 return true;
850}
851#endif
852
853#ifdef CONFIG_MODULE_SIG
854static inline bool module_sig_ok(struct module *module)
855{
856 return module->sig_ok;
857}
858#else
859static inline bool module_sig_ok(struct module *module)
860{
861 return true;
862}
863#endif
864
865int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,
866 struct module *, unsigned long),
867 void *data);
868
869#endif
870