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/cleanup.h>
18#include <linux/kmod.h>
19#include <linux/init.h>
20#include <linux/elf.h>
21#include <linux/stringify.h>
22#include <linux/kobject.h>
23#include <linux/moduleparam.h>
24#include <linux/jump_label.h>
25#include <linux/export.h>
26#include <linux/rbtree_latch.h>
27#include <linux/error-injection.h>
28#include <linux/tracepoint-defs.h>
29#include <linux/srcu.h>
30#include <linux/static_call_types.h>
31#include <linux/dynamic_debug.h>
32
33#include <linux/percpu.h>
34#include <asm/module.h>
35
36#define MODULE_NAME_LEN __MODULE_NAME_LEN
37
38struct modversion_info {
39 unsigned long crc;
40 char name[MODULE_NAME_LEN];
41};
42
43struct module;
44struct exception_table_entry;
45
46struct module_kobject {
47 struct kobject kobj;
48 struct module *mod;
49 struct kobject *drivers_dir;
50 struct module_param_attrs *mp;
51 struct completion *kobj_completion;
52} __randomize_layout;
53
54struct module_attribute {
55 struct attribute attr;
56 ssize_t (*show)(const struct module_attribute *, struct module_kobject *,
57 char *);
58 ssize_t (*store)(const struct module_attribute *, struct module_kobject *,
59 const char *, size_t count);
60 void (*setup)(struct module *, const char *);
61 int (*test)(struct module *);
62 void (*free)(struct module *);
63};
64
65struct module_version_attribute {
66 struct module_attribute mattr;
67 const char *module_name;
68 const char *version;
69};
70
71extern ssize_t __modver_version_show(const struct module_attribute *,
72 struct module_kobject *, char *);
73
74extern const struct module_attribute module_uevent;
75
76
77extern int init_module(void);
78extern void cleanup_module(void);
79
80#ifndef MODULE
81
82
83
84
85
86
87
88
89#define module_init(x) __initcall(x);
90
91
92
93
94
95
96
97
98
99
100
101#define module_exit(x) __exitcall(x);
102
103#else
104
105
106
107
108
109
110
111
112#define early_initcall(fn) module_init(fn)
113#define core_initcall(fn) module_init(fn)
114#define core_initcall_sync(fn) module_init(fn)
115#define postcore_initcall(fn) module_init(fn)
116#define postcore_initcall_sync(fn) module_init(fn)
117#define arch_initcall(fn) module_init(fn)
118#define subsys_initcall(fn) module_init(fn)
119#define subsys_initcall_sync(fn) module_init(fn)
120#define fs_initcall(fn) module_init(fn)
121#define fs_initcall_sync(fn) module_init(fn)
122#define rootfs_initcall(fn) module_init(fn)
123#define device_initcall(fn) module_init(fn)
124#define device_initcall_sync(fn) module_init(fn)
125#define late_initcall(fn) module_init(fn)
126#define late_initcall_sync(fn) module_init(fn)
127
128#define console_initcall(fn) module_init(fn)
129
130
131#define module_init(initfn) \
132 static inline initcall_t __maybe_unused __inittest(void) \
133 { return initfn; } \
134 int init_module(void) __copy(initfn) \
135 __attribute__((alias(#initfn))); \
136 ___ADDRESSABLE(init_module, __initdata);
137
138
139#define module_exit(exitfn) \
140 static inline exitcall_t __maybe_unused __exittest(void) \
141 { return exitfn; } \
142 void cleanup_module(void) __copy(exitfn) \
143 __attribute__((alias(#exitfn))); \
144 ___ADDRESSABLE(cleanup_module, __exitdata);
145
146#endif
147
148
149
150#ifdef CONFIG_MODULES
151#define __init_or_module
152#define __initdata_or_module
153#define __initconst_or_module
154#define __INIT_OR_MODULE .text
155#define __INITDATA_OR_MODULE .data
156#define __INITRODATA_OR_MODULE .section ".rodata","a",%progbits
157#else
158#define __init_or_module __init
159#define __initdata_or_module __initdata
160#define __initconst_or_module __initconst
161#define __INIT_OR_MODULE __INIT
162#define __INITDATA_OR_MODULE __INITDATA
163#define __INITRODATA_OR_MODULE __INITRODATA
164#endif
165
166struct module_kobject *lookup_or_create_module_kobject(const char *name);
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#define MODULE_WEAKDEP(_weakdep) MODULE_INFO(weakdep, _weakdep)
181
182
183
184
185
186#ifdef MODULE
187#define MODULE_FILE
188#else
189#define MODULE_FILE MODULE_INFO(file, KBUILD_MODFILE);
190#endif
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
231
232
233
234
235
236#define MODULE_LICENSE(_license) MODULE_FILE MODULE_INFO(license, _license)
237
238
239
240
241
242#define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)
243
244
245#define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)
246
247#ifdef MODULE
248
249#define MODULE_DEVICE_TABLE(type, name) \
250static typeof(name) __mod_device_table__##type##__##name \
251 __attribute__ ((used, alias(__stringify(name))))
252#else
253#define MODULE_DEVICE_TABLE(type, name)
254#endif
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273#if defined(MODULE) || !defined(CONFIG_SYSFS)
274#define MODULE_VERSION(_version) MODULE_INFO(version, _version)
275#else
276#define MODULE_VERSION(_version) \
277 MODULE_INFO(version, _version); \
278 static const struct module_version_attribute __modver_attr \
279 __used __section("__modver") \
280 __aligned(__alignof__(struct module_version_attribute)) \
281 = { \
282 .mattr = { \
283 .attr = { \
284 .name = "version", \
285 .mode = S_IRUGO, \
286 }, \
287 .show = __modver_version_show, \
288 }, \
289 .module_name = KBUILD_MODNAME, \
290 .version = _version, \
291 }
292#endif
293
294
295
296
297#define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware)
298
299#define MODULE_IMPORT_NS(ns) MODULE_INFO(import_ns, ns)
300
301struct notifier_block;
302
303enum module_state {
304 MODULE_STATE_LIVE,
305 MODULE_STATE_COMING,
306 MODULE_STATE_GOING,
307 MODULE_STATE_UNFORMED,
308};
309
310struct mod_tree_node {
311 struct module *mod;
312 struct latch_tree_node node;
313};
314
315enum mod_mem_type {
316 MOD_TEXT = 0,
317 MOD_DATA,
318 MOD_RODATA,
319 MOD_RO_AFTER_INIT,
320 MOD_INIT_TEXT,
321 MOD_INIT_DATA,
322 MOD_INIT_RODATA,
323
324 MOD_MEM_NUM_TYPES,
325 MOD_INVALID = -1,
326};
327
328#define mod_mem_type_is_init(type) \
329 ((type) == MOD_INIT_TEXT || \
330 (type) == MOD_INIT_DATA || \
331 (type) == MOD_INIT_RODATA)
332
333#define mod_mem_type_is_core(type) (!mod_mem_type_is_init(type))
334
335#define mod_mem_type_is_text(type) \
336 ((type) == MOD_TEXT || \
337 (type) == MOD_INIT_TEXT)
338
339#define mod_mem_type_is_data(type) (!mod_mem_type_is_text(type))
340
341#define mod_mem_type_is_core_data(type) \
342 (mod_mem_type_is_core(type) && \
343 mod_mem_type_is_data(type))
344
345#define for_each_mod_mem_type(type) \
346 for (enum mod_mem_type (type) = 0; \
347 (type) < MOD_MEM_NUM_TYPES; (type)++)
348
349#define for_class_mod_mem_type(type, class) \
350 for_each_mod_mem_type(type) \
351 if (mod_mem_type_is_##class(type))
352
353struct module_memory {
354 void *base;
355 bool is_rox;
356 unsigned int size;
357
358#ifdef CONFIG_MODULES_TREE_LOOKUP
359 struct mod_tree_node mtn;
360#endif
361};
362
363#ifdef CONFIG_MODULES_TREE_LOOKUP
364
365#define __module_memory_align ____cacheline_aligned
366#else
367#define __module_memory_align
368#endif
369
370struct mod_kallsyms {
371 Elf_Sym *symtab;
372 unsigned int num_symtab;
373 char *strtab;
374 char *typetab;
375};
376
377#ifdef CONFIG_LIVEPATCH
378
379
380
381
382
383
384
385
386struct klp_modinfo {
387 Elf_Ehdr hdr;
388 Elf_Shdr *sechdrs;
389 char *secstrings;
390 unsigned int symndx;
391};
392#endif
393
394struct module {
395 enum module_state state;
396
397
398 struct list_head list;
399
400
401 char name[MODULE_NAME_LEN];
402
403#ifdef CONFIG_STACKTRACE_BUILD_ID
404
405 unsigned char build_id[BUILD_ID_SIZE_MAX];
406#endif
407
408
409 struct module_kobject mkobj;
410 struct module_attribute *modinfo_attrs;
411 const char *version;
412 const char *srcversion;
413 struct kobject *holders_dir;
414
415
416 const struct kernel_symbol *syms;
417 const u32 *crcs;
418 unsigned int num_syms;
419
420#ifdef CONFIG_ARCH_USES_CFI_TRAPS
421 s32 *kcfi_traps;
422 s32 *kcfi_traps_end;
423#endif
424
425
426#ifdef CONFIG_SYSFS
427 struct mutex param_lock;
428#endif
429 struct kernel_param *kp;
430 unsigned int num_kp;
431
432
433 unsigned int num_gpl_syms;
434 const struct kernel_symbol *gpl_syms;
435 const u32 *gpl_crcs;
436 bool using_gplonly_symbols;
437
438#ifdef CONFIG_MODULE_SIG
439
440 bool sig_ok;
441#endif
442
443 bool async_probe_requested;
444
445
446 unsigned int num_exentries;
447 struct exception_table_entry *extable;
448
449
450 int (*init)(void);
451
452 struct module_memory mem[MOD_MEM_NUM_TYPES] __module_memory_align;
453
454
455 struct mod_arch_specific arch;
456
457 unsigned long taints;
458
459#ifdef CONFIG_GENERIC_BUG
460
461 unsigned num_bugs;
462 struct list_head bug_list;
463 struct bug_entry *bug_table;
464#endif
465
466#ifdef CONFIG_KALLSYMS
467
468 struct mod_kallsyms __rcu *kallsyms;
469 struct mod_kallsyms core_kallsyms;
470
471
472 struct module_sect_attrs *sect_attrs;
473
474
475 struct module_notes_attrs *notes_attrs;
476#endif
477
478
479
480 char *args;
481
482#ifdef CONFIG_SMP
483
484 void __percpu *percpu;
485 unsigned int percpu_size;
486#endif
487 void *noinstr_text_start;
488 unsigned int noinstr_text_size;
489
490#ifdef CONFIG_TRACEPOINTS
491 unsigned int num_tracepoints;
492 tracepoint_ptr_t *tracepoints_ptrs;
493#endif
494#ifdef CONFIG_TREE_SRCU
495 unsigned int num_srcu_structs;
496 struct srcu_struct **srcu_struct_ptrs;
497#endif
498#ifdef CONFIG_BPF_EVENTS
499 unsigned int num_bpf_raw_events;
500 struct bpf_raw_event_map *bpf_raw_events;
501#endif
502#ifdef CONFIG_DEBUG_INFO_BTF_MODULES
503 unsigned int btf_data_size;
504 unsigned int btf_base_data_size;
505 void *btf_data;
506 void *btf_base_data;
507#endif
508#ifdef CONFIG_JUMP_LABEL
509 struct jump_entry *jump_entries;
510 unsigned int num_jump_entries;
511#endif
512#ifdef CONFIG_TRACING
513 unsigned int num_trace_bprintk_fmt;
514 const char **trace_bprintk_fmt_start;
515#endif
516#ifdef CONFIG_EVENT_TRACING
517 struct trace_event_call **trace_events;
518 unsigned int num_trace_events;
519 struct trace_eval_map **trace_evals;
520 unsigned int num_trace_evals;
521#endif
522#ifdef CONFIG_DYNAMIC_FTRACE
523 unsigned int num_ftrace_callsites;
524 unsigned long *ftrace_callsites;
525#endif
526#ifdef CONFIG_KPROBES
527 void *kprobes_text_start;
528 unsigned int kprobes_text_size;
529 unsigned long *kprobe_blacklist;
530 unsigned int num_kprobe_blacklist;
531#endif
532#ifdef CONFIG_HAVE_STATIC_CALL_INLINE
533 int num_static_call_sites;
534 struct static_call_site *static_call_sites;
535#endif
536#if IS_ENABLED(CONFIG_KUNIT)
537 int num_kunit_init_suites;
538 struct kunit_suite **kunit_init_suites;
539 int num_kunit_suites;
540 struct kunit_suite **kunit_suites;
541#endif
542
543
544#ifdef CONFIG_LIVEPATCH
545 bool klp;
546 bool klp_alive;
547
548
549 struct klp_modinfo *klp_info;
550#endif
551
552#ifdef CONFIG_PRINTK_INDEX
553 unsigned int printk_index_size;
554 struct pi_entry **printk_index_start;
555#endif
556
557#ifdef CONFIG_MODULE_UNLOAD
558
559 struct list_head source_list;
560
561 struct list_head target_list;
562
563
564 void (*exit)(void);
565
566 atomic_t refcnt;
567#endif
568
569#ifdef CONFIG_CONSTRUCTORS
570
571 ctor_fn_t *ctors;
572 unsigned int num_ctors;
573#endif
574
575#ifdef CONFIG_FUNCTION_ERROR_INJECTION
576 struct error_injection_entry *ei_funcs;
577 unsigned int num_ei_funcs;
578#endif
579#ifdef CONFIG_DYNAMIC_DEBUG_CORE
580 struct _ddebug_info dyndbg_info;
581#endif
582} ____cacheline_aligned __randomize_layout;
583#ifndef MODULE_ARCH_INIT
584#define MODULE_ARCH_INIT {}
585#endif
586
587#ifdef CONFIG_MODULES
588
589
590void *__symbol_get(const char *symbol);
591void *__symbol_get_gpl(const char *symbol);
592#define symbol_get(x) ({ \
593 static const char __notrim[] \
594 __used __section(".no_trim_symbol") = __stringify(x); \
595 (typeof(&x))(__symbol_get(__stringify(x))); })
596
597#ifndef HAVE_ARCH_KALLSYMS_SYMBOL_VALUE
598static inline unsigned long kallsyms_symbol_value(const Elf_Sym *sym)
599{
600 return sym->st_value;
601}
602#endif
603
604
605
606
607static inline bool module_is_live(struct module *mod)
608{
609 return mod->state != MODULE_STATE_GOING;
610}
611
612static inline bool module_is_coming(struct module *mod)
613{
614 return mod->state == MODULE_STATE_COMING;
615}
616
617struct module *__module_text_address(unsigned long addr);
618struct module *__module_address(unsigned long addr);
619bool is_module_address(unsigned long addr);
620bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr);
621bool is_module_percpu_address(unsigned long addr);
622bool is_module_text_address(unsigned long addr);
623
624static inline bool within_module_mem_type(unsigned long addr,
625 const struct module *mod,
626 enum mod_mem_type type)
627{
628 unsigned long base, size;
629
630 base = (unsigned long)mod->mem[type].base;
631 size = mod->mem[type].size;
632 return addr - base < size;
633}
634
635static inline bool within_module_core(unsigned long addr,
636 const struct module *mod)
637{
638 for_class_mod_mem_type(type, core) {
639 if (within_module_mem_type(addr, mod, type))
640 return true;
641 }
642 return false;
643}
644
645static inline bool within_module_init(unsigned long addr,
646 const struct module *mod)
647{
648 for_class_mod_mem_type(type, init) {
649 if (within_module_mem_type(addr, mod, type))
650 return true;
651 }
652 return false;
653}
654
655static inline bool within_module(unsigned long addr, const struct module *mod)
656{
657 return within_module_init(addr, mod) || within_module_core(addr, mod);
658}
659
660
661struct module *find_module(const char *name);
662
663extern void __noreturn __module_put_and_kthread_exit(struct module *mod,
664 long code);
665#define module_put_and_kthread_exit(code) __module_put_and_kthread_exit(THIS_MODULE, code)
666
667#ifdef CONFIG_MODULE_UNLOAD
668int module_refcount(struct module *mod);
669void __symbol_put(const char *symbol);
670#define symbol_put(x) __symbol_put(__stringify(x))
671void symbol_put_addr(void *addr);
672
673
674
675extern void __module_get(struct module *module);
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707extern bool try_module_get(struct module *module);
708
709
710
711
712
713
714
715
716
717extern void module_put(struct module *module);
718
719#else
720static inline bool try_module_get(struct module *module)
721{
722 return !module || module_is_live(module);
723}
724static inline void module_put(struct module *module)
725{
726}
727static inline void __module_get(struct module *module)
728{
729}
730#define symbol_put(x) do { } while (0)
731#define symbol_put_addr(p) do { } while (0)
732
733#endif
734
735
736#define module_name(mod) \
737({ \
738 struct module *__mod = (mod); \
739 __mod ? __mod->name : "kernel"; \
740})
741
742
743void *dereference_module_function_descriptor(struct module *mod, void *ptr);
744
745int register_module_notifier(struct notifier_block *nb);
746int unregister_module_notifier(struct notifier_block *nb);
747
748extern void print_modules(void);
749
750static inline bool module_requested_async_probing(struct module *module)
751{
752 return module && module->async_probe_requested;
753}
754
755static inline bool is_livepatch_module(struct module *mod)
756{
757#ifdef CONFIG_LIVEPATCH
758 return mod->klp;
759#else
760 return false;
761#endif
762}
763
764void set_module_sig_enforced(void);
765
766void module_for_each_mod(int(*func)(struct module *mod, void *data), void *data);
767
768#else
769
770static inline struct module *__module_address(unsigned long addr)
771{
772 return NULL;
773}
774
775static inline struct module *__module_text_address(unsigned long addr)
776{
777 return NULL;
778}
779
780static inline bool is_module_address(unsigned long addr)
781{
782 return false;
783}
784
785static inline bool is_module_percpu_address(unsigned long addr)
786{
787 return false;
788}
789
790static inline bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr)
791{
792 return false;
793}
794
795static inline bool is_module_text_address(unsigned long addr)
796{
797 return false;
798}
799
800static inline bool within_module_core(unsigned long addr,
801 const struct module *mod)
802{
803 return false;
804}
805
806static inline bool within_module_init(unsigned long addr,
807 const struct module *mod)
808{
809 return false;
810}
811
812static inline bool within_module(unsigned long addr, const struct module *mod)
813{
814 return false;
815}
816
817
818#define symbol_get(x) ({ extern typeof(x) x __attribute__((weak,visibility("hidden"))); &(x); })
819#define symbol_put(x) do { } while (0)
820#define symbol_put_addr(x) do { } while (0)
821
822static inline void __module_get(struct module *module)
823{
824}
825
826static inline bool try_module_get(struct module *module)
827{
828 return true;
829}
830
831static inline void module_put(struct module *module)
832{
833}
834
835#define module_name(mod) "kernel"
836
837static inline int register_module_notifier(struct notifier_block *nb)
838{
839
840 return 0;
841}
842
843static inline int unregister_module_notifier(struct notifier_block *nb)
844{
845 return 0;
846}
847
848#define module_put_and_kthread_exit(code) kthread_exit(code)
849
850static inline void print_modules(void)
851{
852}
853
854static inline bool module_requested_async_probing(struct module *module)
855{
856 return false;
857}
858
859
860static inline void set_module_sig_enforced(void)
861{
862}
863
864
865static inline
866void *dereference_module_function_descriptor(struct module *mod, void *ptr)
867{
868 return ptr;
869}
870
871static inline bool module_is_coming(struct module *mod)
872{
873 return false;
874}
875
876static inline void module_for_each_mod(int(*func)(struct module *mod, void *data), void *data)
877{
878}
879#endif
880
881#ifdef CONFIG_SYSFS
882extern struct kset *module_kset;
883extern const struct kobj_type module_ktype;
884#endif
885
886#define symbol_request(x) try_then_request_module(symbol_get(x), "symbol:" #x)
887
888
889
890#define __MODULE_STRING(x) __stringify(x)
891
892#ifdef CONFIG_GENERIC_BUG
893void module_bug_finalize(const Elf_Ehdr *, const Elf_Shdr *,
894 struct module *);
895void module_bug_cleanup(struct module *);
896
897#else
898
899static inline void module_bug_finalize(const Elf_Ehdr *hdr,
900 const Elf_Shdr *sechdrs,
901 struct module *mod)
902{
903}
904static inline void module_bug_cleanup(struct module *mod) {}
905#endif
906
907#ifdef CONFIG_MITIGATION_RETPOLINE
908extern bool retpoline_module_ok(bool has_retpoline);
909#else
910static inline bool retpoline_module_ok(bool has_retpoline)
911{
912 return true;
913}
914#endif
915
916#ifdef CONFIG_MODULE_SIG
917bool is_module_sig_enforced(void);
918
919static inline bool module_sig_ok(struct module *module)
920{
921 return module->sig_ok;
922}
923#else
924static inline bool is_module_sig_enforced(void)
925{
926 return false;
927}
928
929static inline bool module_sig_ok(struct module *module)
930{
931 return true;
932}
933#endif
934
935#if defined(CONFIG_MODULES) && defined(CONFIG_KALLSYMS)
936int module_kallsyms_on_each_symbol(const char *modname,
937 int (*fn)(void *, const char *, unsigned long),
938 void *data);
939
940
941
942
943
944int module_address_lookup(unsigned long addr,
945 unsigned long *symbolsize,
946 unsigned long *offset,
947 char **modname, const unsigned char **modbuildid,
948 char *namebuf);
949int lookup_module_symbol_name(unsigned long addr, char *symname);
950int lookup_module_symbol_attrs(unsigned long addr,
951 unsigned long *size,
952 unsigned long *offset,
953 char *modname,
954 char *name);
955
956
957
958
959int module_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
960 char *name, char *module_name, int *exported);
961
962
963unsigned long module_kallsyms_lookup_name(const char *name);
964
965unsigned long find_kallsyms_symbol_value(struct module *mod, const char *name);
966
967#else
968
969static inline int module_kallsyms_on_each_symbol(const char *modname,
970 int (*fn)(void *, const char *, unsigned long),
971 void *data)
972{
973 return -EOPNOTSUPP;
974}
975
976
977static inline int module_address_lookup(unsigned long addr,
978 unsigned long *symbolsize,
979 unsigned long *offset,
980 char **modname,
981 const unsigned char **modbuildid,
982 char *namebuf)
983{
984 return 0;
985}
986
987static inline int lookup_module_symbol_name(unsigned long addr, char *symname)
988{
989 return -ERANGE;
990}
991
992static inline int module_get_kallsym(unsigned int symnum, unsigned long *value,
993 char *type, char *name,
994 char *module_name, int *exported)
995{
996 return -ERANGE;
997}
998
999static inline unsigned long module_kallsyms_lookup_name(const char *name)
1000{
1001 return 0;
1002}
1003
1004static inline unsigned long find_kallsyms_symbol_value(struct module *mod,
1005 const char *name)
1006{
1007 return 0;
1008}
1009
1010#endif
1011
1012
1013DEFINE_FREE(module_put, struct module *, if (_T) module_put(_T))
1014
1015#endif
1016