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