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