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_PRINTK_INDEX
515 unsigned int printk_index_size;
516 struct pi_entry **printk_index_start;
517#endif
518
519#ifdef CONFIG_MODULE_UNLOAD
520
521 struct list_head source_list;
522
523 struct list_head target_list;
524
525
526 void (*exit)(void);
527
528 atomic_t refcnt;
529#endif
530
531#ifdef CONFIG_CONSTRUCTORS
532
533 ctor_fn_t *ctors;
534 unsigned int num_ctors;
535#endif
536
537#ifdef CONFIG_FUNCTION_ERROR_INJECTION
538 struct error_injection_entry *ei_funcs;
539 unsigned int num_ei_funcs;
540#endif
541} ____cacheline_aligned __randomize_layout;
542#ifndef MODULE_ARCH_INIT
543#define MODULE_ARCH_INIT {}
544#endif
545
546#ifndef HAVE_ARCH_KALLSYMS_SYMBOL_VALUE
547static inline unsigned long kallsyms_symbol_value(const Elf_Sym *sym)
548{
549 return sym->st_value;
550}
551#endif
552
553
554
555
556static inline bool module_is_live(struct module *mod)
557{
558 return mod->state != MODULE_STATE_GOING;
559}
560
561struct module *__module_text_address(unsigned long addr);
562struct module *__module_address(unsigned long addr);
563bool is_module_address(unsigned long addr);
564bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr);
565bool is_module_percpu_address(unsigned long addr);
566bool is_module_text_address(unsigned long addr);
567
568static inline bool within_module_core(unsigned long addr,
569 const struct module *mod)
570{
571 return (unsigned long)mod->core_layout.base <= addr &&
572 addr < (unsigned long)mod->core_layout.base + mod->core_layout.size;
573}
574
575static inline bool within_module_init(unsigned long addr,
576 const struct module *mod)
577{
578 return (unsigned long)mod->init_layout.base <= addr &&
579 addr < (unsigned long)mod->init_layout.base + mod->init_layout.size;
580}
581
582static inline bool within_module(unsigned long addr, const struct module *mod)
583{
584 return within_module_init(addr, mod) || within_module_core(addr, mod);
585}
586
587
588struct module *find_module(const char *name);
589
590
591
592int module_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
593 char *name, char *module_name, int *exported);
594
595
596unsigned long module_kallsyms_lookup_name(const char *name);
597
598extern void __noreturn __module_put_and_exit(struct module *mod,
599 long code);
600#define module_put_and_exit(code) __module_put_and_exit(THIS_MODULE, code)
601
602#ifdef CONFIG_MODULE_UNLOAD
603int module_refcount(struct module *mod);
604void __symbol_put(const char *symbol);
605#define symbol_put(x) __symbol_put(__stringify(x))
606void symbol_put_addr(void *addr);
607
608
609
610extern void __module_get(struct module *module);
611
612
613
614extern bool try_module_get(struct module *module);
615
616extern void module_put(struct module *module);
617
618#else
619static inline bool try_module_get(struct module *module)
620{
621 return !module || module_is_live(module);
622}
623static inline void module_put(struct module *module)
624{
625}
626static inline void __module_get(struct module *module)
627{
628}
629#define symbol_put(x) do { } while (0)
630#define symbol_put_addr(p) do { } while (0)
631
632#endif
633
634
635#define module_name(mod) \
636({ \
637 struct module *__mod = (mod); \
638 __mod ? __mod->name : "kernel"; \
639})
640
641
642void *dereference_module_function_descriptor(struct module *mod, void *ptr);
643
644
645
646
647const char *module_address_lookup(unsigned long addr,
648 unsigned long *symbolsize,
649 unsigned long *offset,
650 char **modname, const unsigned char **modbuildid,
651 char *namebuf);
652int lookup_module_symbol_name(unsigned long addr, char *symname);
653int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name);
654
655int register_module_notifier(struct notifier_block *nb);
656int unregister_module_notifier(struct notifier_block *nb);
657
658extern void print_modules(void);
659
660static inline bool module_requested_async_probing(struct module *module)
661{
662 return module && module->async_probe_requested;
663}
664
665#ifdef CONFIG_LIVEPATCH
666static inline bool is_livepatch_module(struct module *mod)
667{
668 return mod->klp;
669}
670#else
671static inline bool is_livepatch_module(struct module *mod)
672{
673 return false;
674}
675#endif
676
677bool is_module_sig_enforced(void);
678void set_module_sig_enforced(void);
679
680#else
681
682static inline struct module *__module_address(unsigned long addr)
683{
684 return NULL;
685}
686
687static inline struct module *__module_text_address(unsigned long addr)
688{
689 return NULL;
690}
691
692static inline bool is_module_address(unsigned long addr)
693{
694 return false;
695}
696
697static inline bool is_module_percpu_address(unsigned long addr)
698{
699 return false;
700}
701
702static inline bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr)
703{
704 return false;
705}
706
707static inline bool is_module_text_address(unsigned long addr)
708{
709 return false;
710}
711
712static inline bool within_module_core(unsigned long addr,
713 const struct module *mod)
714{
715 return false;
716}
717
718static inline bool within_module_init(unsigned long addr,
719 const struct module *mod)
720{
721 return false;
722}
723
724static inline bool within_module(unsigned long addr, const struct module *mod)
725{
726 return false;
727}
728
729
730#define symbol_get(x) ({ extern typeof(x) x __attribute__((weak,visibility("hidden"))); &(x); })
731#define symbol_put(x) do { } while (0)
732#define symbol_put_addr(x) do { } while (0)
733
734static inline void __module_get(struct module *module)
735{
736}
737
738static inline bool try_module_get(struct module *module)
739{
740 return true;
741}
742
743static inline void module_put(struct module *module)
744{
745}
746
747#define module_name(mod) "kernel"
748
749
750static inline const char *module_address_lookup(unsigned long addr,
751 unsigned long *symbolsize,
752 unsigned long *offset,
753 char **modname,
754 const unsigned char **modbuildid,
755 char *namebuf)
756{
757 return NULL;
758}
759
760static inline int lookup_module_symbol_name(unsigned long addr, char *symname)
761{
762 return -ERANGE;
763}
764
765static inline int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size, unsigned long *offset, char *modname, char *name)
766{
767 return -ERANGE;
768}
769
770static inline int module_get_kallsym(unsigned int symnum, unsigned long *value,
771 char *type, char *name,
772 char *module_name, int *exported)
773{
774 return -ERANGE;
775}
776
777static inline unsigned long module_kallsyms_lookup_name(const char *name)
778{
779 return 0;
780}
781
782static inline int register_module_notifier(struct notifier_block *nb)
783{
784
785 return 0;
786}
787
788static inline int unregister_module_notifier(struct notifier_block *nb)
789{
790 return 0;
791}
792
793#define module_put_and_exit(code) do_exit(code)
794
795static inline void print_modules(void)
796{
797}
798
799static inline bool module_requested_async_probing(struct module *module)
800{
801 return false;
802}
803
804static inline bool is_module_sig_enforced(void)
805{
806 return false;
807}
808
809static inline void set_module_sig_enforced(void)
810{
811}
812
813
814static inline
815void *dereference_module_function_descriptor(struct module *mod, void *ptr)
816{
817 return ptr;
818}
819
820#endif
821
822#ifdef CONFIG_SYSFS
823extern struct kset *module_kset;
824extern struct kobj_type module_ktype;
825extern int module_sysfs_initialized;
826#endif
827
828#define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x)
829
830
831
832#define __MODULE_STRING(x) __stringify(x)
833
834#ifdef CONFIG_GENERIC_BUG
835void module_bug_finalize(const Elf_Ehdr *, const Elf_Shdr *,
836 struct module *);
837void module_bug_cleanup(struct module *);
838
839#else
840
841static inline void module_bug_finalize(const Elf_Ehdr *hdr,
842 const Elf_Shdr *sechdrs,
843 struct module *mod)
844{
845}
846static inline void module_bug_cleanup(struct module *mod) {}
847#endif
848
849#ifdef CONFIG_RETPOLINE
850extern bool retpoline_module_ok(bool has_retpoline);
851#else
852static inline bool retpoline_module_ok(bool has_retpoline)
853{
854 return true;
855}
856#endif
857
858#ifdef CONFIG_MODULE_SIG
859static inline bool module_sig_ok(struct module *module)
860{
861 return module->sig_ok;
862}
863#else
864static inline bool module_sig_ok(struct module *module)
865{
866 return true;
867}
868#endif
869
870int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,
871 struct module *, unsigned long),
872 void *data);
873
874#endif
875