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