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#include <linux/srcu.h>
25
26#include <linux/percpu.h>
27#include <asm/module.h>
28
29
30#define MODULE_SIG_STRING "~Module signature appended~\n"
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
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
216#define MODULE_LICENSE(_license) MODULE_INFO(license, _license)
217
218
219
220
221
222#define MODULE_AUTHOR(_author) MODULE_INFO(author, _author)
223
224
225#define MODULE_DESCRIPTION(_description) MODULE_INFO(description, _description)
226
227#ifdef MODULE
228
229#define MODULE_DEVICE_TABLE(type, name) \
230extern typeof(name) __mod_##type##__##name##_device_table \
231 __attribute__ ((unused, alias(__stringify(name))))
232#else
233#define MODULE_DEVICE_TABLE(type, name)
234#endif
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253#if defined(MODULE) || !defined(CONFIG_SYSFS)
254#define MODULE_VERSION(_version) MODULE_INFO(version, _version)
255#else
256#define MODULE_VERSION(_version) \
257 MODULE_INFO(version, _version); \
258 static struct module_version_attribute ___modver_attr = { \
259 .mattr = { \
260 .attr = { \
261 .name = "version", \
262 .mode = S_IRUGO, \
263 }, \
264 .show = __modver_version_show, \
265 }, \
266 .module_name = KBUILD_MODNAME, \
267 .version = _version, \
268 }; \
269 static const struct module_version_attribute \
270 __used __attribute__ ((__section__ ("__modver"))) \
271 * __moduleparam_const __modver_attr = &___modver_attr
272#endif
273
274
275
276
277#define MODULE_FIRMWARE(_firmware) MODULE_INFO(firmware, _firmware)
278
279struct notifier_block;
280
281#ifdef CONFIG_MODULES
282
283extern int modules_disabled;
284
285void *__symbol_get(const char *symbol);
286void *__symbol_get_gpl(const char *symbol);
287#define symbol_get(x) ((typeof(&x))(__symbol_get(__stringify(x))))
288
289
290struct module_use {
291 struct list_head source_list;
292 struct list_head target_list;
293 struct module *source, *target;
294};
295
296enum module_state {
297 MODULE_STATE_LIVE,
298 MODULE_STATE_COMING,
299 MODULE_STATE_GOING,
300 MODULE_STATE_UNFORMED,
301};
302
303struct mod_tree_node {
304 struct module *mod;
305 struct latch_tree_node node;
306};
307
308struct module_layout {
309
310 void *base;
311
312 unsigned int size;
313
314 unsigned int text_size;
315
316 unsigned int ro_size;
317
318 unsigned int ro_after_init_size;
319
320#ifdef CONFIG_MODULES_TREE_LOOKUP
321 struct mod_tree_node mtn;
322#endif
323};
324
325#ifdef CONFIG_MODULES_TREE_LOOKUP
326
327#define __module_layout_align ____cacheline_aligned
328#else
329#define __module_layout_align
330#endif
331
332struct mod_kallsyms {
333 Elf_Sym *symtab;
334 unsigned int num_symtab;
335 char *strtab;
336 char *typetab;
337};
338
339#ifdef CONFIG_LIVEPATCH
340struct klp_modinfo {
341 Elf_Ehdr hdr;
342 Elf_Shdr *sechdrs;
343 char *secstrings;
344 unsigned int symndx;
345};
346#endif
347
348struct module {
349 enum module_state state;
350
351
352 struct list_head list;
353
354
355 char name[MODULE_NAME_LEN];
356
357
358 struct module_kobject mkobj;
359 struct module_attribute *modinfo_attrs;
360 const char *version;
361 const char *srcversion;
362 struct kobject *holders_dir;
363
364
365 const struct kernel_symbol *syms;
366 const s32 *crcs;
367 unsigned int num_syms;
368
369
370#ifdef CONFIG_SYSFS
371 struct mutex param_lock;
372#endif
373 struct kernel_param *kp;
374 unsigned int num_kp;
375
376
377 unsigned int num_gpl_syms;
378 const struct kernel_symbol *gpl_syms;
379 const s32 *gpl_crcs;
380
381#ifdef CONFIG_UNUSED_SYMBOLS
382
383 const struct kernel_symbol *unused_syms;
384 const s32 *unused_crcs;
385 unsigned int num_unused_syms;
386
387
388 unsigned int num_unused_gpl_syms;
389 const struct kernel_symbol *unused_gpl_syms;
390 const s32 *unused_gpl_crcs;
391#endif
392
393#ifdef CONFIG_MODULE_SIG
394
395 bool sig_ok;
396#endif
397
398 bool async_probe_requested;
399
400
401 const struct kernel_symbol *gpl_future_syms;
402 const s32 *gpl_future_crcs;
403 unsigned int num_gpl_future_syms;
404
405
406 unsigned int num_exentries;
407 struct exception_table_entry *extable;
408
409
410 int (*init)(void);
411
412
413 struct module_layout core_layout __module_layout_align;
414 struct module_layout init_layout;
415
416
417 struct mod_arch_specific arch;
418
419 unsigned long taints;
420
421#ifdef CONFIG_GENERIC_BUG
422
423 unsigned num_bugs;
424 struct list_head bug_list;
425 struct bug_entry *bug_table;
426#endif
427
428#ifdef CONFIG_KALLSYMS
429
430 struct mod_kallsyms *kallsyms;
431 struct mod_kallsyms core_kallsyms;
432
433
434 struct module_sect_attrs *sect_attrs;
435
436
437 struct module_notes_attrs *notes_attrs;
438#endif
439
440
441
442 char *args;
443
444#ifdef CONFIG_SMP
445
446 void __percpu *percpu;
447 unsigned int percpu_size;
448#endif
449
450#ifdef CONFIG_TRACEPOINTS
451 unsigned int num_tracepoints;
452 tracepoint_ptr_t *tracepoints_ptrs;
453#endif
454#ifdef CONFIG_TREE_SRCU
455 unsigned int num_srcu_structs;
456 struct srcu_struct **srcu_struct_ptrs;
457#endif
458#ifdef CONFIG_BPF_EVENTS
459 unsigned int num_bpf_raw_events;
460 struct bpf_raw_event_map *bpf_raw_events;
461#endif
462#ifdef CONFIG_JUMP_LABEL
463 struct jump_entry *jump_entries;
464 unsigned int num_jump_entries;
465#endif
466#ifdef CONFIG_TRACING
467 unsigned int num_trace_bprintk_fmt;
468 const char **trace_bprintk_fmt_start;
469#endif
470#ifdef CONFIG_EVENT_TRACING
471 struct trace_event_call **trace_events;
472 unsigned int num_trace_events;
473 struct trace_eval_map **trace_evals;
474 unsigned int num_trace_evals;
475#endif
476#ifdef CONFIG_FTRACE_MCOUNT_RECORD
477 unsigned int num_ftrace_callsites;
478 unsigned long *ftrace_callsites;
479#endif
480
481#ifdef CONFIG_LIVEPATCH
482 bool klp;
483 bool klp_alive;
484
485
486 struct klp_modinfo *klp_info;
487#endif
488
489#ifdef CONFIG_MODULE_UNLOAD
490
491 struct list_head source_list;
492
493 struct list_head target_list;
494
495
496 void (*exit)(void);
497
498 atomic_t refcnt;
499#endif
500
501#ifdef CONFIG_CONSTRUCTORS
502
503 ctor_fn_t *ctors;
504 unsigned int num_ctors;
505#endif
506
507#ifdef CONFIG_FUNCTION_ERROR_INJECTION
508 struct error_injection_entry *ei_funcs;
509 unsigned int num_ei_funcs;
510#endif
511} ____cacheline_aligned __randomize_layout;
512#ifndef MODULE_ARCH_INIT
513#define MODULE_ARCH_INIT {}
514#endif
515
516#ifndef HAVE_ARCH_KALLSYMS_SYMBOL_VALUE
517static inline unsigned long kallsyms_symbol_value(const Elf_Sym *sym)
518{
519 return sym->st_value;
520}
521#endif
522
523extern struct mutex module_mutex;
524
525
526
527
528static inline bool module_is_live(struct module *mod)
529{
530 return mod->state != MODULE_STATE_GOING;
531}
532
533struct module *__module_text_address(unsigned long addr);
534struct module *__module_address(unsigned long addr);
535bool is_module_address(unsigned long addr);
536bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr);
537bool is_module_percpu_address(unsigned long addr);
538bool is_module_text_address(unsigned long addr);
539
540static inline bool within_module_core(unsigned long addr,
541 const struct module *mod)
542{
543 return (unsigned long)mod->core_layout.base <= addr &&
544 addr < (unsigned long)mod->core_layout.base + mod->core_layout.size;
545}
546
547static inline bool within_module_init(unsigned long addr,
548 const struct module *mod)
549{
550 return (unsigned long)mod->init_layout.base <= addr &&
551 addr < (unsigned long)mod->init_layout.base + mod->init_layout.size;
552}
553
554static inline bool within_module(unsigned long addr, const struct module *mod)
555{
556 return within_module_init(addr, mod) || within_module_core(addr, mod);
557}
558
559
560struct module *find_module(const char *name);
561
562struct symsearch {
563 const struct kernel_symbol *start, *stop;
564 const s32 *crcs;
565 enum {
566 NOT_GPL_ONLY,
567 GPL_ONLY,
568 WILL_BE_GPL_ONLY,
569 } licence;
570 bool unused;
571};
572
573
574
575
576
577
578const struct kernel_symbol *find_symbol(const char *name,
579 struct module **owner,
580 const s32 **crc,
581 bool gplok,
582 bool warn);
583
584
585
586
587
588
589bool each_symbol_section(bool (*fn)(const struct symsearch *arr,
590 struct module *owner,
591 void *data), void *data);
592
593
594
595int module_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
596 char *name, char *module_name, int *exported);
597
598
599unsigned long module_kallsyms_lookup_name(const char *name);
600
601int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,
602 struct module *, unsigned long),
603 void *data);
604
605extern void __noreturn __module_put_and_exit(struct module *mod,
606 long code);
607#define module_put_and_exit(code) __module_put_and_exit(THIS_MODULE, code)
608
609#ifdef CONFIG_MODULE_UNLOAD
610int module_refcount(struct module *mod);
611void __symbol_put(const char *symbol);
612#define symbol_put(x) __symbol_put(__stringify(x))
613void symbol_put_addr(void *addr);
614
615
616
617extern void __module_get(struct module *module);
618
619
620
621extern bool try_module_get(struct module *module);
622
623extern void module_put(struct module *module);
624
625#else
626static inline bool try_module_get(struct module *module)
627{
628 return !module || module_is_live(module);
629}
630static inline void module_put(struct module *module)
631{
632}
633static inline void __module_get(struct module *module)
634{
635}
636#define symbol_put(x) do { } while (0)
637#define symbol_put_addr(p) do { } while (0)
638
639#endif
640int ref_module(struct module *a, struct module *b);
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_STRICT_MODULE_RWX
850extern void set_all_modules_text_rw(void);
851extern void set_all_modules_text_ro(void);
852extern void module_enable_ro(const struct module *mod, bool after_init);
853extern void module_disable_ro(const struct module *mod);
854#else
855static inline void set_all_modules_text_rw(void) { }
856static inline void set_all_modules_text_ro(void) { }
857static inline void module_enable_ro(const struct module *mod, bool after_init) { }
858static inline void module_disable_ro(const struct module *mod) { }
859#endif
860
861#ifdef CONFIG_GENERIC_BUG
862void module_bug_finalize(const Elf_Ehdr *, const Elf_Shdr *,
863 struct module *);
864void module_bug_cleanup(struct module *);
865
866#else
867
868static inline void module_bug_finalize(const Elf_Ehdr *hdr,
869 const Elf_Shdr *sechdrs,
870 struct module *mod)
871{
872}
873static inline void module_bug_cleanup(struct module *mod) {}
874#endif
875
876#ifdef CONFIG_RETPOLINE
877extern bool retpoline_module_ok(bool has_retpoline);
878#else
879static inline bool retpoline_module_ok(bool has_retpoline)
880{
881 return true;
882}
883#endif
884
885#ifdef CONFIG_MODULE_SIG
886static inline bool module_sig_ok(struct module *module)
887{
888 return module->sig_ok;
889}
890#else
891static inline bool module_sig_ok(struct module *module)
892{
893 return true;
894}
895#endif
896
897#endif
898