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