History

Merge tag 'modules-5.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux

Pull modules updates from Luis Chamberlain: - It was time to tidy up kernel/module.c and one way of starting with that effort was to split it up into files. At my request Aaron Tomlin spearheaded that effort with the goal to not introduce any functional at all during that endeavour. The penalty for the split is +1322 bytes total, +112 bytes in data, +1210 bytes in text while bss is unchanged. One of the benefits of this other than helping make the code easier to read and review is summoning more help on review for changes with livepatching so kernel/module/livepatch.c is now pegged as maintained by the live patching folks. The before and after with just the move on a defconfig on x86-64: $ size kernel/module.o text data bss dec hex filename 38434 4540 104 43078 a846 kernel/module.o $ size -t kernel/module/*.o text data bss dec hex filename 4785 120 0 4905 1329 kernel/module/kallsyms.o 28577 4416 104 33097 8149 kernel/module/main.o 1158 8 0 1166 48e kernel/module/procfs.o 902 108 0 1010 3f2 kernel/module/strict_rwx.o 3390 0 0 3390 d3e kernel/module/sysfs.o 832 0 0 832 340 kernel/module/tree_lookup.o 39644 4652 104 44400 ad70 (TOTALS) - Aaron added module unload taint tracking (MODULE_UNLOAD_TAINT_TRACKING), to enable tracking unloaded modules which did taint the kernel. - Christophe Leroy added CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC which lets architectures to request having modules data in vmalloc area instead of module area. There are three reasons why an architecture might want this: a) On some architectures (like book3s/32) it is not possible to protect against execution on a page basis. The exec stuff can be mapped by different arch segment sizes (on book3s/32 that is 256M segments). By default the module area is in an Exec segment while vmalloc area is in a NoExec segment. Using vmalloc lets you muck with module data as NoExec on those architectures whereas before you could not. b) By pushing more module data to vmalloc you also increase the probability of module text to remain within a closer distance from kernel core text and this reduces trampolines, this has been reported on arm first and powerpc folks are following that lead. c) Free'ing module_alloc() (Exec by default) area leaves this exposed as Exec by default, some architectures have some security enhancements to set this as NoExec on free, and splitting module data with text let's future generic special allocators be added to the kernel without having developers try to grok the tribal knowledge per arch. Work like Rick Edgecombe's permission vmalloc interface [0] becomes easier to address over time. [0] https://lore.kernel.org/lkml/20201120202426.18009-1-rick.p.edgecombe@intel.com/#r - Masahiro Yamada's symbol search enhancements * tag 'modules-5.19-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/mcgrof/linux: (33 commits) module: merge check_exported_symbol() into find_exported_symbol_in_section() module: do not binary-search in __ksymtab_gpl if fsa->gplok is false module: do not pass opaque pointer for symbol search module: show disallowed symbol name for inherit_taint() module: fix [e_shstrndx].sh_size=0 OOB access module: Introduce module unload taint tracking module: Move module_assert_mutex_or_preempt() to internal.h module: Make module_flags_taint() accept a module's taints bitmap and usable outside core code module.h: simplify MODULE_IMPORT_NS powerpc: Select ARCH_WANTS_MODULES_DATA_IN_VMALLOC on book3s/32 and 8xx module: Remove module_addr_min and module_addr_max module: Add CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC module: Introduce data_layout module: Prepare for handling several RB trees module: Always have struct mod_tree_root module: Rename debug_align() as strict_align() module: Rework layout alignment to avoid BUG_ON()s module: Move module_enable_x() and frob_text() in strict_rwx.c module: Make module_enable_x() independent of CONFIG_ARCH_HAS_STRICT_MODULE_RWX module: Move version support into a separate file ...

Linus Torvalds committed 4 years ago

Commit ef98f9c2 parents 44d3572 7390b9429 files · +2384 −2052Browse files

Showing the changes to kernel/module (15 of 29 files). Show all

Unified · Split

15 files
  1. kernel/module/Makefile +21 −0
  2. kernel/module/debug_kmemleak.c +30 −0
  3. kernel/module/decompress.c +276 −0
  4. kernel/module/internal.h +302 −0
  5. kernel/module/kallsyms.c +512 −0
  6. kernel/module/kdb.c +62 −0
  7. kernel/module/livepatch.c +74 −0
  8. kernel/module/main.c +3131 −0
  9. kernel/module/procfs.c +146 −0
  10. kernel/module/signing.c +122 −0
  11. kernel/module/strict_rwx.c +143 −0
  12. kernel/module/sysfs.c +436 −0
  13. kernel/module/tracking.c +61 −0
  14. kernel/module/tree_lookup.c +117 −0
  15. kernel/module/version.c +101 −0
kernel/module/Makefile+21−0
@@ -0,0 +1,21 @@
1# SPDX-License-Identifier: GPL-2.0-only
2#
3# Makefile for linux kernel module support
4#
5
6# These are called from save_stack_trace() on slub debug path,
7# and produce insane amounts of uninteresting coverage.
8KCOV_INSTRUMENT_module.o := n
9
10obj-y += main.o strict_rwx.o
11obj-$(CONFIG_MODULE_DECOMPRESS) += decompress.o
12obj-$(CONFIG_MODULE_SIG) += signing.o
13obj-$(CONFIG_LIVEPATCH) += livepatch.o
14obj-$(CONFIG_MODULES_TREE_LOOKUP) += tree_lookup.o
15obj-$(CONFIG_DEBUG_KMEMLEAK) += debug_kmemleak.o
16obj-$(CONFIG_KALLSYMS) += kallsyms.o
17obj-$(CONFIG_PROC_FS) += procfs.o
18obj-$(CONFIG_SYSFS) += sysfs.o
19obj-$(CONFIG_KGDB_KDB) += kdb.o
20obj-$(CONFIG_MODVERSIONS) += version.o
21obj-$(CONFIG_MODULE_UNLOAD_TAINT_TRACKING) += tracking.o
kernel/module/debug_kmemleak.c+30−0
@@ -0,0 +1,30 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Module kmemleak support
4 *
5 * Copyright (C) 2009 Catalin Marinas
6 */
7
8#include <linux/module.h>
9#include <linux/kmemleak.h>
10#include "internal.h"
11
12void kmemleak_load_module(const struct module *mod,
13 const struct load_info *info)
14{
15 unsigned int i;
16
17 /* only scan the sections containing data */
18 kmemleak_scan_area(mod, sizeof(struct module), GFP_KERNEL);
19
20 for (i = 1; i < info->hdr->e_shnum; i++) {
21 /* Scan all writable sections that's not executable */
22 if (!(info->sechdrs[i].sh_flags & SHF_ALLOC) ||
23 !(info->sechdrs[i].sh_flags & SHF_WRITE) ||
24 (info->sechdrs[i].sh_flags & SHF_EXECINSTR))
25 continue;
26
27 kmemleak_scan_area((void *)info->sechdrs[i].sh_addr,
28 info->sechdrs[i].sh_size, GFP_KERNEL);
29 }
30}
kernel/module/decompress.c+276−0
@@ -0,0 +1,276 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright 2021 Google LLC.
4 */
5
6#include <linux/init.h>
7#include <linux/highmem.h>
8#include <linux/kobject.h>
9#include <linux/mm.h>
10#include <linux/module.h>
11#include <linux/slab.h>
12#include <linux/sysfs.h>
13#include <linux/vmalloc.h>
14
15#include "internal.h"
16
17static int module_extend_max_pages(struct load_info *info, unsigned int extent)
18{
19 struct page **new_pages;
20
21 new_pages = kvmalloc_array(info->max_pages + extent,
22 sizeof(info->pages), GFP_KERNEL);
23 if (!new_pages)
24 return -ENOMEM;
25
26 memcpy(new_pages, info->pages, info->max_pages * sizeof(info->pages));
27 kvfree(info->pages);
28 info->pages = new_pages;
29 info->max_pages += extent;
30
31 return 0;
32}
33
34static struct page *module_get_next_page(struct load_info *info)
35{
36 struct page *page;
37 int error;
38
39 if (info->max_pages == info->used_pages) {
40 error = module_extend_max_pages(info, info->used_pages);
41 if (error)
42 return ERR_PTR(error);
43 }
44
45 page = alloc_page(GFP_KERNEL | __GFP_HIGHMEM);
46 if (!page)
47 return ERR_PTR(-ENOMEM);
48
49 info->pages[info->used_pages++] = page;
50 return page;
51}
52
53#ifdef CONFIG_MODULE_COMPRESS_GZIP
54#include <linux/zlib.h>
55#define MODULE_COMPRESSION gzip
56#define MODULE_DECOMPRESS_FN module_gzip_decompress
57
58/*
59 * Calculate length of the header which consists of signature, header
60 * flags, time stamp and operating system ID (10 bytes total), plus
61 * an optional filename.
62 */
63static size_t module_gzip_header_len(const u8 *buf, size_t size)
64{
65 const u8 signature[] = { 0x1f, 0x8b, 0x08 };
66 size_t len = 10;
67
68 if (size < len || memcmp(buf, signature, sizeof(signature)))
69 return 0;
70
71 if (buf[3] & 0x08) {
72 do {
73 /*
74 * If we can't find the end of the file name we must
75 * be dealing with a corrupted file.
76 */
77 if (len == size)
78 return 0;
79 } while (buf[len++] != '\0');
80 }
81
82 return len;
83}
84
85static ssize_t module_gzip_decompress(struct load_info *info,
86 const void *buf, size_t size)
87{
88 struct z_stream_s s = { 0 };
89 size_t new_size = 0;
90 size_t gzip_hdr_len;
91 ssize_t retval;
92 int rc;
93
94 gzip_hdr_len = module_gzip_header_len(buf, size);
95 if (!gzip_hdr_len) {
96 pr_err("not a gzip compressed module\n");
97 return -EINVAL;
98 }
99
100 s.next_in = buf + gzip_hdr_len;
101 s.avail_in = size - gzip_hdr_len;
102
103 s.workspace = kmalloc(zlib_inflate_workspacesize(), GFP_KERNEL);
104 if (!s.workspace)
105 return -ENOMEM;
106
107 rc = zlib_inflateInit2(&s, -MAX_WBITS);
108 if (rc != Z_OK) {
109 pr_err("failed to initialize decompressor: %d\n", rc);
110 retval = -EINVAL;
111 goto out;
112 }
113
114 do {
115 struct page *page = module_get_next_page(info);
116
117 if (!page) {
118 retval = -ENOMEM;
119 goto out_inflate_end;
120 }
121
122 s.next_out = kmap(page);
123 s.avail_out = PAGE_SIZE;
124 rc = zlib_inflate(&s, 0);
125 kunmap(page);
126
127 new_size += PAGE_SIZE - s.avail_out;
128 } while (rc == Z_OK);
129
130 if (rc != Z_STREAM_END) {
131 pr_err("decompression failed with status %d\n", rc);
132 retval = -EINVAL;
133 goto out_inflate_end;
134 }
135
136 retval = new_size;
137
138out_inflate_end:
139 zlib_inflateEnd(&s);
140out:
141 kfree(s.workspace);
142 return retval;
143}
144#elif CONFIG_MODULE_COMPRESS_XZ
145#include <linux/xz.h>
146#define MODULE_COMPRESSION xz
147#define MODULE_DECOMPRESS_FN module_xz_decompress
148
149static ssize_t module_xz_decompress(struct load_info *info,
150 const void *buf, size_t size)
151{
152 static const u8 signature[] = { 0xfd, '7', 'z', 'X', 'Z', 0 };
153 struct xz_dec *xz_dec;
154 struct xz_buf xz_buf;
155 enum xz_ret xz_ret;
156 size_t new_size = 0;
157 ssize_t retval;
158
159 if (size < sizeof(signature) ||
160 memcmp(buf, signature, sizeof(signature))) {
161 pr_err("not an xz compressed module\n");
162 return -EINVAL;
163 }
164
165 xz_dec = xz_dec_init(XZ_DYNALLOC, (u32)-1);
166 if (!xz_dec)
167 return -ENOMEM;
168
169 xz_buf.in_size = size;
170 xz_buf.in = buf;
171 xz_buf.in_pos = 0;
172
173 do {
174 struct page *page = module_get_next_page(info);
175
176 if (!page) {
177 retval = -ENOMEM;
178 goto out;
179 }
180
181 xz_buf.out = kmap(page);
182 xz_buf.out_pos = 0;
183 xz_buf.out_size = PAGE_SIZE;
184 xz_ret = xz_dec_run(xz_dec, &xz_buf);
185 kunmap(page);
186
187 new_size += xz_buf.out_pos;
188 } while (xz_buf.out_pos == PAGE_SIZE && xz_ret == XZ_OK);
189
190 if (xz_ret != XZ_STREAM_END) {
191 pr_err("decompression failed with status %d\n", xz_ret);
192 retval = -EINVAL;
193 goto out;
194 }
195
196 retval = new_size;
197
198 out:
199 xz_dec_end(xz_dec);
200 return retval;
201}
202#else
203#error "Unexpected configuration for CONFIG_MODULE_DECOMPRESS"
204#endif
205
206int module_decompress(struct load_info *info, const void *buf, size_t size)
207{
208 unsigned int n_pages;
209 ssize_t data_size;
210 int error;
211
212 /*
213 * Start with number of pages twice as big as needed for
214 * compressed data.
215 */
216 n_pages = DIV_ROUND_UP(size, PAGE_SIZE) * 2;
217 error = module_extend_max_pages(info, n_pages);
218
219 data_size = MODULE_DECOMPRESS_FN(info, buf, size);
220 if (data_size < 0) {
221 error = data_size;
222 goto err;
223 }
224
225 info->hdr = vmap(info->pages, info->used_pages, VM_MAP, PAGE_KERNEL);
226 if (!info->hdr) {
227 error = -ENOMEM;
228 goto err;
229 }
230
231 info->len = data_size;
232 return 0;
233
234err:
235 module_decompress_cleanup(info);
236 return error;
237}
238
239void module_decompress_cleanup(struct load_info *info)
240{
241 int i;
242
243 if (info->hdr)
244 vunmap(info->hdr);
245
246 for (i = 0; i < info->used_pages; i++)
247 __free_page(info->pages[i]);
248
249 kvfree(info->pages);
250
251 info->pages = NULL;
252 info->max_pages = info->used_pages = 0;
253}
254
255#ifdef CONFIG_SYSFS
256static ssize_t compression_show(struct kobject *kobj,
257 struct kobj_attribute *attr, char *buf)
258{
259 return sysfs_emit(buf, "%s\n", __stringify(MODULE_COMPRESSION));
260}
261
262static struct kobj_attribute module_compression_attr = __ATTR_RO(compression);
263
264static int __init module_decompress_sysfs_init(void)
265{
266 int error;
267
268 error = sysfs_create_file(&module_kset->kobj,
269 &module_compression_attr.attr);
270 if (error)
271 pr_warn("Failed to create 'compression' attribute");
272
273 return 0;
274}
275late_initcall(module_decompress_sysfs_init);
276#endif
kernel/module/internal.h+302−0
@@ -0,0 +1,302 @@
1/* SPDX-License-Identifier: GPL-2.0-or-later */
2/* Module internals
3 *
4 * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved.
5 * Written by David Howells (dhowells@redhat.com)
6 */
7
8#include <linux/elf.h>
9#include <linux/compiler.h>
10#include <linux/module.h>
11#include <linux/mutex.h>
12#include <linux/rculist.h>
13#include <linux/rcupdate.h>
14
15#ifndef ARCH_SHF_SMALL
16#define ARCH_SHF_SMALL 0
17#endif
18
19/* If this is set, the section belongs in the init part of the module */
20#define INIT_OFFSET_MASK (1UL << (BITS_PER_LONG - 1))
21/* Maximum number of characters written by module_flags() */
22#define MODULE_FLAGS_BUF_SIZE (TAINT_FLAGS_COUNT + 4)
23
24#ifndef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
25#define data_layout core_layout
26#endif
27
28/*
29 * Modules' sections will be aligned on page boundaries
30 * to ensure complete separation of code and data, but
31 * only when CONFIG_STRICT_MODULE_RWX=y
32 */
33#ifdef CONFIG_STRICT_MODULE_RWX
34# define strict_align(X) PAGE_ALIGN(X)
35#else
36# define strict_align(X) (X)
37#endif
38
39extern struct mutex module_mutex;
40extern struct list_head modules;
41
42extern struct module_attribute *modinfo_attrs[];
43extern size_t modinfo_attrs_count;
44
45/* Provided by the linker */
46extern const struct kernel_symbol __start___ksymtab[];
47extern const struct kernel_symbol __stop___ksymtab[];
48extern const struct kernel_symbol __start___ksymtab_gpl[];
49extern const struct kernel_symbol __stop___ksymtab_gpl[];
50extern const s32 __start___kcrctab[];
51extern const s32 __start___kcrctab_gpl[];
52
53struct load_info {
54 const char *name;
55 /* pointer to module in temporary copy, freed at end of load_module() */
56 struct module *mod;
57 Elf_Ehdr *hdr;
58 unsigned long len;
59 Elf_Shdr *sechdrs;
60 char *secstrings, *strtab;
61 unsigned long symoffs, stroffs, init_typeoffs, core_typeoffs;
62 struct _ddebug *debug;
63 unsigned int num_debug;
64 bool sig_ok;
65#ifdef CONFIG_KALLSYMS
66 unsigned long mod_kallsyms_init_off;
67#endif
68#ifdef CONFIG_MODULE_DECOMPRESS
69 struct page **pages;
70 unsigned int max_pages;
71 unsigned int used_pages;
72#endif
73 struct {
74 unsigned int sym, str, mod, vers, info, pcpu;
75 } index;
76};
77
78enum mod_license {
79 NOT_GPL_ONLY,
80 GPL_ONLY,
81};
82
83struct find_symbol_arg {
84 /* Input */
85 const char *name;
86 bool gplok;
87 bool warn;
88
89 /* Output */
90 struct module *owner;
91 const s32 *crc;
92 const struct kernel_symbol *sym;
93 enum mod_license license;
94};
95
96int mod_verify_sig(const void *mod, struct load_info *info);
97int try_to_force_load(struct module *mod, const char *reason);
98bool find_symbol(struct find_symbol_arg *fsa);
99struct module *find_module_all(const char *name, size_t len, bool even_unformed);
100int cmp_name(const void *name, const void *sym);
101long module_get_offset(struct module *mod, unsigned int *size, Elf_Shdr *sechdr,
102 unsigned int section);
103char *module_flags(struct module *mod, char *buf);
104size_t module_flags_taint(unsigned long taints, char *buf);
105
106static inline void module_assert_mutex_or_preempt(void)
107{
108#ifdef CONFIG_LOCKDEP
109 if (unlikely(!debug_locks))
110 return;
111
112 WARN_ON_ONCE(!rcu_read_lock_sched_held() &&
113 !lockdep_is_held(&module_mutex));
114#endif
115}
116
117static inline unsigned long kernel_symbol_value(const struct kernel_symbol *sym)
118{
119#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
120 return (unsigned long)offset_to_ptr(&sym->value_offset);
121#else
122 return sym->value;
123#endif
124}
125
126#ifdef CONFIG_LIVEPATCH
127int copy_module_elf(struct module *mod, struct load_info *info);
128void free_module_elf(struct module *mod);
129#else /* !CONFIG_LIVEPATCH */
130static inline int copy_module_elf(struct module *mod, struct load_info *info)
131{
132 return 0;
133}
134
135static inline void free_module_elf(struct module *mod) { }
136#endif /* CONFIG_LIVEPATCH */
137
138static inline bool set_livepatch_module(struct module *mod)
139{
140#ifdef CONFIG_LIVEPATCH
141 mod->klp = true;
142 return true;
143#else
144 return false;
145#endif
146}
147
148#ifdef CONFIG_MODULE_UNLOAD_TAINT_TRACKING
149struct mod_unload_taint {
150 struct list_head list;
151 char name[MODULE_NAME_LEN];
152 unsigned long taints;
153 u64 count;
154};
155
156int try_add_tainted_module(struct module *mod);
157void print_unloaded_tainted_modules(void);
158#else /* !CONFIG_MODULE_UNLOAD_TAINT_TRACKING */
159static inline int try_add_tainted_module(struct module *mod)
160{
161 return 0;
162}
163
164static inline void print_unloaded_tainted_modules(void)
165{
166}
167#endif /* CONFIG_MODULE_UNLOAD_TAINT_TRACKING */
168
169#ifdef CONFIG_MODULE_DECOMPRESS
170int module_decompress(struct load_info *info, const void *buf, size_t size);
171void module_decompress_cleanup(struct load_info *info);
172#else
173static inline int module_decompress(struct load_info *info,
174 const void *buf, size_t size)
175{
176 return -EOPNOTSUPP;
177}
178
179static inline void module_decompress_cleanup(struct load_info *info)
180{
181}
182#endif
183
184struct mod_tree_root {
185#ifdef CONFIG_MODULES_TREE_LOOKUP
186 struct latch_tree_root root;
187#endif
188 unsigned long addr_min;
189 unsigned long addr_max;
190};
191
192extern struct mod_tree_root mod_tree;
193extern struct mod_tree_root mod_data_tree;
194
195#ifdef CONFIG_MODULES_TREE_LOOKUP
196void mod_tree_insert(struct module *mod);
197void mod_tree_remove_init(struct module *mod);
198void mod_tree_remove(struct module *mod);
199struct module *mod_find(unsigned long addr, struct mod_tree_root *tree);
200#else /* !CONFIG_MODULES_TREE_LOOKUP */
201
202static inline void mod_tree_insert(struct module *mod) { }
203static inline void mod_tree_remove_init(struct module *mod) { }
204static inline void mod_tree_remove(struct module *mod) { }
205static inline struct module *mod_find(unsigned long addr, struct mod_tree_root *tree)
206{
207 struct module *mod;
208
209 list_for_each_entry_rcu(mod, &modules, list,
210 lockdep_is_held(&module_mutex)) {
211 if (within_module(addr, mod))
212 return mod;
213 }
214
215 return NULL;
216}
217#endif /* CONFIG_MODULES_TREE_LOOKUP */
218
219void module_enable_ro(const struct module *mod, bool after_init);
220void module_enable_nx(const struct module *mod);
221void module_enable_x(const struct module *mod);
222int module_enforce_rwx_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
223 char *secstrings, struct module *mod);
224bool module_check_misalignment(const struct module *mod);
225
226#ifdef CONFIG_MODULE_SIG
227int module_sig_check(struct load_info *info, int flags);
228#else /* !CONFIG_MODULE_SIG */
229static inline int module_sig_check(struct load_info *info, int flags)
230{
231 return 0;
232}
233#endif /* !CONFIG_MODULE_SIG */
234
235#ifdef CONFIG_DEBUG_KMEMLEAK
236void kmemleak_load_module(const struct module *mod, const struct load_info *info);
237#else /* !CONFIG_DEBUG_KMEMLEAK */
238static inline void kmemleak_load_module(const struct module *mod,
239 const struct load_info *info) { }
240#endif /* CONFIG_DEBUG_KMEMLEAK */
241
242#ifdef CONFIG_KALLSYMS
243void init_build_id(struct module *mod, const struct load_info *info);
244void layout_symtab(struct module *mod, struct load_info *info);
245void add_kallsyms(struct module *mod, const struct load_info *info);
246unsigned long find_kallsyms_symbol_value(struct module *mod, const char *name);
247
248static inline bool sect_empty(const Elf_Shdr *sect)
249{
250 return !(sect->sh_flags & SHF_ALLOC) || sect->sh_size == 0;
251}
252#else /* !CONFIG_KALLSYMS */
253static inline void init_build_id(struct module *mod, const struct load_info *info) { }
254static inline void layout_symtab(struct module *mod, struct load_info *info) { }
255static inline void add_kallsyms(struct module *mod, const struct load_info *info) { }
256#endif /* CONFIG_KALLSYMS */
257
258#ifdef CONFIG_SYSFS
259int mod_sysfs_setup(struct module *mod, const struct load_info *info,
260 struct kernel_param *kparam, unsigned int num_params);
261void mod_sysfs_teardown(struct module *mod);
262void init_param_lock(struct module *mod);
263#else /* !CONFIG_SYSFS */
264static inline int mod_sysfs_setup(struct module *mod,
265 const struct load_info *info,
266 struct kernel_param *kparam,
267 unsigned int num_params)
268{
269 return 0;
270}
271
272static inline void mod_sysfs_teardown(struct module *mod) { }
273static inline void init_param_lock(struct module *mod) { }
274#endif /* CONFIG_SYSFS */
275
276#ifdef CONFIG_MODVERSIONS
277int check_version(const struct load_info *info,
278 const char *symname, struct module *mod, const s32 *crc);
279void module_layout(struct module *mod, struct modversion_info *ver, struct kernel_param *kp,
280 struct kernel_symbol *ks, struct tracepoint * const *tp);
281int check_modstruct_version(const struct load_info *info, struct module *mod);
282int same_magic(const char *amagic, const char *bmagic, bool has_crcs);
283#else /* !CONFIG_MODVERSIONS */
284static inline int check_version(const struct load_info *info,
285 const char *symname,
286 struct module *mod,
287 const s32 *crc)
288{
289 return 1;
290}
291
292static inline int check_modstruct_version(const struct load_info *info,
293 struct module *mod)
294{
295 return 1;
296}
297
298static inline int same_magic(const char *amagic, const char *bmagic, bool has_crcs)
299{
300 return strcmp(amagic, bmagic) == 0;
301}
302#endif /* CONFIG_MODVERSIONS */
kernel/module/kallsyms.c+512−0
@@ -0,0 +1,512 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Module kallsyms support
4 *
5 * Copyright (C) 2010 Rusty Russell
6 */
7
8#include <linux/module.h>
9#include <linux/kallsyms.h>
10#include <linux/buildid.h>
11#include <linux/bsearch.h>
12#include "internal.h"
13
14/* Lookup exported symbol in given range of kernel_symbols */
15static const struct kernel_symbol *lookup_exported_symbol(const char *name,
16 const struct kernel_symbol *start,
17 const struct kernel_symbol *stop)
18{
19 return bsearch(name, start, stop - start,
20 sizeof(struct kernel_symbol), cmp_name);
21}
22
23static int is_exported(const char *name, unsigned long value,
24 const struct module *mod)
25{
26 const struct kernel_symbol *ks;
27
28 if (!mod)
29 ks = lookup_exported_symbol(name, __start___ksymtab, __stop___ksymtab);
30 else
31 ks = lookup_exported_symbol(name, mod->syms, mod->syms + mod->num_syms);
32
33 return ks && kernel_symbol_value(ks) == value;
34}
35
36/* As per nm */
37static char elf_type(const Elf_Sym *sym, const struct load_info *info)
38{
39 const Elf_Shdr *sechdrs = info->sechdrs;
40
41 if (ELF_ST_BIND(sym->st_info) == STB_WEAK) {
42 if (ELF_ST_TYPE(sym->st_info) == STT_OBJECT)
43 return 'v';
44 else
45 return 'w';
46 }
47 if (sym->st_shndx == SHN_UNDEF)
48 return 'U';
49 if (sym->st_shndx == SHN_ABS || sym->st_shndx == info->index.pcpu)
50 return 'a';
51 if (sym->st_shndx >= SHN_LORESERVE)
52 return '?';
53 if (sechdrs[sym->st_shndx].sh_flags & SHF_EXECINSTR)
54 return 't';
55 if (sechdrs[sym->st_shndx].sh_flags & SHF_ALLOC &&
56 sechdrs[sym->st_shndx].sh_type != SHT_NOBITS) {
57 if (!(sechdrs[sym->st_shndx].sh_flags & SHF_WRITE))
58 return 'r';
59 else if (sechdrs[sym->st_shndx].sh_flags & ARCH_SHF_SMALL)
60 return 'g';
61 else
62 return 'd';
63 }
64 if (sechdrs[sym->st_shndx].sh_type == SHT_NOBITS) {
65 if (sechdrs[sym->st_shndx].sh_flags & ARCH_SHF_SMALL)
66 return 's';
67 else
68 return 'b';
69 }
70 if (strstarts(info->secstrings + sechdrs[sym->st_shndx].sh_name,
71 ".debug")) {
72 return 'n';
73 }
74 return '?';
75}
76
77static bool is_core_symbol(const Elf_Sym *src, const Elf_Shdr *sechdrs,
78 unsigned int shnum, unsigned int pcpundx)
79{
80 const Elf_Shdr *sec;
81
82 if (src->st_shndx == SHN_UNDEF ||
83 src->st_shndx >= shnum ||
84 !src->st_name)
85 return false;
86
87#ifdef CONFIG_KALLSYMS_ALL
88 if (src->st_shndx == pcpundx)
89 return true;
90#endif
91
92 sec = sechdrs + src->st_shndx;
93 if (!(sec->sh_flags & SHF_ALLOC)
94#ifndef CONFIG_KALLSYMS_ALL
95 || !(sec->sh_flags & SHF_EXECINSTR)
96#endif
97 || (sec->sh_entsize & INIT_OFFSET_MASK))
98 return false;
99
100 return true;
101}
102
103/*
104 * We only allocate and copy the strings needed by the parts of symtab
105 * we keep. This is simple, but has the effect of making multiple
106 * copies of duplicates. We could be more sophisticated, see
107 * linux-kernel thread starting with
108 * <73defb5e4bca04a6431392cc341112b1@localhost>.
109 */
110void layout_symtab(struct module *mod, struct load_info *info)
111{
112 Elf_Shdr *symsect = info->sechdrs + info->index.sym;
113 Elf_Shdr *strsect = info->sechdrs + info->index.str;
114 const Elf_Sym *src;
115 unsigned int i, nsrc, ndst, strtab_size = 0;
116
117 /* Put symbol section at end of init part of module. */
118 symsect->sh_flags |= SHF_ALLOC;
119 symsect->sh_entsize = module_get_offset(mod, &mod->init_layout.size, symsect,
120 info->index.sym) | INIT_OFFSET_MASK;
121 pr_debug("\t%s\n", info->secstrings + symsect->sh_name);
122
123 src = (void *)info->hdr + symsect->sh_offset;
124 nsrc = symsect->sh_size / sizeof(*src);
125
126 /* Compute total space required for the core symbols' strtab. */
127 for (ndst = i = 0; i < nsrc; i++) {
128 if (i == 0 || is_livepatch_module(mod) ||
129 is_core_symbol(src + i, info->sechdrs, info->hdr->e_shnum,
130 info->index.pcpu)) {
131 strtab_size += strlen(&info->strtab[src[i].st_name]) + 1;
132 ndst++;
133 }
134 }
135
136 /* Append room for core symbols at end of core part. */
137 info->symoffs = ALIGN(mod->data_layout.size, symsect->sh_addralign ?: 1);
138 info->stroffs = mod->data_layout.size = info->symoffs + ndst * sizeof(Elf_Sym);
139 mod->data_layout.size += strtab_size;
140 info->core_typeoffs = mod->data_layout.size;
141 mod->data_layout.size += ndst * sizeof(char);
142 mod->data_layout.size = strict_align(mod->data_layout.size);
143
144 /* Put string table section at end of init part of module. */
145 strsect->sh_flags |= SHF_ALLOC;
146 strsect->sh_entsize = module_get_offset(mod, &mod->init_layout.size, strsect,
147 info->index.str) | INIT_OFFSET_MASK;
148 pr_debug("\t%s\n", info->secstrings + strsect->sh_name);
149
150 /* We'll tack temporary mod_kallsyms on the end. */
151 mod->init_layout.size = ALIGN(mod->init_layout.size,
152 __alignof__(struct mod_kallsyms));
153 info->mod_kallsyms_init_off = mod->init_layout.size;
154 mod->init_layout.size += sizeof(struct mod_kallsyms);
155 info->init_typeoffs = mod->init_layout.size;
156 mod->init_layout.size += nsrc * sizeof(char);
157 mod->init_layout.size = strict_align(mod->init_layout.size);
158}
159
160/*
161 * We use the full symtab and strtab which layout_symtab arranged to
162 * be appended to the init section. Later we switch to the cut-down
163 * core-only ones.
164 */
165void add_kallsyms(struct module *mod, const struct load_info *info)
166{
167 unsigned int i, ndst;
168 const Elf_Sym *src;
169 Elf_Sym *dst;
170 char *s;
171 Elf_Shdr *symsec = &info->sechdrs[info->index.sym];
172
173 /* Set up to point into init section. */
174 mod->kallsyms = (void __rcu *)mod->init_layout.base +
175 info->mod_kallsyms_init_off;
176
177 preempt_disable();
178 /* The following is safe since this pointer cannot change */
179 rcu_dereference_sched(mod->kallsyms)->symtab = (void *)symsec->sh_addr;
180 rcu_dereference_sched(mod->kallsyms)->num_symtab = symsec->sh_size / sizeof(Elf_Sym);
181 /* Make sure we get permanent strtab: don't use info->strtab. */
182 rcu_dereference_sched(mod->kallsyms)->strtab =
183 (void *)info->sechdrs[info->index.str].sh_addr;
184 rcu_dereference_sched(mod->kallsyms)->typetab = mod->init_layout.base + info->init_typeoffs;
185
186 /*
187 * Now populate the cut down core kallsyms for after init
188 * and set types up while we still have access to sections.
189 */
190 mod->core_kallsyms.symtab = dst = mod->data_layout.base + info->symoffs;
191 mod->core_kallsyms.strtab = s = mod->data_layout.base + info->stroffs;
192 mod->core_kallsyms.typetab = mod->data_layout.base + info->core_typeoffs;
193 src = rcu_dereference_sched(mod->kallsyms)->symtab;
194 for (ndst = i = 0; i < rcu_dereference_sched(mod->kallsyms)->num_symtab; i++) {
195 rcu_dereference_sched(mod->kallsyms)->typetab[i] = elf_type(src + i, info);
196 if (i == 0 || is_livepatch_module(mod) ||
197 is_core_symbol(src + i, info->sechdrs, info->hdr->e_shnum,
198 info->index.pcpu)) {
199 mod->core_kallsyms.typetab[ndst] =
200 rcu_dereference_sched(mod->kallsyms)->typetab[i];
201 dst[ndst] = src[i];
202 dst[ndst++].st_name = s - mod->core_kallsyms.strtab;
203 s += strscpy(s,
204 &rcu_dereference_sched(mod->kallsyms)->strtab[src[i].st_name],
205 KSYM_NAME_LEN) + 1;
206 }
207 }
208 preempt_enable();
209 mod->core_kallsyms.num_symtab = ndst;
210}
211
212#if IS_ENABLED(CONFIG_STACKTRACE_BUILD_ID)
213void init_build_id(struct module *mod, const struct load_info *info)
214{
215 const Elf_Shdr *sechdr;
216 unsigned int i;
217
218 for (i = 0; i < info->hdr->e_shnum; i++) {
219 sechdr = &info->sechdrs[i];
220 if (!sect_empty(sechdr) && sechdr->sh_type == SHT_NOTE &&
221 !build_id_parse_buf((void *)sechdr->sh_addr, mod->build_id,
222 sechdr->sh_size))
223 break;
224 }
225}
226#else
227void init_build_id(struct module *mod, const struct load_info *info)
228{
229}
230#endif
231
232/*
233 * This ignores the intensely annoying "mapping symbols" found
234 * in ARM ELF files: $a, $t and $d.
235 */
236static inline int is_arm_mapping_symbol(const char *str)
237{
238 if (str[0] == '.' && str[1] == 'L')
239 return true;
240 return str[0] == '$' && strchr("axtd", str[1]) &&
241 (str[2] == '\0' || str[2] == '.');
242}
243
244static const char *kallsyms_symbol_name(struct mod_kallsyms *kallsyms, unsigned int symnum)
245{
246 return kallsyms->strtab + kallsyms->symtab[symnum].st_name;
247}
248
249/*
250 * Given a module and address, find the corresponding symbol and return its name
251 * while providing its size and offset if needed.
252 */
253static const char *find_kallsyms_symbol(struct module *mod,
254 unsigned long addr,
255 unsigned long *size,
256 unsigned long *offset)
257{
258 unsigned int i, best = 0;
259 unsigned long nextval, bestval;
260 struct mod_kallsyms *kallsyms = rcu_dereference_sched(mod->kallsyms);
261
262 /* At worse, next value is at end of module */
263 if (within_module_init(addr, mod))
264 nextval = (unsigned long)mod->init_layout.base + mod->init_layout.text_size;
265 else
266 nextval = (unsigned long)mod->core_layout.base + mod->core_layout.text_size;
267
268 bestval = kallsyms_symbol_value(&kallsyms->symtab[best]);
269
270 /*
271 * Scan for closest preceding symbol, and next symbol. (ELF
272 * starts real symbols at 1).
273 */
274 for (i = 1; i < kallsyms->num_symtab; i++) {
275 const Elf_Sym *sym = &kallsyms->symtab[i];
276 unsigned long thisval = kallsyms_symbol_value(sym);
277
278 if (sym->st_shndx == SHN_UNDEF)
279 continue;
280
281 /*
282 * We ignore unnamed symbols: they're uninformative
283 * and inserted at a whim.
284 */
285 if (*kallsyms_symbol_name(kallsyms, i) == '\0' ||
286 is_arm_mapping_symbol(kallsyms_symbol_name(kallsyms, i)))
287 continue;
288
289 if (thisval <= addr && thisval > bestval) {
290 best = i;
291 bestval = thisval;
292 }
293 if (thisval > addr && thisval < nextval)
294 nextval = thisval;
295 }
296
297 if (!best)
298 return NULL;
299
300 if (size)
301 *size = nextval - bestval;
302 if (offset)
303 *offset = addr - bestval;
304
305 return kallsyms_symbol_name(kallsyms, best);
306}
307
308void * __weak dereference_module_function_descriptor(struct module *mod,
309 void *ptr)
310{
311 return ptr;
312}
313
314/*
315 * For kallsyms to ask for address resolution. NULL means not found. Careful
316 * not to lock to avoid deadlock on oopses, simply disable preemption.
317 */
318const char *module_address_lookup(unsigned long addr,
319 unsigned long *size,
320 unsigned long *offset,
321 char **modname,
322 const unsigned char **modbuildid,
323 char *namebuf)
324{
325 const char *ret = NULL;
326 struct module *mod;
327
328 preempt_disable();
329 mod = __module_address(addr);
330 if (mod) {
331 if (modname)
332 *modname = mod->name;
333 if (modbuildid) {
334#if IS_ENABLED(CONFIG_STACKTRACE_BUILD_ID)
335 *modbuildid = mod->build_id;
336#else
337 *modbuildid = NULL;
338#endif
339 }
340
341 ret = find_kallsyms_symbol(mod, addr, size, offset);
342 }
343 /* Make a copy in here where it's safe */
344 if (ret) {
345 strncpy(namebuf, ret, KSYM_NAME_LEN - 1);
346 ret = namebuf;
347 }
348 preempt_enable();
349
350 return ret;
351}
352
353int lookup_module_symbol_name(unsigned long addr, char *symname)
354{
355 struct module *mod;
356
357 preempt_disable();
358 list_for_each_entry_rcu(mod, &modules, list) {
359 if (mod->state == MODULE_STATE_UNFORMED)
360 continue;
361 if (within_module(addr, mod)) {
362 const char *sym;
363
364 sym = find_kallsyms_symbol(mod, addr, NULL, NULL);
365 if (!sym)
366 goto out;
367
368 strscpy(symname, sym, KSYM_NAME_LEN);
369 preempt_enable();
370 return 0;
371 }
372 }
373out:
374 preempt_enable();
375 return -ERANGE;
376}
377
378int lookup_module_symbol_attrs(unsigned long addr, unsigned long *size,
379 unsigned long *offset, char *modname, char *name)
380{
381 struct module *mod;
382
383 preempt_disable();
384 list_for_each_entry_rcu(mod, &modules, list) {
385 if (mod->state == MODULE_STATE_UNFORMED)
386 continue;
387 if (within_module(addr, mod)) {
388 const char *sym;
389
390 sym = find_kallsyms_symbol(mod, addr, size, offset);
391 if (!sym)
392 goto out;
393 if (modname)
394 strscpy(modname, mod->name, MODULE_NAME_LEN);
395 if (name)
396 strscpy(name, sym, KSYM_NAME_LEN);
397 preempt_enable();
398 return 0;
399 }
400 }
401out:
402 preempt_enable();
403 return -ERANGE;
404}
405
406int module_get_kallsym(unsigned int symnum, unsigned long *value, char *type,
407 char *name, char *module_name, int *exported)
408{
409 struct module *mod;
410
411 preempt_disable();
412 list_for_each_entry_rcu(mod, &modules, list) {
413 struct mod_kallsyms *kallsyms;
414
415 if (mod->state == MODULE_STATE_UNFORMED)
416 continue;
417 kallsyms = rcu_dereference_sched(mod->kallsyms);
418 if (symnum < kallsyms->num_symtab) {
419 const Elf_Sym *sym = &kallsyms->symtab[symnum];
420
421 *value = kallsyms_symbol_value(sym);
422 *type = kallsyms->typetab[symnum];
423 strscpy(name, kallsyms_symbol_name(kallsyms, symnum), KSYM_NAME_LEN);
424 strscpy(module_name, mod->name, MODULE_NAME_LEN);
425 *exported = is_exported(name, *value, mod);
426 preempt_enable();
427 return 0;
428 }
429 symnum -= kallsyms->num_symtab;
430 }
431 preempt_enable();
432 return -ERANGE;
433}
434
435/* Given a module and name of symbol, find and return the symbol's value */
436unsigned long find_kallsyms_symbol_value(struct module *mod, const char *name)
437{
438 unsigned int i;
439 struct mod_kallsyms *kallsyms = rcu_dereference_sched(mod->kallsyms);
440
441 for (i = 0; i < kallsyms->num_symtab; i++) {
442 const Elf_Sym *sym = &kallsyms->symtab[i];
443
444 if (strcmp(name, kallsyms_symbol_name(kallsyms, i)) == 0 &&
445 sym->st_shndx != SHN_UNDEF)
446 return kallsyms_symbol_value(sym);
447 }
448 return 0;
449}
450
451/* Look for this name: can be of form module:name. */
452unsigned long module_kallsyms_lookup_name(const char *name)
453{
454 struct module *mod;
455 char *colon;
456 unsigned long ret = 0;
457
458 /* Don't lock: we're in enough trouble already. */
459 preempt_disable();
460 if ((colon = strnchr(name, MODULE_NAME_LEN, ':')) != NULL) {
461 if ((mod = find_module_all(name, colon - name, false)) != NULL)
462 ret = find_kallsyms_symbol_value(mod, colon + 1);
463 } else {
464 list_for_each_entry_rcu(mod, &modules, list) {
465 if (mod->state == MODULE_STATE_UNFORMED)
466 continue;
467 if ((ret = find_kallsyms_symbol_value(mod, name)) != 0)
468 break;
469 }
470 }
471 preempt_enable();
472 return ret;
473}
474
475#ifdef CONFIG_LIVEPATCH
476int module_kallsyms_on_each_symbol(int (*fn)(void *, const char *,
477 struct module *, unsigned long),
478 void *data)
479{
480 struct module *mod;
481 unsigned int i;
482 int ret = 0;
483
484 mutex_lock(&module_mutex);
485 list_for_each_entry(mod, &modules, list) {
486 struct mod_kallsyms *kallsyms;
487
488 if (mod->state == MODULE_STATE_UNFORMED)
489 continue;
490
491 /* Use rcu_dereference_sched() to remain compliant with the sparse tool */
492 preempt_disable();
493 kallsyms = rcu_dereference_sched(mod->kallsyms);
494 preempt_enable();
495
496 for (i = 0; i < kallsyms->num_symtab; i++) {
497 const Elf_Sym *sym = &kallsyms->symtab[i];
498
499 if (sym->st_shndx == SHN_UNDEF)
500 continue;
501
502 ret = fn(data, kallsyms_symbol_name(kallsyms, i),
503 mod, kallsyms_symbol_value(sym));
504 if (ret != 0)
505 goto out;
506 }
507 }
508out:
509 mutex_unlock(&module_mutex);
510 return ret;
511}
512#endif /* CONFIG_LIVEPATCH */
kernel/module/kdb.c+62−0
@@ -0,0 +1,62 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Module kdb support
4 *
5 * Copyright (C) 2010 Jason Wessel
6 */
7
8#include <linux/module.h>
9#include <linux/kdb.h>
10#include "internal.h"
11
12/*
13 * kdb_lsmod - This function implements the 'lsmod' command. Lists
14 * currently loaded kernel modules.
15 * Mostly taken from userland lsmod.
16 */
17int kdb_lsmod(int argc, const char **argv)
18{
19 struct module *mod;
20
21 if (argc != 0)
22 return KDB_ARGCOUNT;
23
24 kdb_printf("Module Size modstruct Used by\n");
25 list_for_each_entry(mod, &modules, list) {
26 if (mod->state == MODULE_STATE_UNFORMED)
27 continue;
28
29 kdb_printf("%-20s%8u", mod->name, mod->core_layout.size);
30#ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
31 kdb_printf("/%8u", mod->data_layout.size);
32#endif
33 kdb_printf(" 0x%px ", (void *)mod);
34#ifdef CONFIG_MODULE_UNLOAD
35 kdb_printf("%4d ", module_refcount(mod));
36#endif
37 if (mod->state == MODULE_STATE_GOING)
38 kdb_printf(" (Unloading)");
39 else if (mod->state == MODULE_STATE_COMING)
40 kdb_printf(" (Loading)");
41 else
42 kdb_printf(" (Live)");
43 kdb_printf(" 0x%px", mod->core_layout.base);
44#ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
45 kdb_printf("/0x%px", mod->data_layout.base);
46#endif
47
48#ifdef CONFIG_MODULE_UNLOAD
49 {
50 struct module_use *use;
51
52 kdb_printf(" [ ");
53 list_for_each_entry(use, &mod->source_list,
54 source_list)
55 kdb_printf("%s ", use->target->name);
56 kdb_printf("]\n");
57 }
58#endif
59 }
60
61 return 0;
62}
kernel/module/livepatch.c+74−0
@@ -0,0 +1,74 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Module livepatch support
4 *
5 * Copyright (C) 2016 Jessica Yu <jeyu@redhat.com>
6 */
7
8#include <linux/module.h>
9#include <linux/string.h>
10#include <linux/slab.h>
11#include "internal.h"
12
13/*
14 * Persist Elf information about a module. Copy the Elf header,
15 * section header table, section string table, and symtab section
16 * index from info to mod->klp_info.
17 */
18int copy_module_elf(struct module *mod, struct load_info *info)
19{
20 unsigned int size, symndx;
21 int ret;
22
23 size = sizeof(*mod->klp_info);
24 mod->klp_info = kmalloc(size, GFP_KERNEL);
25 if (!mod->klp_info)
26 return -ENOMEM;
27
28 /* Elf header */
29 size = sizeof(mod->klp_info->hdr);
30 memcpy(&mod->klp_info->hdr, info->hdr, size);
31
32 /* Elf section header table */
33 size = sizeof(*info->sechdrs) * info->hdr->e_shnum;
34 mod->klp_info->sechdrs = kmemdup(info->sechdrs, size, GFP_KERNEL);
35 if (!mod->klp_info->sechdrs) {
36 ret = -ENOMEM;
37 goto free_info;
38 }
39
40 /* Elf section name string table */
41 size = info->sechdrs[info->hdr->e_shstrndx].sh_size;
42 mod->klp_info->secstrings = kmemdup(info->secstrings, size, GFP_KERNEL);
43 if (!mod->klp_info->secstrings) {
44 ret = -ENOMEM;
45 goto free_sechdrs;
46 }
47
48 /* Elf symbol section index */
49 symndx = info->index.sym;
50 mod->klp_info->symndx = symndx;
51
52 /*
53 * For livepatch modules, core_kallsyms.symtab is a complete
54 * copy of the original symbol table. Adjust sh_addr to point
55 * to core_kallsyms.symtab since the copy of the symtab in module
56 * init memory is freed at the end of do_init_module().
57 */
58 mod->klp_info->sechdrs[symndx].sh_addr = (unsigned long)mod->core_kallsyms.symtab;
59
60 return 0;
61
62free_sechdrs:
63 kfree(mod->klp_info->sechdrs);
64free_info:
65 kfree(mod->klp_info);
66 return ret;
67}
68
69void free_module_elf(struct module *mod)
70{
71 kfree(mod->klp_info->sechdrs);
72 kfree(mod->klp_info->secstrings);
73 kfree(mod->klp_info);
74}
kernel/module/main.c+3131−0
@@ -0,0 +1,3131 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright (C) 2002 Richard Henderson
4 * Copyright (C) 2001 Rusty Russell, 2002, 2010 Rusty Russell IBM.
5 */
6
7#define INCLUDE_VERMAGIC
8
9#include <linux/export.h>
10#include <linux/extable.h>
11#include <linux/moduleloader.h>
12#include <linux/module_signature.h>
13#include <linux/trace_events.h>
14#include <linux/init.h>
15#include <linux/kallsyms.h>
16#include <linux/buildid.h>
17#include <linux/fs.h>
18#include <linux/kernel.h>
19#include <linux/kernel_read_file.h>
20#include <linux/slab.h>
21#include <linux/vmalloc.h>
22#include <linux/elf.h>
23#include <linux/seq_file.h>
24#include <linux/syscalls.h>
25#include <linux/fcntl.h>
26#include <linux/rcupdate.h>
27#include <linux/capability.h>
28#include <linux/cpu.h>
29#include <linux/moduleparam.h>
30#include <linux/errno.h>
31#include <linux/err.h>
32#include <linux/vermagic.h>
33#include <linux/notifier.h>
34#include <linux/sched.h>
35#include <linux/device.h>
36#include <linux/string.h>
37#include <linux/mutex.h>
38#include <linux/rculist.h>
39#include <linux/uaccess.h>
40#include <asm/cacheflush.h>
41#include <linux/set_memory.h>
42#include <asm/mmu_context.h>
43#include <linux/license.h>
44#include <asm/sections.h>
45#include <linux/tracepoint.h>
46#include <linux/ftrace.h>
47#include <linux/livepatch.h>
48#include <linux/async.h>
49#include <linux/percpu.h>
50#include <linux/kmemleak.h>
51#include <linux/jump_label.h>
52#include <linux/pfn.h>
53#include <linux/bsearch.h>
54#include <linux/dynamic_debug.h>
55#include <linux/audit.h>
56#include <uapi/linux/module.h>
57#include "internal.h"
58
59#define CREATE_TRACE_POINTS
60#include <trace/events/module.h>
61
62/*
63 * Mutex protects:
64 * 1) List of modules (also safely readable with preempt_disable),
65 * 2) module_use links,
66 * 3) mod_tree.addr_min/mod_tree.addr_max.
67 * (delete and add uses RCU list operations).
68 */
69DEFINE_MUTEX(module_mutex);
70LIST_HEAD(modules);
71
72/* Work queue for freeing init sections in success case */
73static void do_free_init(struct work_struct *w);
74static DECLARE_WORK(init_free_wq, do_free_init);
75static LLIST_HEAD(init_free_list);
76
77struct mod_tree_root mod_tree __cacheline_aligned = {
78 .addr_min = -1UL,
79};
80
81#ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
82struct mod_tree_root mod_data_tree __cacheline_aligned = {
83 .addr_min = -1UL,
84};
85#endif
86
87#define module_addr_min mod_tree.addr_min
88#define module_addr_max mod_tree.addr_max
89
90struct symsearch {
91 const struct kernel_symbol *start, *stop;
92 const s32 *crcs;
93 enum mod_license license;
94};
95
96/*
97 * Bounds of module text, for speeding up __module_address.
98 * Protected by module_mutex.
99 */
100static void __mod_update_bounds(void *base, unsigned int size, struct mod_tree_root *tree)
101{
102 unsigned long min = (unsigned long)base;
103 unsigned long max = min + size;
104
105 if (min < tree->addr_min)
106 tree->addr_min = min;
107 if (max > tree->addr_max)
108 tree->addr_max = max;
109}
110
111static void mod_update_bounds(struct module *mod)
112{
113 __mod_update_bounds(mod->core_layout.base, mod->core_layout.size, &mod_tree);
114 if (mod->init_layout.size)
115 __mod_update_bounds(mod->init_layout.base, mod->init_layout.size, &mod_tree);
116#ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
117 __mod_update_bounds(mod->data_layout.base, mod->data_layout.size, &mod_data_tree);
118#endif
119}
120
121/* Block module loading/unloading? */
122int modules_disabled = 0;
123core_param(nomodule, modules_disabled, bint, 0);
124
125/* Waiting for a module to finish initializing? */
126static DECLARE_WAIT_QUEUE_HEAD(module_wq);
127
128static BLOCKING_NOTIFIER_HEAD(module_notify_list);
129
130int register_module_notifier(struct notifier_block *nb)
131{
132 return blocking_notifier_chain_register(&module_notify_list, nb);
133}
134EXPORT_SYMBOL(register_module_notifier);
135
136int unregister_module_notifier(struct notifier_block *nb)
137{
138 return blocking_notifier_chain_unregister(&module_notify_list, nb);
139}
140EXPORT_SYMBOL(unregister_module_notifier);
141
142/*
143 * We require a truly strong try_module_get(): 0 means success.
144 * Otherwise an error is returned due to ongoing or failed
145 * initialization etc.
146 */
147static inline int strong_try_module_get(struct module *mod)
148{
149 BUG_ON(mod && mod->state == MODULE_STATE_UNFORMED);
150 if (mod && mod->state == MODULE_STATE_COMING)
151 return -EBUSY;
152 if (try_module_get(mod))
153 return 0;
154 else
155 return -ENOENT;
156}
157
158static inline void add_taint_module(struct module *mod, unsigned flag,
159 enum lockdep_ok lockdep_ok)
160{
161 add_taint(flag, lockdep_ok);
162 set_bit(flag, &mod->taints);
163}
164
165/*
166 * A thread that wants to hold a reference to a module only while it
167 * is running can call this to safely exit.
168 */
169void __noreturn __module_put_and_kthread_exit(struct module *mod, long code)
170{
171 module_put(mod);
172 kthread_exit(code);
173}
174EXPORT_SYMBOL(__module_put_and_kthread_exit);
175
176/* Find a module section: 0 means not found. */
177static unsigned int find_sec(const struct load_info *info, const char *name)
178{
179 unsigned int i;
180
181 for (i = 1; i < info->hdr->e_shnum; i++) {
182 Elf_Shdr *shdr = &info->sechdrs[i];
183 /* Alloc bit cleared means "ignore it." */
184 if ((shdr->sh_flags & SHF_ALLOC)
185 && strcmp(info->secstrings + shdr->sh_name, name) == 0)
186 return i;
187 }
188 return 0;
189}
190
191/* Find a module section, or NULL. */
192static void *section_addr(const struct load_info *info, const char *name)
193{
194 /* Section 0 has sh_addr 0. */
195 return (void *)info->sechdrs[find_sec(info, name)].sh_addr;
196}
197
198/* Find a module section, or NULL. Fill in number of "objects" in section. */
199static void *section_objs(const struct load_info *info,
200 const char *name,
201 size_t object_size,
202 unsigned int *num)
203{
204 unsigned int sec = find_sec(info, name);
205
206 /* Section 0 has sh_addr 0 and sh_size 0. */
207 *num = info->sechdrs[sec].sh_size / object_size;
208 return (void *)info->sechdrs[sec].sh_addr;
209}
210
211/* Find a module section: 0 means not found. Ignores SHF_ALLOC flag. */
212static unsigned int find_any_sec(const struct load_info *info, const char *name)
213{
214 unsigned int i;
215
216 for (i = 1; i < info->hdr->e_shnum; i++) {
217 Elf_Shdr *shdr = &info->sechdrs[i];
218 if (strcmp(info->secstrings + shdr->sh_name, name) == 0)
219 return i;
220 }
221 return 0;
222}
223
224/*
225 * Find a module section, or NULL. Fill in number of "objects" in section.
226 * Ignores SHF_ALLOC flag.
227 */
228static __maybe_unused void *any_section_objs(const struct load_info *info,
229 const char *name,
230 size_t object_size,
231 unsigned int *num)
232{
233 unsigned int sec = find_any_sec(info, name);
234
235 /* Section 0 has sh_addr 0 and sh_size 0. */
236 *num = info->sechdrs[sec].sh_size / object_size;
237 return (void *)info->sechdrs[sec].sh_addr;
238}
239
240#ifndef CONFIG_MODVERSIONS
241#define symversion(base, idx) NULL
242#else
243#define symversion(base, idx) ((base != NULL) ? ((base) + (idx)) : NULL)
244#endif
245
246static const char *kernel_symbol_name(const struct kernel_symbol *sym)
247{
248#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
249 return offset_to_ptr(&sym->name_offset);
250#else
251 return sym->name;
252#endif
253}
254
255static const char *kernel_symbol_namespace(const struct kernel_symbol *sym)
256{
257#ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS
258 if (!sym->namespace_offset)
259 return NULL;
260 return offset_to_ptr(&sym->namespace_offset);
261#else
262 return sym->namespace;
263#endif
264}
265
266int cmp_name(const void *name, const void *sym)
267{
268 return strcmp(name, kernel_symbol_name(sym));
269}
270
271static bool find_exported_symbol_in_section(const struct symsearch *syms,
272 struct module *owner,
273 struct find_symbol_arg *fsa)
274{
275 struct kernel_symbol *sym;
276
277 if (!fsa->gplok && syms->license == GPL_ONLY)
278 return false;
279
280 sym = bsearch(fsa->name, syms->start, syms->stop - syms->start,
281 sizeof(struct kernel_symbol), cmp_name);
282 if (!sym)
283 return false;
284
285 fsa->owner = owner;
286 fsa->crc = symversion(syms->crcs, sym - syms->start);
287 fsa->sym = sym;
288 fsa->license = syms->license;
289
290 return true;
291}
292
293/*
294 * Find an exported symbol and return it, along with, (optional) crc and
295 * (optional) module which owns it. Needs preempt disabled or module_mutex.
296 */
297bool find_symbol(struct find_symbol_arg *fsa)
298{
299 static const struct symsearch arr[] = {
300 { __start___ksymtab, __stop___ksymtab, __start___kcrctab,
301 NOT_GPL_ONLY },
302 { __start___ksymtab_gpl, __stop___ksymtab_gpl,
303 __start___kcrctab_gpl,
304 GPL_ONLY },
305 };
306 struct module *mod;
307 unsigned int i;
308
309 module_assert_mutex_or_preempt();
310
311 for (i = 0; i < ARRAY_SIZE(arr); i++)
312 if (find_exported_symbol_in_section(&arr[i], NULL, fsa))
313 return true;
314
315 list_for_each_entry_rcu(mod, &modules, list,
316 lockdep_is_held(&module_mutex)) {
317 struct symsearch arr[] = {
318 { mod->syms, mod->syms + mod->num_syms, mod->crcs,
319 NOT_GPL_ONLY },
320 { mod->gpl_syms, mod->gpl_syms + mod->num_gpl_syms,
321 mod->gpl_crcs,
322 GPL_ONLY },
323 };
324
325 if (mod->state == MODULE_STATE_UNFORMED)
326 continue;
327
328 for (i = 0; i < ARRAY_SIZE(arr); i++)
329 if (find_exported_symbol_in_section(&arr[i], mod, fsa))
330 return true;
331 }
332
333 pr_debug("Failed to find symbol %s\n", fsa->name);
334 return false;
335}
336
337/*
338 * Search for module by name: must hold module_mutex (or preempt disabled
339 * for read-only access).
340 */
341struct module *find_module_all(const char *name, size_t len,
342 bool even_unformed)
343{
344 struct module *mod;
345
346 module_assert_mutex_or_preempt();
347
348 list_for_each_entry_rcu(mod, &modules, list,
349 lockdep_is_held(&module_mutex)) {
350 if (!even_unformed && mod->state == MODULE_STATE_UNFORMED)
351 continue;
352 if (strlen(mod->name) == len && !memcmp(mod->name, name, len))
353 return mod;
354 }
355 return NULL;
356}
357
358struct module *find_module(const char *name)
359{
360 return find_module_all(name, strlen(name), false);
361}
362
363#ifdef CONFIG_SMP
364
365static inline void __percpu *mod_percpu(struct module *mod)
366{
367 return mod->percpu;
368}
369
370static int percpu_modalloc(struct module *mod, struct load_info *info)
371{
372 Elf_Shdr *pcpusec = &info->sechdrs[info->index.pcpu];
373 unsigned long align = pcpusec->sh_addralign;
374
375 if (!pcpusec->sh_size)
376 return 0;
377
378 if (align > PAGE_SIZE) {
379 pr_warn("%s: per-cpu alignment %li > %li\n",
380 mod->name, align, PAGE_SIZE);
381 align = PAGE_SIZE;
382 }
383
384 mod->percpu = __alloc_reserved_percpu(pcpusec->sh_size, align);
385 if (!mod->percpu) {
386 pr_warn("%s: Could not allocate %lu bytes percpu data\n",
387 mod->name, (unsigned long)pcpusec->sh_size);
388 return -ENOMEM;
389 }
390 mod->percpu_size = pcpusec->sh_size;
391 return 0;
392}
393
394static void percpu_modfree(struct module *mod)
395{
396 free_percpu(mod->percpu);
397}
398
399static unsigned int find_pcpusec(struct load_info *info)
400{
401 return find_sec(info, ".data..percpu");
402}
403
404static void percpu_modcopy(struct module *mod,
405 const void *from, unsigned long size)
406{
407 int cpu;
408
409 for_each_possible_cpu(cpu)
410 memcpy(per_cpu_ptr(mod->percpu, cpu), from, size);
411}
412
413bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr)
414{
415 struct module *mod;
416 unsigned int cpu;
417
418 preempt_disable();
419
420 list_for_each_entry_rcu(mod, &modules, list) {
421 if (mod->state == MODULE_STATE_UNFORMED)
422 continue;
423 if (!mod->percpu_size)
424 continue;
425 for_each_possible_cpu(cpu) {
426 void *start = per_cpu_ptr(mod->percpu, cpu);
427 void *va = (void *)addr;
428
429 if (va >= start && va < start + mod->percpu_size) {
430 if (can_addr) {
431 *can_addr = (unsigned long) (va - start);
432 *can_addr += (unsigned long)
433 per_cpu_ptr(mod->percpu,
434 get_boot_cpu_id());
435 }
436 preempt_enable();
437 return true;
438 }
439 }
440 }
441
442 preempt_enable();
443 return false;
444}
445
446/**
447 * is_module_percpu_address() - test whether address is from module static percpu
448 * @addr: address to test
449 *
450 * Test whether @addr belongs to module static percpu area.
451 *
452 * Return: %true if @addr is from module static percpu area
453 */
454bool is_module_percpu_address(unsigned long addr)
455{
456 return __is_module_percpu_address(addr, NULL);
457}
458
459#else /* ... !CONFIG_SMP */
460
461static inline void __percpu *mod_percpu(struct module *mod)
462{
463 return NULL;
464}
465static int percpu_modalloc(struct module *mod, struct load_info *info)
466{
467 /* UP modules shouldn't have this section: ENOMEM isn't quite right */
468 if (info->sechdrs[info->index.pcpu].sh_size != 0)
469 return -ENOMEM;
470 return 0;
471}
472static inline void percpu_modfree(struct module *mod)
473{
474}
475static unsigned int find_pcpusec(struct load_info *info)
476{
477 return 0;
478}
479static inline void percpu_modcopy(struct module *mod,
480 const void *from, unsigned long size)
481{
482 /* pcpusec should be 0, and size of that section should be 0. */
483 BUG_ON(size != 0);
484}
485bool is_module_percpu_address(unsigned long addr)
486{
487 return false;
488}
489
490bool __is_module_percpu_address(unsigned long addr, unsigned long *can_addr)
491{
492 return false;
493}
494
495#endif /* CONFIG_SMP */
496
497#define MODINFO_ATTR(field) \
498static void setup_modinfo_##field(struct module *mod, const char *s) \
499{ \
500 mod->field = kstrdup(s, GFP_KERNEL); \
501} \
502static ssize_t show_modinfo_##field(struct module_attribute *mattr, \
503 struct module_kobject *mk, char *buffer) \
504{ \
505 return scnprintf(buffer, PAGE_SIZE, "%s\n", mk->mod->field); \
506} \
507static int modinfo_##field##_exists(struct module *mod) \
508{ \
509 return mod->field != NULL; \
510} \
511static void free_modinfo_##field(struct module *mod) \
512{ \
513 kfree(mod->field); \
514 mod->field = NULL; \
515} \
516static struct module_attribute modinfo_##field = { \
517 .attr = { .name = __stringify(field), .mode = 0444 }, \
518 .show = show_modinfo_##field, \
519 .setup = setup_modinfo_##field, \
520 .test = modinfo_##field##_exists, \
521 .free = free_modinfo_##field, \
522};
523
524MODINFO_ATTR(version);
525MODINFO_ATTR(srcversion);
526
527static char last_unloaded_module[MODULE_NAME_LEN+1];
528
529#ifdef CONFIG_MODULE_UNLOAD
530
531EXPORT_TRACEPOINT_SYMBOL(module_get);
532
533/* MODULE_REF_BASE is the base reference count by kmodule loader. */
534#define MODULE_REF_BASE 1
535
536/* Init the unload section of the module. */
537static int module_unload_init(struct module *mod)
538{
539 /*
540 * Initialize reference counter to MODULE_REF_BASE.
541 * refcnt == 0 means module is going.
542 */
543 atomic_set(&mod->refcnt, MODULE_REF_BASE);
544
545 INIT_LIST_HEAD(&mod->source_list);
546 INIT_LIST_HEAD(&mod->target_list);
547
548 /* Hold reference count during initialization. */
549 atomic_inc(&mod->refcnt);
550
551 return 0;
552}
553
554/* Does a already use b? */
555static int already_uses(struct module *a, struct module *b)
556{
557 struct module_use *use;
558
559 list_for_each_entry(use, &b->source_list, source_list) {
560 if (use->source == a) {
561 pr_debug("%s uses %s!\n", a->name, b->name);
562 return 1;
563 }
564 }
565 pr_debug("%s does not use %s!\n", a->name, b->name);
566 return 0;
567}
568
569/*
570 * Module a uses b
571 * - we add 'a' as a "source", 'b' as a "target" of module use
572 * - the module_use is added to the list of 'b' sources (so
573 * 'b' can walk the list to see who sourced them), and of 'a'
574 * targets (so 'a' can see what modules it targets).
575 */
576static int add_module_usage(struct module *a, struct module *b)
577{
578 struct module_use *use;
579
580 pr_debug("Allocating new usage for %s.\n", a->name);
581 use = kmalloc(sizeof(*use), GFP_ATOMIC);
582 if (!use)
583 return -ENOMEM;
584
585 use->source = a;
586 use->target = b;
587 list_add(&use->source_list, &b->source_list);
588 list_add(&use->target_list, &a->target_list);
589 return 0;
590}
591
592/* Module a uses b: caller needs module_mutex() */
593static int ref_module(struct module *a, struct module *b)
594{
595 int err;
596
597 if (b == NULL || already_uses(a, b))
598 return 0;
599
600 /* If module isn't available, we fail. */
601 err = strong_try_module_get(b);
602 if (err)
603 return err;
604
605 err = add_module_usage(a, b);
606 if (err) {
607 module_put(b);
608 return err;
609 }
610 return 0;
611}
612
613/* Clear the unload stuff of the module. */
614static void module_unload_free(struct module *mod)
615{
616 struct module_use *use, *tmp;
617
618 mutex_lock(&module_mutex);
619 list_for_each_entry_safe(use, tmp, &mod->target_list, target_list) {
620 struct module *i = use->target;
621 pr_debug("%s unusing %s\n", mod->name, i->name);
622 module_put(i);
623 list_del(&use->source_list);
624 list_del(&use->target_list);
625 kfree(use);
626 }
627 mutex_unlock(&module_mutex);
628}
629
630#ifdef CONFIG_MODULE_FORCE_UNLOAD
631static inline int try_force_unload(unsigned int flags)
632{
633 int ret = (flags & O_TRUNC);
634 if (ret)
635 add_taint(TAINT_FORCED_RMMOD, LOCKDEP_NOW_UNRELIABLE);
636 return ret;
637}
638#else
639static inline int try_force_unload(unsigned int flags)
640{
641 return 0;
642}
643#endif /* CONFIG_MODULE_FORCE_UNLOAD */
644
645/* Try to release refcount of module, 0 means success. */
646static int try_release_module_ref(struct module *mod)
647{
648 int ret;
649
650 /* Try to decrement refcnt which we set at loading */
651 ret = atomic_sub_return(MODULE_REF_BASE, &mod->refcnt);
652 BUG_ON(ret < 0);
653 if (ret)
654 /* Someone can put this right now, recover with checking */
655 ret = atomic_add_unless(&mod->refcnt, MODULE_REF_BASE, 0);
656
657 return ret;
658}
659
660static int try_stop_module(struct module *mod, int flags, int *forced)
661{
662 /* If it's not unused, quit unless we're forcing. */
663 if (try_release_module_ref(mod) != 0) {
664 *forced = try_force_unload(flags);
665 if (!(*forced))
666 return -EWOULDBLOCK;
667 }
668
669 /* Mark it as dying. */
670 mod->state = MODULE_STATE_GOING;
671
672 return 0;
673}
674
675/**
676 * module_refcount() - return the refcount or -1 if unloading
677 * @mod: the module we're checking
678 *
679 * Return:
680 * -1 if the module is in the process of unloading
681 * otherwise the number of references in the kernel to the module
682 */
683int module_refcount(struct module *mod)
684{
685 return atomic_read(&mod->refcnt) - MODULE_REF_BASE;
686}
687EXPORT_SYMBOL(module_refcount);
688
689/* This exists whether we can unload or not */
690static void free_module(struct module *mod);
691
692SYSCALL_DEFINE2(delete_module, const char __user *, name_user,
693 unsigned int, flags)
694{
695 struct module *mod;
696 char name[MODULE_NAME_LEN];
697 int ret, forced = 0;
698
699 if (!capable(CAP_SYS_MODULE) || modules_disabled)
700 return -EPERM;
701
702 if (strncpy_from_user(name, name_user, MODULE_NAME_LEN-1) < 0)
703 return -EFAULT;
704 name[MODULE_NAME_LEN-1] = '\0';
705
706 audit_log_kern_module(name);
707
708 if (mutex_lock_interruptible(&module_mutex) != 0)
709 return -EINTR;
710
711 mod = find_module(name);
712 if (!mod) {
713 ret = -ENOENT;
714 goto out;
715 }
716
717 if (!list_empty(&mod->source_list)) {
718 /* Other modules depend on us: get rid of them first. */
719 ret = -EWOULDBLOCK;
720 goto out;
721 }
722
723 /* Doing init or already dying? */
724 if (mod->state != MODULE_STATE_LIVE) {
725 /* FIXME: if (force), slam module count damn the torpedoes */
726 pr_debug("%s already dying\n", mod->name);
727 ret = -EBUSY;
728 goto out;
729 }
730
731 /* If it has an init func, it must have an exit func to unload */
732 if (mod->init && !mod->exit) {
733 forced = try_force_unload(flags);
734 if (!forced) {
735 /* This module can't be removed */
736 ret = -EBUSY;
737 goto out;
738 }
739 }
740
741 ret = try_stop_module(mod, flags, &forced);
742 if (ret != 0)
743 goto out;
744
745 mutex_unlock(&module_mutex);
746 /* Final destruction now no one is using it. */
747 if (mod->exit != NULL)
748 mod->exit();
749 blocking_notifier_call_chain(&module_notify_list,
750 MODULE_STATE_GOING, mod);
751 klp_module_going(mod);
752 ftrace_release_mod(mod);
753
754 async_synchronize_full();
755
756 /* Store the name of the last unloaded module for diagnostic purposes */
757 strlcpy(last_unloaded_module, mod->name, sizeof(last_unloaded_module));
758
759 free_module(mod);
760 /* someone could wait for the module in add_unformed_module() */
761 wake_up_all(&module_wq);
762 return 0;
763out:
764 mutex_unlock(&module_mutex);
765 return ret;
766}
767
768void __symbol_put(const char *symbol)
769{
770 struct find_symbol_arg fsa = {
771 .name = symbol,
772 .gplok = true,
773 };
774
775 preempt_disable();
776 BUG_ON(!find_symbol(&fsa));
777 module_put(fsa.owner);
778 preempt_enable();
779}
780EXPORT_SYMBOL(__symbol_put);
781
782/* Note this assumes addr is a function, which it currently always is. */
783void symbol_put_addr(void *addr)
784{
785 struct module *modaddr;
786 unsigned long a = (unsigned long)dereference_function_descriptor(addr);
787
788 if (core_kernel_text(a))
789 return;
790
791 /*
792 * Even though we hold a reference on the module; we still need to
793 * disable preemption in order to safely traverse the data structure.
794 */
795 preempt_disable();
796 modaddr = __module_text_address(a);
797 BUG_ON(!modaddr);
798 module_put(modaddr);
799 preempt_enable();
800}
801EXPORT_SYMBOL_GPL(symbol_put_addr);
802
803static ssize_t show_refcnt(struct module_attribute *mattr,
804 struct module_kobject *mk, char *buffer)
805{
806 return sprintf(buffer, "%i\n", module_refcount(mk->mod));
807}
808
809static struct module_attribute modinfo_refcnt =
810 __ATTR(refcnt, 0444, show_refcnt, NULL);
811
812void __module_get(struct module *module)
813{
814 if (module) {
815 preempt_disable();
816 atomic_inc(&module->refcnt);
817 trace_module_get(module, _RET_IP_);
818 preempt_enable();
819 }
820}
821EXPORT_SYMBOL(__module_get);
822
823bool try_module_get(struct module *module)
824{
825 bool ret = true;
826
827 if (module) {
828 preempt_disable();
829 /* Note: here, we can fail to get a reference */
830 if (likely(module_is_live(module) &&
831 atomic_inc_not_zero(&module->refcnt) != 0))
832 trace_module_get(module, _RET_IP_);
833 else
834 ret = false;
835
836 preempt_enable();
837 }
838 return ret;
839}
840EXPORT_SYMBOL(try_module_get);
841
842void module_put(struct module *module)
843{
844 int ret;
845
846 if (module) {
847 preempt_disable();
848 ret = atomic_dec_if_positive(&module->refcnt);
849 WARN_ON(ret < 0); /* Failed to put refcount */
850 trace_module_put(module, _RET_IP_);
851 preempt_enable();
852 }
853}
854EXPORT_SYMBOL(module_put);
855
856#else /* !CONFIG_MODULE_UNLOAD */
857static inline void module_unload_free(struct module *mod)
858{
859}
860
861static int ref_module(struct module *a, struct module *b)
862{
863 return strong_try_module_get(b);
864}
865
866static inline int module_unload_init(struct module *mod)
867{
868 return 0;
869}
870#endif /* CONFIG_MODULE_UNLOAD */
871
872size_t module_flags_taint(unsigned long taints, char *buf)
873{
874 size_t l = 0;
875 int i;
876
877 for (i = 0; i < TAINT_FLAGS_COUNT; i++) {
878 if (taint_flags[i].module && test_bit(i, &taints))
879 buf[l++] = taint_flags[i].c_true;
880 }
881
882 return l;
883}
884
885static ssize_t show_initstate(struct module_attribute *mattr,
886 struct module_kobject *mk, char *buffer)
887{
888 const char *state = "unknown";
889
890 switch (mk->mod->state) {
891 case MODULE_STATE_LIVE:
892 state = "live";
893 break;
894 case MODULE_STATE_COMING:
895 state = "coming";
896 break;
897 case MODULE_STATE_GOING:
898 state = "going";
899 break;
900 default:
901 BUG();
902 }
903 return sprintf(buffer, "%s\n", state);
904}
905
906static struct module_attribute modinfo_initstate =
907 __ATTR(initstate, 0444, show_initstate, NULL);
908
909static ssize_t store_uevent(struct module_attribute *mattr,
910 struct module_kobject *mk,
911 const char *buffer, size_t count)
912{
913 int rc;
914
915 rc = kobject_synth_uevent(&mk->kobj, buffer, count);
916 return rc ? rc : count;
917}
918
919struct module_attribute module_uevent =
920 __ATTR(uevent, 0200, NULL, store_uevent);
921
922static ssize_t show_coresize(struct module_attribute *mattr,
923 struct module_kobject *mk, char *buffer)
924{
925 return sprintf(buffer, "%u\n", mk->mod->core_layout.size);
926}
927
928static struct module_attribute modinfo_coresize =
929 __ATTR(coresize, 0444, show_coresize, NULL);
930
931#ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
932static ssize_t show_datasize(struct module_attribute *mattr,
933 struct module_kobject *mk, char *buffer)
934{
935 return sprintf(buffer, "%u\n", mk->mod->data_layout.size);
936}
937
938static struct module_attribute modinfo_datasize =
939 __ATTR(datasize, 0444, show_datasize, NULL);
940#endif
941
942static ssize_t show_initsize(struct module_attribute *mattr,
943 struct module_kobject *mk, char *buffer)
944{
945 return sprintf(buffer, "%u\n", mk->mod->init_layout.size);
946}
947
948static struct module_attribute modinfo_initsize =
949 __ATTR(initsize, 0444, show_initsize, NULL);
950
951static ssize_t show_taint(struct module_attribute *mattr,
952 struct module_kobject *mk, char *buffer)
953{
954 size_t l;
955
956 l = module_flags_taint(mk->mod->taints, buffer);
957 buffer[l++] = '\n';
958 return l;
959}
960
961static struct module_attribute modinfo_taint =
962 __ATTR(taint, 0444, show_taint, NULL);
963
964struct module_attribute *modinfo_attrs[] = {
965 &module_uevent,
966 &modinfo_version,
967 &modinfo_srcversion,
968 &modinfo_initstate,
969 &modinfo_coresize,
970#ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
971 &modinfo_datasize,
972#endif
973 &modinfo_initsize,
974 &modinfo_taint,
975#ifdef CONFIG_MODULE_UNLOAD
976 &modinfo_refcnt,
977#endif
978 NULL,
979};
980
981size_t modinfo_attrs_count = ARRAY_SIZE(modinfo_attrs);
982
983static const char vermagic[] = VERMAGIC_STRING;
984
985int try_to_force_load(struct module *mod, const char *reason)
986{
987#ifdef CONFIG_MODULE_FORCE_LOAD
988 if (!test_taint(TAINT_FORCED_MODULE))
989 pr_warn("%s: %s: kernel tainted.\n", mod->name, reason);
990 add_taint_module(mod, TAINT_FORCED_MODULE, LOCKDEP_NOW_UNRELIABLE);
991 return 0;
992#else
993 return -ENOEXEC;
994#endif
995}
996
997static char *get_modinfo(const struct load_info *info, const char *tag);
998static char *get_next_modinfo(const struct load_info *info, const char *tag,
999 char *prev);
1000
1001static int verify_namespace_is_imported(const struct load_info *info,
1002 const struct kernel_symbol *sym,
1003 struct module *mod)
1004{
1005 const char *namespace;
1006 char *imported_namespace;
1007
1008 namespace = kernel_symbol_namespace(sym);
1009 if (namespace && namespace[0]) {
1010 imported_namespace = get_modinfo(info, "import_ns");
1011 while (imported_namespace) {
1012 if (strcmp(namespace, imported_namespace) == 0)
1013 return 0;
1014 imported_namespace = get_next_modinfo(
1015 info, "import_ns", imported_namespace);
1016 }
1017#ifdef CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS
1018 pr_warn(
1019#else
1020 pr_err(
1021#endif
1022 "%s: module uses symbol (%s) from namespace %s, but does not import it.\n",
1023 mod->name, kernel_symbol_name(sym), namespace);
1024#ifndef CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS
1025 return -EINVAL;
1026#endif
1027 }
1028 return 0;
1029}
1030
1031static bool inherit_taint(struct module *mod, struct module *owner, const char *name)
1032{
1033 if (!owner || !test_bit(TAINT_PROPRIETARY_MODULE, &owner->taints))
1034 return true;
1035
1036 if (mod->using_gplonly_symbols) {
1037 pr_err("%s: module using GPL-only symbols uses symbols %s from proprietary module %s.\n",
1038 mod->name, name, owner->name);
1039 return false;
1040 }
1041
1042 if (!test_bit(TAINT_PROPRIETARY_MODULE, &mod->taints)) {
1043 pr_warn("%s: module uses symbols %s from proprietary module %s, inheriting taint.\n",
1044 mod->name, name, owner->name);
1045 set_bit(TAINT_PROPRIETARY_MODULE, &mod->taints);
1046 }
1047 return true;
1048}
1049
1050/* Resolve a symbol for this module. I.e. if we find one, record usage. */
1051static const struct kernel_symbol *resolve_symbol(struct module *mod,
1052 const struct load_info *info,
1053 const char *name,
1054 char ownername[])
1055{
1056 struct find_symbol_arg fsa = {
1057 .name = name,
1058 .gplok = !(mod->taints & (1 << TAINT_PROPRIETARY_MODULE)),
1059 .warn = true,
1060 };
1061 int err;
1062
1063 /*
1064 * The module_mutex should not be a heavily contended lock;
1065 * if we get the occasional sleep here, we'll go an extra iteration
1066 * in the wait_event_interruptible(), which is harmless.
1067 */
1068 sched_annotate_sleep();
1069 mutex_lock(&module_mutex);
1070 if (!find_symbol(&fsa))
1071 goto unlock;
1072
1073 if (fsa.license == GPL_ONLY)
1074 mod->using_gplonly_symbols = true;
1075
1076 if (!inherit_taint(mod, fsa.owner, name)) {
1077 fsa.sym = NULL;
1078 goto getname;
1079 }
1080
1081 if (!check_version(info, name, mod, fsa.crc)) {
1082 fsa.sym = ERR_PTR(-EINVAL);
1083 goto getname;
1084 }
1085
1086 err = verify_namespace_is_imported(info, fsa.sym, mod);
1087 if (err) {
1088 fsa.sym = ERR_PTR(err);
1089 goto getname;
1090 }
1091
1092 err = ref_module(mod, fsa.owner);
1093 if (err) {
1094 fsa.sym = ERR_PTR(err);
1095 goto getname;
1096 }
1097
1098getname:
1099 /* We must make copy under the lock if we failed to get ref. */
1100 strncpy(ownername, module_name(fsa.owner), MODULE_NAME_LEN);
1101unlock:
1102 mutex_unlock(&module_mutex);
1103 return fsa.sym;
1104}
1105
1106static const struct kernel_symbol *
1107resolve_symbol_wait(struct module *mod,
1108 const struct load_info *info,
1109 const char *name)
1110{
1111 const struct kernel_symbol *ksym;
1112 char owner[MODULE_NAME_LEN];
1113
1114 if (wait_event_interruptible_timeout(module_wq,
1115 !IS_ERR(ksym = resolve_symbol(mod, info, name, owner))
1116 || PTR_ERR(ksym) != -EBUSY,
1117 30 * HZ) <= 0) {
1118 pr_warn("%s: gave up waiting for init of module %s.\n",
1119 mod->name, owner);
1120 }
1121 return ksym;
1122}
1123
1124void __weak module_memfree(void *module_region)
1125{
1126 /*
1127 * This memory may be RO, and freeing RO memory in an interrupt is not
1128 * supported by vmalloc.
1129 */
1130 WARN_ON(in_interrupt());
1131 vfree(module_region);
1132}
1133
1134void __weak module_arch_cleanup(struct module *mod)
1135{
1136}
1137
1138void __weak module_arch_freeing_init(struct module *mod)
1139{
1140}
1141
1142static void cfi_cleanup(struct module *mod);
1143
1144/* Free a module, remove from lists, etc. */
1145static void free_module(struct module *mod)
1146{
1147 trace_module_free(mod);
1148
1149 mod_sysfs_teardown(mod);
1150
1151 /*
1152 * We leave it in list to prevent duplicate loads, but make sure
1153 * that noone uses it while it's being deconstructed.
1154 */
1155 mutex_lock(&module_mutex);
1156 mod->state = MODULE_STATE_UNFORMED;
1157 mutex_unlock(&module_mutex);
1158
1159 /* Remove dynamic debug info */
1160 ddebug_remove_module(mod->name);
1161
1162 /* Arch-specific cleanup. */
1163 module_arch_cleanup(mod);
1164
1165 /* Module unload stuff */
1166 module_unload_free(mod);
1167
1168 /* Free any allocated parameters. */
1169 destroy_params(mod->kp, mod->num_kp);
1170
1171 if (is_livepatch_module(mod))
1172 free_module_elf(mod);
1173
1174 /* Now we can delete it from the lists */
1175 mutex_lock(&module_mutex);
1176 /* Unlink carefully: kallsyms could be walking list. */
1177 list_del_rcu(&mod->list);
1178 mod_tree_remove(mod);
1179 /* Remove this module from bug list, this uses list_del_rcu */
1180 module_bug_cleanup(mod);
1181 /* Wait for RCU-sched synchronizing before releasing mod->list and buglist. */
1182 synchronize_rcu();
1183 if (try_add_tainted_module(mod))
1184 pr_err("%s: adding tainted module to the unloaded tainted modules list failed.\n",
1185 mod->name);
1186 mutex_unlock(&module_mutex);
1187
1188 /* Clean up CFI for the module. */
1189 cfi_cleanup(mod);
1190
1191 /* This may be empty, but that's OK */
1192 module_arch_freeing_init(mod);
1193 module_memfree(mod->init_layout.base);
1194 kfree(mod->args);
1195 percpu_modfree(mod);
1196
1197 /* Free lock-classes; relies on the preceding sync_rcu(). */
1198 lockdep_free_key_range(mod->data_layout.base, mod->data_layout.size);
1199
1200 /* Finally, free the core (containing the module structure) */
1201 module_memfree(mod->core_layout.base);
1202#ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
1203 vfree(mod->data_layout.base);
1204#endif
1205}
1206
1207void *__symbol_get(const char *symbol)
1208{
1209 struct find_symbol_arg fsa = {
1210 .name = symbol,
1211 .gplok = true,
1212 .warn = true,
1213 };
1214
1215 preempt_disable();
1216 if (!find_symbol(&fsa) || strong_try_module_get(fsa.owner)) {
1217 preempt_enable();
1218 return NULL;
1219 }
1220 preempt_enable();
1221 return (void *)kernel_symbol_value(fsa.sym);
1222}
1223EXPORT_SYMBOL_GPL(__symbol_get);
1224
1225/*
1226 * Ensure that an exported symbol [global namespace] does not already exist
1227 * in the kernel or in some other module's exported symbol table.
1228 *
1229 * You must hold the module_mutex.
1230 */
1231static int verify_exported_symbols(struct module *mod)
1232{
1233 unsigned int i;
1234 const struct kernel_symbol *s;
1235 struct {
1236 const struct kernel_symbol *sym;
1237 unsigned int num;
1238 } arr[] = {
1239 { mod->syms, mod->num_syms },
1240 { mod->gpl_syms, mod->num_gpl_syms },
1241 };
1242
1243 for (i = 0; i < ARRAY_SIZE(arr); i++) {
1244 for (s = arr[i].sym; s < arr[i].sym + arr[i].num; s++) {
1245 struct find_symbol_arg fsa = {
1246 .name = kernel_symbol_name(s),
1247 .gplok = true,
1248 };
1249 if (find_symbol(&fsa)) {
1250 pr_err("%s: exports duplicate symbol %s"
1251 " (owned by %s)\n",
1252 mod->name, kernel_symbol_name(s),
1253 module_name(fsa.owner));
1254 return -ENOEXEC;
1255 }
1256 }
1257 }
1258 return 0;
1259}
1260
1261static bool ignore_undef_symbol(Elf_Half emachine, const char *name)
1262{
1263 /*
1264 * On x86, PIC code and Clang non-PIC code may have call foo@PLT. GNU as
1265 * before 2.37 produces an unreferenced _GLOBAL_OFFSET_TABLE_ on x86-64.
1266 * i386 has a similar problem but may not deserve a fix.
1267 *
1268 * If we ever have to ignore many symbols, consider refactoring the code to
1269 * only warn if referenced by a relocation.
1270 */
1271 if (emachine == EM_386 || emachine == EM_X86_64)
1272 return !strcmp(name, "_GLOBAL_OFFSET_TABLE_");
1273 return false;
1274}
1275
1276/* Change all symbols so that st_value encodes the pointer directly. */
1277static int simplify_symbols(struct module *mod, const struct load_info *info)
1278{
1279 Elf_Shdr *symsec = &info->sechdrs[info->index.sym];
1280 Elf_Sym *sym = (void *)symsec->sh_addr;
1281 unsigned long secbase;
1282 unsigned int i;
1283 int ret = 0;
1284 const struct kernel_symbol *ksym;
1285
1286 for (i = 1; i < symsec->sh_size / sizeof(Elf_Sym); i++) {
1287 const char *name = info->strtab + sym[i].st_name;
1288
1289 switch (sym[i].st_shndx) {
1290 case SHN_COMMON:
1291 /* Ignore common symbols */
1292 if (!strncmp(name, "__gnu_lto", 9))
1293 break;
1294
1295 /*
1296 * We compiled with -fno-common. These are not
1297 * supposed to happen.
1298 */
1299 pr_debug("Common symbol: %s\n", name);
1300 pr_warn("%s: please compile with -fno-common\n",
1301 mod->name);
1302 ret = -ENOEXEC;
1303 break;
1304
1305 case SHN_ABS:
1306 /* Don't need to do anything */
1307 pr_debug("Absolute symbol: 0x%08lx\n",
1308 (long)sym[i].st_value);
1309 break;
1310
1311 case SHN_LIVEPATCH:
1312 /* Livepatch symbols are resolved by livepatch */
1313 break;
1314
1315 case SHN_UNDEF:
1316 ksym = resolve_symbol_wait(mod, info, name);
1317 /* Ok if resolved. */
1318 if (ksym && !IS_ERR(ksym)) {
1319 sym[i].st_value = kernel_symbol_value(ksym);
1320 break;
1321 }
1322
1323 /* Ok if weak or ignored. */
1324 if (!ksym &&
1325 (ELF_ST_BIND(sym[i].st_info) == STB_WEAK ||
1326 ignore_undef_symbol(info->hdr->e_machine, name)))
1327 break;
1328
1329 ret = PTR_ERR(ksym) ?: -ENOENT;
1330 pr_warn("%s: Unknown symbol %s (err %d)\n",
1331 mod->name, name, ret);
1332 break;
1333
1334 default:
1335 /* Divert to percpu allocation if a percpu var. */
1336 if (sym[i].st_shndx == info->index.pcpu)
1337 secbase = (unsigned long)mod_percpu(mod);
1338 else
1339 secbase = info->sechdrs[sym[i].st_shndx].sh_addr;
1340 sym[i].st_value += secbase;
1341 break;
1342 }
1343 }
1344
1345 return ret;
1346}
1347
1348static int apply_relocations(struct module *mod, const struct load_info *info)
1349{
1350 unsigned int i;
1351 int err = 0;
1352
1353 /* Now do relocations. */
1354 for (i = 1; i < info->hdr->e_shnum; i++) {
1355 unsigned int infosec = info->sechdrs[i].sh_info;
1356
1357 /* Not a valid relocation section? */
1358 if (infosec >= info->hdr->e_shnum)
1359 continue;
1360
1361 /* Don't bother with non-allocated sections */
1362 if (!(info->sechdrs[infosec].sh_flags & SHF_ALLOC))
1363 continue;
1364
1365 if (info->sechdrs[i].sh_flags & SHF_RELA_LIVEPATCH)
1366 err = klp_apply_section_relocs(mod, info->sechdrs,
1367 info->secstrings,
1368 info->strtab,
1369 info->index.sym, i,
1370 NULL);
1371 else if (info->sechdrs[i].sh_type == SHT_REL)
1372 err = apply_relocate(info->sechdrs, info->strtab,
1373 info->index.sym, i, mod);
1374 else if (info->sechdrs[i].sh_type == SHT_RELA)
1375 err = apply_relocate_add(info->sechdrs, info->strtab,
1376 info->index.sym, i, mod);
1377 if (err < 0)
1378 break;
1379 }
1380 return err;
1381}
1382
1383/* Additional bytes needed by arch in front of individual sections */
1384unsigned int __weak arch_mod_section_prepend(struct module *mod,
1385 unsigned int section)
1386{
1387 /* default implementation just returns zero */
1388 return 0;
1389}
1390
1391/* Update size with this section: return offset. */
1392long module_get_offset(struct module *mod, unsigned int *size,
1393 Elf_Shdr *sechdr, unsigned int section)
1394{
1395 long ret;
1396
1397 *size += arch_mod_section_prepend(mod, section);
1398 ret = ALIGN(*size, sechdr->sh_addralign ?: 1);
1399 *size = ret + sechdr->sh_size;
1400 return ret;
1401}
1402
1403static bool module_init_layout_section(const char *sname)
1404{
1405#ifndef CONFIG_MODULE_UNLOAD
1406 if (module_exit_section(sname))
1407 return true;
1408#endif
1409 return module_init_section(sname);
1410}
1411
1412/*
1413 * Lay out the SHF_ALLOC sections in a way not dissimilar to how ld
1414 * might -- code, read-only data, read-write data, small data. Tally
1415 * sizes, and place the offsets into sh_entsize fields: high bit means it
1416 * belongs in init.
1417 */
1418static void layout_sections(struct module *mod, struct load_info *info)
1419{
1420 static unsigned long const masks[][2] = {
1421 /*
1422 * NOTE: all executable code must be the first section
1423 * in this array; otherwise modify the text_size
1424 * finder in the two loops below
1425 */
1426 { SHF_EXECINSTR | SHF_ALLOC, ARCH_SHF_SMALL },
1427 { SHF_ALLOC, SHF_WRITE | ARCH_SHF_SMALL },
1428 { SHF_RO_AFTER_INIT | SHF_ALLOC, ARCH_SHF_SMALL },
1429 { SHF_WRITE | SHF_ALLOC, ARCH_SHF_SMALL },
1430 { ARCH_SHF_SMALL | SHF_ALLOC, 0 }
1431 };
1432 unsigned int m, i;
1433
1434 for (i = 0; i < info->hdr->e_shnum; i++)
1435 info->sechdrs[i].sh_entsize = ~0UL;
1436
1437 pr_debug("Core section allocation order:\n");
1438 for (m = 0; m < ARRAY_SIZE(masks); ++m) {
1439 for (i = 0; i < info->hdr->e_shnum; ++i) {
1440 Elf_Shdr *s = &info->sechdrs[i];
1441 const char *sname = info->secstrings + s->sh_name;
1442 unsigned int *sizep;
1443
1444 if ((s->sh_flags & masks[m][0]) != masks[m][0]
1445 || (s->sh_flags & masks[m][1])
1446 || s->sh_entsize != ~0UL
1447 || module_init_layout_section(sname))
1448 continue;
1449 sizep = m ? &mod->data_layout.size : &mod->core_layout.size;
1450 s->sh_entsize = module_get_offset(mod, sizep, s, i);
1451 pr_debug("\t%s\n", sname);
1452 }
1453 switch (m) {
1454 case 0: /* executable */
1455 mod->core_layout.size = strict_align(mod->core_layout.size);
1456 mod->core_layout.text_size = mod->core_layout.size;
1457 break;
1458 case 1: /* RO: text and ro-data */
1459 mod->data_layout.size = strict_align(mod->data_layout.size);
1460 mod->data_layout.ro_size = mod->data_layout.size;
1461 break;
1462 case 2: /* RO after init */
1463 mod->data_layout.size = strict_align(mod->data_layout.size);
1464 mod->data_layout.ro_after_init_size = mod->data_layout.size;
1465 break;
1466 case 4: /* whole core */
1467 mod->data_layout.size = strict_align(mod->data_layout.size);
1468 break;
1469 }
1470 }
1471
1472 pr_debug("Init section allocation order:\n");
1473 for (m = 0; m < ARRAY_SIZE(masks); ++m) {
1474 for (i = 0; i < info->hdr->e_shnum; ++i) {
1475 Elf_Shdr *s = &info->sechdrs[i];
1476 const char *sname = info->secstrings + s->sh_name;
1477
1478 if ((s->sh_flags & masks[m][0]) != masks[m][0]
1479 || (s->sh_flags & masks[m][1])
1480 || s->sh_entsize != ~0UL
1481 || !module_init_layout_section(sname))
1482 continue;
1483 s->sh_entsize = (module_get_offset(mod, &mod->init_layout.size, s, i)
1484 | INIT_OFFSET_MASK);
1485 pr_debug("\t%s\n", sname);
1486 }
1487 switch (m) {
1488 case 0: /* executable */
1489 mod->init_layout.size = strict_align(mod->init_layout.size);
1490 mod->init_layout.text_size = mod->init_layout.size;
1491 break;
1492 case 1: /* RO: text and ro-data */
1493 mod->init_layout.size = strict_align(mod->init_layout.size);
1494 mod->init_layout.ro_size = mod->init_layout.size;
1495 break;
1496 case 2:
1497 /*
1498 * RO after init doesn't apply to init_layout (only
1499 * core_layout), so it just takes the value of ro_size.
1500 */
1501 mod->init_layout.ro_after_init_size = mod->init_layout.ro_size;
1502 break;
1503 case 4: /* whole init */
1504 mod->init_layout.size = strict_align(mod->init_layout.size);
1505 break;
1506 }
1507 }
1508}
1509
1510static void set_license(struct module *mod, const char *license)
1511{
1512 if (!license)
1513 license = "unspecified";
1514
1515 if (!license_is_gpl_compatible(license)) {
1516 if (!test_taint(TAINT_PROPRIETARY_MODULE))
1517 pr_warn("%s: module license '%s' taints kernel.\n",
1518 mod->name, license);
1519 add_taint_module(mod, TAINT_PROPRIETARY_MODULE,
1520 LOCKDEP_NOW_UNRELIABLE);
1521 }
1522}
1523
1524/* Parse tag=value strings from .modinfo section */
1525static char *next_string(char *string, unsigned long *secsize)
1526{
1527 /* Skip non-zero chars */
1528 while (string[0]) {
1529 string++;
1530 if ((*secsize)-- <= 1)
1531 return NULL;
1532 }
1533
1534 /* Skip any zero padding. */
1535 while (!string[0]) {
1536 string++;
1537 if ((*secsize)-- <= 1)
1538 return NULL;
1539 }
1540 return string;
1541}
1542
1543static char *get_next_modinfo(const struct load_info *info, const char *tag,
1544 char *prev)
1545{
1546 char *p;
1547 unsigned int taglen = strlen(tag);
1548 Elf_Shdr *infosec = &info->sechdrs[info->index.info];
1549 unsigned long size = infosec->sh_size;
1550
1551 /*
1552 * get_modinfo() calls made before rewrite_section_headers()
1553 * must use sh_offset, as sh_addr isn't set!
1554 */
1555 char *modinfo = (char *)info->hdr + infosec->sh_offset;
1556
1557 if (prev) {
1558 size -= prev - modinfo;
1559 modinfo = next_string(prev, &size);
1560 }
1561
1562 for (p = modinfo; p; p = next_string(p, &size)) {
1563 if (strncmp(p, tag, taglen) == 0 && p[taglen] == '=')
1564 return p + taglen + 1;
1565 }
1566 return NULL;
1567}
1568
1569static char *get_modinfo(const struct load_info *info, const char *tag)
1570{
1571 return get_next_modinfo(info, tag, NULL);
1572}
1573
1574static void setup_modinfo(struct module *mod, struct load_info *info)
1575{
1576 struct module_attribute *attr;
1577 int i;
1578
1579 for (i = 0; (attr = modinfo_attrs[i]); i++) {
1580 if (attr->setup)
1581 attr->setup(mod, get_modinfo(info, attr->attr.name));
1582 }
1583}
1584
1585static void free_modinfo(struct module *mod)
1586{
1587 struct module_attribute *attr;
1588 int i;
1589
1590 for (i = 0; (attr = modinfo_attrs[i]); i++) {
1591 if (attr->free)
1592 attr->free(mod);
1593 }
1594}
1595
1596static void dynamic_debug_setup(struct module *mod, struct _ddebug *debug, unsigned int num)
1597{
1598 if (!debug)
1599 return;
1600 ddebug_add_module(debug, num, mod->name);
1601}
1602
1603static void dynamic_debug_remove(struct module *mod, struct _ddebug *debug)
1604{
1605 if (debug)
1606 ddebug_remove_module(mod->name);
1607}
1608
1609void * __weak module_alloc(unsigned long size)
1610{
1611 return __vmalloc_node_range(size, 1, VMALLOC_START, VMALLOC_END,
1612 GFP_KERNEL, PAGE_KERNEL_EXEC, VM_FLUSH_RESET_PERMS,
1613 NUMA_NO_NODE, __builtin_return_address(0));
1614}
1615
1616bool __weak module_init_section(const char *name)
1617{
1618 return strstarts(name, ".init");
1619}
1620
1621bool __weak module_exit_section(const char *name)
1622{
1623 return strstarts(name, ".exit");
1624}
1625
1626static int validate_section_offset(struct load_info *info, Elf_Shdr *shdr)
1627{
1628#if defined(CONFIG_64BIT)
1629 unsigned long long secend;
1630#else
1631 unsigned long secend;
1632#endif
1633
1634 /*
1635 * Check for both overflow and offset/size being
1636 * too large.
1637 */
1638 secend = shdr->sh_offset + shdr->sh_size;
1639 if (secend < shdr->sh_offset || secend > info->len)
1640 return -ENOEXEC;
1641
1642 return 0;
1643}
1644
1645/*
1646 * Sanity checks against invalid binaries, wrong arch, weird elf version.
1647 *
1648 * Also do basic validity checks against section offsets and sizes, the
1649 * section name string table, and the indices used for it (sh_name).
1650 */
1651static int elf_validity_check(struct load_info *info)
1652{
1653 unsigned int i;
1654 Elf_Shdr *shdr, *strhdr;
1655 int err;
1656
1657 if (info->len < sizeof(*(info->hdr))) {
1658 pr_err("Invalid ELF header len %lu\n", info->len);
1659 goto no_exec;
1660 }
1661
1662 if (memcmp(info->hdr->e_ident, ELFMAG, SELFMAG) != 0) {
1663 pr_err("Invalid ELF header magic: != %s\n", ELFMAG);
1664 goto no_exec;
1665 }
1666 if (info->hdr->e_type != ET_REL) {
1667 pr_err("Invalid ELF header type: %u != %u\n",
1668 info->hdr->e_type, ET_REL);
1669 goto no_exec;
1670 }
1671 if (!elf_check_arch(info->hdr)) {
1672 pr_err("Invalid architecture in ELF header: %u\n",
1673 info->hdr->e_machine);
1674 goto no_exec;
1675 }
1676 if (info->hdr->e_shentsize != sizeof(Elf_Shdr)) {
1677 pr_err("Invalid ELF section header size\n");
1678 goto no_exec;
1679 }
1680
1681 /*
1682 * e_shnum is 16 bits, and sizeof(Elf_Shdr) is
1683 * known and small. So e_shnum * sizeof(Elf_Shdr)
1684 * will not overflow unsigned long on any platform.
1685 */
1686 if (info->hdr->e_shoff >= info->len
1687 || (info->hdr->e_shnum * sizeof(Elf_Shdr) >
1688 info->len - info->hdr->e_shoff)) {
1689 pr_err("Invalid ELF section header overflow\n");
1690 goto no_exec;
1691 }
1692
1693 info->sechdrs = (void *)info->hdr + info->hdr->e_shoff;
1694
1695 /*
1696 * Verify if the section name table index is valid.
1697 */
1698 if (info->hdr->e_shstrndx == SHN_UNDEF
1699 || info->hdr->e_shstrndx >= info->hdr->e_shnum) {
1700 pr_err("Invalid ELF section name index: %d || e_shstrndx (%d) >= e_shnum (%d)\n",
1701 info->hdr->e_shstrndx, info->hdr->e_shstrndx,
1702 info->hdr->e_shnum);
1703 goto no_exec;
1704 }
1705
1706 strhdr = &info->sechdrs[info->hdr->e_shstrndx];
1707 err = validate_section_offset(info, strhdr);
1708 if (err < 0) {
1709 pr_err("Invalid ELF section hdr(type %u)\n", strhdr->sh_type);
1710 return err;
1711 }
1712
1713 /*
1714 * The section name table must be NUL-terminated, as required
1715 * by the spec. This makes strcmp and pr_* calls that access
1716 * strings in the section safe.
1717 */
1718 info->secstrings = (void *)info->hdr + strhdr->sh_offset;
1719 if (strhdr->sh_size == 0) {
1720 pr_err("empty section name table\n");
1721 goto no_exec;
1722 }
1723 if (info->secstrings[strhdr->sh_size - 1] != '\0') {
1724 pr_err("ELF Spec violation: section name table isn't null terminated\n");
1725 goto no_exec;
1726 }
1727
1728 /*
1729 * The code assumes that section 0 has a length of zero and
1730 * an addr of zero, so check for it.
1731 */
1732 if (info->sechdrs[0].sh_type != SHT_NULL
1733 || info->sechdrs[0].sh_size != 0
1734 || info->sechdrs[0].sh_addr != 0) {
1735 pr_err("ELF Spec violation: section 0 type(%d)!=SH_NULL or non-zero len or addr\n",
1736 info->sechdrs[0].sh_type);
1737 goto no_exec;
1738 }
1739
1740 for (i = 1; i < info->hdr->e_shnum; i++) {
1741 shdr = &info->sechdrs[i];
1742 switch (shdr->sh_type) {
1743 case SHT_NULL:
1744 case SHT_NOBITS:
1745 continue;
1746 case SHT_SYMTAB:
1747 if (shdr->sh_link == SHN_UNDEF
1748 || shdr->sh_link >= info->hdr->e_shnum) {
1749 pr_err("Invalid ELF sh_link!=SHN_UNDEF(%d) or (sh_link(%d) >= hdr->e_shnum(%d)\n",
1750 shdr->sh_link, shdr->sh_link,
1751 info->hdr->e_shnum);
1752 goto no_exec;
1753 }
1754 fallthrough;
1755 default:
1756 err = validate_section_offset(info, shdr);
1757 if (err < 0) {
1758 pr_err("Invalid ELF section in module (section %u type %u)\n",
1759 i, shdr->sh_type);
1760 return err;
1761 }
1762
1763 if (shdr->sh_flags & SHF_ALLOC) {
1764 if (shdr->sh_name >= strhdr->sh_size) {
1765 pr_err("Invalid ELF section name in module (section %u type %u)\n",
1766 i, shdr->sh_type);
1767 return -ENOEXEC;
1768 }
1769 }
1770 break;
1771 }
1772 }
1773
1774 return 0;
1775
1776no_exec:
1777 return -ENOEXEC;
1778}
1779
1780#define COPY_CHUNK_SIZE (16*PAGE_SIZE)
1781
1782static int copy_chunked_from_user(void *dst, const void __user *usrc, unsigned long len)
1783{
1784 do {
1785 unsigned long n = min(len, COPY_CHUNK_SIZE);
1786
1787 if (copy_from_user(dst, usrc, n) != 0)
1788 return -EFAULT;
1789 cond_resched();
1790 dst += n;
1791 usrc += n;
1792 len -= n;
1793 } while (len);
1794 return 0;
1795}
1796
1797static int check_modinfo_livepatch(struct module *mod, struct load_info *info)
1798{
1799 if (!get_modinfo(info, "livepatch"))
1800 /* Nothing more to do */
1801 return 0;
1802
1803 if (set_livepatch_module(mod)) {
1804 add_taint_module(mod, TAINT_LIVEPATCH, LOCKDEP_STILL_OK);
1805 pr_notice_once("%s: tainting kernel with TAINT_LIVEPATCH\n",
1806 mod->name);
1807 return 0;
1808 }
1809
1810 pr_err("%s: module is marked as livepatch module, but livepatch support is disabled",
1811 mod->name);
1812 return -ENOEXEC;
1813}
1814
1815static void check_modinfo_retpoline(struct module *mod, struct load_info *info)
1816{
1817 if (retpoline_module_ok(get_modinfo(info, "retpoline")))
1818 return;
1819
1820 pr_warn("%s: loading module not compiled with retpoline compiler.\n",
1821 mod->name);
1822}
1823
1824/* Sets info->hdr and info->len. */
1825static int copy_module_from_user(const void __user *umod, unsigned long len,
1826 struct load_info *info)
1827{
1828 int err;
1829
1830 info->len = len;
1831 if (info->len < sizeof(*(info->hdr)))
1832 return -ENOEXEC;
1833
1834 err = security_kernel_load_data(LOADING_MODULE, true);
1835 if (err)
1836 return err;
1837
1838 /* Suck in entire file: we'll want most of it. */
1839 info->hdr = __vmalloc(info->len, GFP_KERNEL | __GFP_NOWARN);
1840 if (!info->hdr)
1841 return -ENOMEM;
1842
1843 if (copy_chunked_from_user(info->hdr, umod, info->len) != 0) {
1844 err = -EFAULT;
1845 goto out;
1846 }
1847
1848 err = security_kernel_post_load_data((char *)info->hdr, info->len,
1849 LOADING_MODULE, "init_module");
1850out:
1851 if (err)
1852 vfree(info->hdr);
1853
1854 return err;
1855}
1856
1857static void free_copy(struct load_info *info, int flags)
1858{
1859 if (flags & MODULE_INIT_COMPRESSED_FILE)
1860 module_decompress_cleanup(info);
1861 else
1862 vfree(info->hdr);
1863}
1864
1865static int rewrite_section_headers(struct load_info *info, int flags)
1866{
1867 unsigned int i;
1868
1869 /* This should always be true, but let's be sure. */
1870 info->sechdrs[0].sh_addr = 0;
1871
1872 for (i = 1; i < info->hdr->e_shnum; i++) {
1873 Elf_Shdr *shdr = &info->sechdrs[i];
1874
1875 /*
1876 * Mark all sections sh_addr with their address in the
1877 * temporary image.
1878 */
1879 shdr->sh_addr = (size_t)info->hdr + shdr->sh_offset;
1880
1881 }
1882
1883 /* Track but don't keep modinfo and version sections. */
1884 info->sechdrs[info->index.vers].sh_flags &= ~(unsigned long)SHF_ALLOC;
1885 info->sechdrs[info->index.info].sh_flags &= ~(unsigned long)SHF_ALLOC;
1886
1887 return 0;
1888}
1889
1890/*
1891 * Set up our basic convenience variables (pointers to section headers,
1892 * search for module section index etc), and do some basic section
1893 * verification.
1894 *
1895 * Set info->mod to the temporary copy of the module in info->hdr. The final one
1896 * will be allocated in move_module().
1897 */
1898static int setup_load_info(struct load_info *info, int flags)
1899{
1900 unsigned int i;
1901
1902 /* Try to find a name early so we can log errors with a module name */
1903 info->index.info = find_sec(info, ".modinfo");
1904 if (info->index.info)
1905 info->name = get_modinfo(info, "name");
1906
1907 /* Find internal symbols and strings. */
1908 for (i = 1; i < info->hdr->e_shnum; i++) {
1909 if (info->sechdrs[i].sh_type == SHT_SYMTAB) {
1910 info->index.sym = i;
1911 info->index.str = info->sechdrs[i].sh_link;
1912 info->strtab = (char *)info->hdr
1913 + info->sechdrs[info->index.str].sh_offset;
1914 break;
1915 }
1916 }
1917
1918 if (info->index.sym == 0) {
1919 pr_warn("%s: module has no symbols (stripped?)\n",
1920 info->name ?: "(missing .modinfo section or name field)");
1921 return -ENOEXEC;
1922 }
1923
1924 info->index.mod = find_sec(info, ".gnu.linkonce.this_module");
1925 if (!info->index.mod) {
1926 pr_warn("%s: No module found in object\n",
1927 info->name ?: "(missing .modinfo section or name field)");
1928 return -ENOEXEC;
1929 }
1930 /* This is temporary: point mod into copy of data. */
1931 info->mod = (void *)info->hdr + info->sechdrs[info->index.mod].sh_offset;
1932
1933 /*
1934 * If we didn't load the .modinfo 'name' field earlier, fall back to
1935 * on-disk struct mod 'name' field.
1936 */
1937 if (!info->name)
1938 info->name = info->mod->name;
1939
1940 if (flags & MODULE_INIT_IGNORE_MODVERSIONS)
1941 info->index.vers = 0; /* Pretend no __versions section! */
1942 else
1943 info->index.vers = find_sec(info, "__versions");
1944
1945 info->index.pcpu = find_pcpusec(info);
1946
1947 return 0;
1948}
1949
1950static int check_modinfo(struct module *mod, struct load_info *info, int flags)
1951{
1952 const char *modmagic = get_modinfo(info, "vermagic");
1953 int err;
1954
1955 if (flags & MODULE_INIT_IGNORE_VERMAGIC)
1956 modmagic = NULL;
1957
1958 /* This is allowed: modprobe --force will invalidate it. */
1959 if (!modmagic) {
1960 err = try_to_force_load(mod, "bad vermagic");
1961 if (err)
1962 return err;
1963 } else if (!same_magic(modmagic, vermagic, info->index.vers)) {
1964 pr_err("%s: version magic '%s' should be '%s'\n",
1965 info->name, modmagic, vermagic);
1966 return -ENOEXEC;
1967 }
1968
1969 if (!get_modinfo(info, "intree")) {
1970 if (!test_taint(TAINT_OOT_MODULE))
1971 pr_warn("%s: loading out-of-tree module taints kernel.\n",
1972 mod->name);
1973 add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK);
1974 }
1975
1976 check_modinfo_retpoline(mod, info);
1977
1978 if (get_modinfo(info, "staging")) {
1979 add_taint_module(mod, TAINT_CRAP, LOCKDEP_STILL_OK);
1980 pr_warn("%s: module is from the staging directory, the quality "
1981 "is unknown, you have been warned.\n", mod->name);
1982 }
1983
1984 err = check_modinfo_livepatch(mod, info);
1985 if (err)
1986 return err;
1987
1988 /* Set up license info based on the info section */
1989 set_license(mod, get_modinfo(info, "license"));
1990
1991 return 0;
1992}
1993
1994static int find_module_sections(struct module *mod, struct load_info *info)
1995{
1996 mod->kp = section_objs(info, "__param",
1997 sizeof(*mod->kp), &mod->num_kp);
1998 mod->syms = section_objs(info, "__ksymtab",
1999 sizeof(*mod->syms), &mod->num_syms);
2000 mod->crcs = section_addr(info, "__kcrctab");
2001 mod->gpl_syms = section_objs(info, "__ksymtab_gpl",
2002 sizeof(*mod->gpl_syms),
2003 &mod->num_gpl_syms);
2004 mod->gpl_crcs = section_addr(info, "__kcrctab_gpl");
2005
2006#ifdef CONFIG_CONSTRUCTORS
2007 mod->ctors = section_objs(info, ".ctors",
2008 sizeof(*mod->ctors), &mod->num_ctors);
2009 if (!mod->ctors)
2010 mod->ctors = section_objs(info, ".init_array",
2011 sizeof(*mod->ctors), &mod->num_ctors);
2012 else if (find_sec(info, ".init_array")) {
2013 /*
2014 * This shouldn't happen with same compiler and binutils
2015 * building all parts of the module.
2016 */
2017 pr_warn("%s: has both .ctors and .init_array.\n",
2018 mod->name);
2019 return -EINVAL;
2020 }
2021#endif
2022
2023 mod->noinstr_text_start = section_objs(info, ".noinstr.text", 1,
2024 &mod->noinstr_text_size);
2025
2026#ifdef CONFIG_TRACEPOINTS
2027 mod->tracepoints_ptrs = section_objs(info, "__tracepoints_ptrs",
2028 sizeof(*mod->tracepoints_ptrs),
2029 &mod->num_tracepoints);
2030#endif
2031#ifdef CONFIG_TREE_SRCU
2032 mod->srcu_struct_ptrs = section_objs(info, "___srcu_struct_ptrs",
2033 sizeof(*mod->srcu_struct_ptrs),
2034 &mod->num_srcu_structs);
2035#endif
2036#ifdef CONFIG_BPF_EVENTS
2037 mod->bpf_raw_events = section_objs(info, "__bpf_raw_tp_map",
2038 sizeof(*mod->bpf_raw_events),
2039 &mod->num_bpf_raw_events);
2040#endif
2041#ifdef CONFIG_DEBUG_INFO_BTF_MODULES
2042 mod->btf_data = any_section_objs(info, ".BTF", 1, &mod->btf_data_size);
2043#endif
2044#ifdef CONFIG_JUMP_LABEL
2045 mod->jump_entries = section_objs(info, "__jump_table",
2046 sizeof(*mod->jump_entries),
2047 &mod->num_jump_entries);
2048#endif
2049#ifdef CONFIG_EVENT_TRACING
2050 mod->trace_events = section_objs(info, "_ftrace_events",
2051 sizeof(*mod->trace_events),
2052 &mod->num_trace_events);
2053 mod->trace_evals = section_objs(info, "_ftrace_eval_map",
2054 sizeof(*mod->trace_evals),
2055 &mod->num_trace_evals);
2056#endif
2057#ifdef CONFIG_TRACING
2058 mod->trace_bprintk_fmt_start = section_objs(info, "__trace_printk_fmt",
2059 sizeof(*mod->trace_bprintk_fmt_start),
2060 &mod->num_trace_bprintk_fmt);
2061#endif
2062#ifdef CONFIG_FTRACE_MCOUNT_RECORD
2063 /* sechdrs[0].sh_size is always zero */
2064 mod->ftrace_callsites = section_objs(info, FTRACE_CALLSITE_SECTION,
2065 sizeof(*mod->ftrace_callsites),
2066 &mod->num_ftrace_callsites);
2067#endif
2068#ifdef CONFIG_FUNCTION_ERROR_INJECTION
2069 mod->ei_funcs = section_objs(info, "_error_injection_whitelist",
2070 sizeof(*mod->ei_funcs),
2071 &mod->num_ei_funcs);
2072#endif
2073#ifdef CONFIG_KPROBES
2074 mod->kprobes_text_start = section_objs(info, ".kprobes.text", 1,
2075 &mod->kprobes_text_size);
2076 mod->kprobe_blacklist = section_objs(info, "_kprobe_blacklist",
2077 sizeof(unsigned long),
2078 &mod->num_kprobe_blacklist);
2079#endif
2080#ifdef CONFIG_PRINTK_INDEX
2081 mod->printk_index_start = section_objs(info, ".printk_index",
2082 sizeof(*mod->printk_index_start),
2083 &mod->printk_index_size);
2084#endif
2085#ifdef CONFIG_HAVE_STATIC_CALL_INLINE
2086 mod->static_call_sites = section_objs(info, ".static_call_sites",
2087 sizeof(*mod->static_call_sites),
2088 &mod->num_static_call_sites);
2089#endif
2090 mod->extable = section_objs(info, "__ex_table",
2091 sizeof(*mod->extable), &mod->num_exentries);
2092
2093 if (section_addr(info, "__obsparm"))
2094 pr_warn("%s: Ignoring obsolete parameters\n", mod->name);
2095
2096 info->debug = section_objs(info, "__dyndbg",
2097 sizeof(*info->debug), &info->num_debug);
2098
2099 return 0;
2100}
2101
2102static int move_module(struct module *mod, struct load_info *info)
2103{
2104 int i;
2105 void *ptr;
2106
2107 /* Do the allocs. */
2108 ptr = module_alloc(mod->core_layout.size);
2109 /*
2110 * The pointer to this block is stored in the module structure
2111 * which is inside the block. Just mark it as not being a
2112 * leak.
2113 */
2114 kmemleak_not_leak(ptr);
2115 if (!ptr)
2116 return -ENOMEM;
2117
2118 memset(ptr, 0, mod->core_layout.size);
2119 mod->core_layout.base = ptr;
2120
2121 if (mod->init_layout.size) {
2122 ptr = module_alloc(mod->init_layout.size);
2123 /*
2124 * The pointer to this block is stored in the module structure
2125 * which is inside the block. This block doesn't need to be
2126 * scanned as it contains data and code that will be freed
2127 * after the module is initialized.
2128 */
2129 kmemleak_ignore(ptr);
2130 if (!ptr) {
2131 module_memfree(mod->core_layout.base);
2132 return -ENOMEM;
2133 }
2134 memset(ptr, 0, mod->init_layout.size);
2135 mod->init_layout.base = ptr;
2136 } else
2137 mod->init_layout.base = NULL;
2138
2139#ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
2140 /* Do the allocs. */
2141 ptr = vmalloc(mod->data_layout.size);
2142 /*
2143 * The pointer to this block is stored in the module structure
2144 * which is inside the block. Just mark it as not being a
2145 * leak.
2146 */
2147 kmemleak_not_leak(ptr);
2148 if (!ptr) {
2149 module_memfree(mod->core_layout.base);
2150 module_memfree(mod->init_layout.base);
2151 return -ENOMEM;
2152 }
2153
2154 memset(ptr, 0, mod->data_layout.size);
2155 mod->data_layout.base = ptr;
2156#endif
2157 /* Transfer each section which specifies SHF_ALLOC */
2158 pr_debug("final section addresses:\n");
2159 for (i = 0; i < info->hdr->e_shnum; i++) {
2160 void *dest;
2161 Elf_Shdr *shdr = &info->sechdrs[i];
2162
2163 if (!(shdr->sh_flags & SHF_ALLOC))
2164 continue;
2165
2166 if (shdr->sh_entsize & INIT_OFFSET_MASK)
2167 dest = mod->init_layout.base
2168 + (shdr->sh_entsize & ~INIT_OFFSET_MASK);
2169 else if (!(shdr->sh_flags & SHF_EXECINSTR))
2170 dest = mod->data_layout.base + shdr->sh_entsize;
2171 else
2172 dest = mod->core_layout.base + shdr->sh_entsize;
2173
2174 if (shdr->sh_type != SHT_NOBITS)
2175 memcpy(dest, (void *)shdr->sh_addr, shdr->sh_size);
2176 /* Update sh_addr to point to copy in image. */
2177 shdr->sh_addr = (unsigned long)dest;
2178 pr_debug("\t0x%lx %s\n",
2179 (long)shdr->sh_addr, info->secstrings + shdr->sh_name);
2180 }
2181
2182 return 0;
2183}
2184
2185static int check_module_license_and_versions(struct module *mod)
2186{
2187 int prev_taint = test_taint(TAINT_PROPRIETARY_MODULE);
2188
2189 /*
2190 * ndiswrapper is under GPL by itself, but loads proprietary modules.
2191 * Don't use add_taint_module(), as it would prevent ndiswrapper from
2192 * using GPL-only symbols it needs.
2193 */
2194 if (strcmp(mod->name, "ndiswrapper") == 0)
2195 add_taint(TAINT_PROPRIETARY_MODULE, LOCKDEP_NOW_UNRELIABLE);
2196
2197 /* driverloader was caught wrongly pretending to be under GPL */
2198 if (strcmp(mod->name, "driverloader") == 0)
2199 add_taint_module(mod, TAINT_PROPRIETARY_MODULE,
2200 LOCKDEP_NOW_UNRELIABLE);
2201
2202 /* lve claims to be GPL but upstream won't provide source */
2203 if (strcmp(mod->name, "lve") == 0)
2204 add_taint_module(mod, TAINT_PROPRIETARY_MODULE,
2205 LOCKDEP_NOW_UNRELIABLE);
2206
2207 if (!prev_taint && test_taint(TAINT_PROPRIETARY_MODULE))
2208 pr_warn("%s: module license taints kernel.\n", mod->name);
2209
2210#ifdef CONFIG_MODVERSIONS
2211 if ((mod->num_syms && !mod->crcs) ||
2212 (mod->num_gpl_syms && !mod->gpl_crcs)) {
2213 return try_to_force_load(mod,
2214 "no versions for exported symbols");
2215 }
2216#endif
2217 return 0;
2218}
2219
2220static void flush_module_icache(const struct module *mod)
2221{
2222 /*
2223 * Flush the instruction cache, since we've played with text.
2224 * Do it before processing of module parameters, so the module
2225 * can provide parameter accessor functions of its own.
2226 */
2227 if (mod->init_layout.base)
2228 flush_icache_range((unsigned long)mod->init_layout.base,
2229 (unsigned long)mod->init_layout.base
2230 + mod->init_layout.size);
2231 flush_icache_range((unsigned long)mod->core_layout.base,
2232 (unsigned long)mod->core_layout.base + mod->core_layout.size);
2233}
2234
2235int __weak module_frob_arch_sections(Elf_Ehdr *hdr,
2236 Elf_Shdr *sechdrs,
2237 char *secstrings,
2238 struct module *mod)
2239{
2240 return 0;
2241}
2242
2243/* module_blacklist is a comma-separated list of module names */
2244static char *module_blacklist;
2245static bool blacklisted(const char *module_name)
2246{
2247 const char *p;
2248 size_t len;
2249
2250 if (!module_blacklist)
2251 return false;
2252
2253 for (p = module_blacklist; *p; p += len) {
2254 len = strcspn(p, ",");
2255 if (strlen(module_name) == len && !memcmp(module_name, p, len))
2256 return true;
2257 if (p[len] == ',')
2258 len++;
2259 }
2260 return false;
2261}
2262core_param(module_blacklist, module_blacklist, charp, 0400);
2263
2264static struct module *layout_and_allocate(struct load_info *info, int flags)
2265{
2266 struct module *mod;
2267 unsigned int ndx;
2268 int err;
2269
2270 err = check_modinfo(info->mod, info, flags);
2271 if (err)
2272 return ERR_PTR(err);
2273
2274 /* Allow arches to frob section contents and sizes. */
2275 err = module_frob_arch_sections(info->hdr, info->sechdrs,
2276 info->secstrings, info->mod);
2277 if (err < 0)
2278 return ERR_PTR(err);
2279
2280 err = module_enforce_rwx_sections(info->hdr, info->sechdrs,
2281 info->secstrings, info->mod);
2282 if (err < 0)
2283 return ERR_PTR(err);
2284
2285 /* We will do a special allocation for per-cpu sections later. */
2286 info->sechdrs[info->index.pcpu].sh_flags &= ~(unsigned long)SHF_ALLOC;
2287
2288 /*
2289 * Mark ro_after_init section with SHF_RO_AFTER_INIT so that
2290 * layout_sections() can put it in the right place.
2291 * Note: ro_after_init sections also have SHF_{WRITE,ALLOC} set.
2292 */
2293 ndx = find_sec(info, ".data..ro_after_init");
2294 if (ndx)
2295 info->sechdrs[ndx].sh_flags |= SHF_RO_AFTER_INIT;
2296 /*
2297 * Mark the __jump_table section as ro_after_init as well: these data
2298 * structures are never modified, with the exception of entries that
2299 * refer to code in the __init section, which are annotated as such
2300 * at module load time.
2301 */
2302 ndx = find_sec(info, "__jump_table");
2303 if (ndx)
2304 info->sechdrs[ndx].sh_flags |= SHF_RO_AFTER_INIT;
2305
2306 /*
2307 * Determine total sizes, and put offsets in sh_entsize. For now
2308 * this is done generically; there doesn't appear to be any
2309 * special cases for the architectures.
2310 */
2311 layout_sections(info->mod, info);
2312 layout_symtab(info->mod, info);
2313
2314 /* Allocate and move to the final place */
2315 err = move_module(info->mod, info);
2316 if (err)
2317 return ERR_PTR(err);
2318
2319 /* Module has been copied to its final place now: return it. */
2320 mod = (void *)info->sechdrs[info->index.mod].sh_addr;
2321 kmemleak_load_module(mod, info);
2322 return mod;
2323}
2324
2325/* mod is no longer valid after this! */
2326static void module_deallocate(struct module *mod, struct load_info *info)
2327{
2328 percpu_modfree(mod);
2329 module_arch_freeing_init(mod);
2330 module_memfree(mod->init_layout.base);
2331 module_memfree(mod->core_layout.base);
2332#ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
2333 vfree(mod->data_layout.base);
2334#endif
2335}
2336
2337int __weak module_finalize(const Elf_Ehdr *hdr,
2338 const Elf_Shdr *sechdrs,
2339 struct module *me)
2340{
2341 return 0;
2342}
2343
2344static int post_relocation(struct module *mod, const struct load_info *info)
2345{
2346 /* Sort exception table now relocations are done. */
2347 sort_extable(mod->extable, mod->extable + mod->num_exentries);
2348
2349 /* Copy relocated percpu area over. */
2350 percpu_modcopy(mod, (void *)info->sechdrs[info->index.pcpu].sh_addr,
2351 info->sechdrs[info->index.pcpu].sh_size);
2352
2353 /* Setup kallsyms-specific fields. */
2354 add_kallsyms(mod, info);
2355
2356 /* Arch-specific module finalizing. */
2357 return module_finalize(info->hdr, info->sechdrs, mod);
2358}
2359
2360/* Is this module of this name done loading? No locks held. */
2361static bool finished_loading(const char *name)
2362{
2363 struct module *mod;
2364 bool ret;
2365
2366 /*
2367 * The module_mutex should not be a heavily contended lock;
2368 * if we get the occasional sleep here, we'll go an extra iteration
2369 * in the wait_event_interruptible(), which is harmless.
2370 */
2371 sched_annotate_sleep();
2372 mutex_lock(&module_mutex);
2373 mod = find_module_all(name, strlen(name), true);
2374 ret = !mod || mod->state == MODULE_STATE_LIVE;
2375 mutex_unlock(&module_mutex);
2376
2377 return ret;
2378}
2379
2380/* Call module constructors. */
2381static void do_mod_ctors(struct module *mod)
2382{
2383#ifdef CONFIG_CONSTRUCTORS
2384 unsigned long i;
2385
2386 for (i = 0; i < mod->num_ctors; i++)
2387 mod->ctors[i]();
2388#endif
2389}
2390
2391/* For freeing module_init on success, in case kallsyms traversing */
2392struct mod_initfree {
2393 struct llist_node node;
2394 void *module_init;
2395};
2396
2397static void do_free_init(struct work_struct *w)
2398{
2399 struct llist_node *pos, *n, *list;
2400 struct mod_initfree *initfree;
2401
2402 list = llist_del_all(&init_free_list);
2403
2404 synchronize_rcu();
2405
2406 llist_for_each_safe(pos, n, list) {
2407 initfree = container_of(pos, struct mod_initfree, node);
2408 module_memfree(initfree->module_init);
2409 kfree(initfree);
2410 }
2411}
2412
2413/*
2414 * This is where the real work happens.
2415 *
2416 * Keep it uninlined to provide a reliable breakpoint target, e.g. for the gdb
2417 * helper command 'lx-symbols'.
2418 */
2419static noinline int do_init_module(struct module *mod)
2420{
2421 int ret = 0;
2422 struct mod_initfree *freeinit;
2423
2424 freeinit = kmalloc(sizeof(*freeinit), GFP_KERNEL);
2425 if (!freeinit) {
2426 ret = -ENOMEM;
2427 goto fail;
2428 }
2429 freeinit->module_init = mod->init_layout.base;
2430
2431 do_mod_ctors(mod);
2432 /* Start the module */
2433 if (mod->init != NULL)
2434 ret = do_one_initcall(mod->init);
2435 if (ret < 0) {
2436 goto fail_free_freeinit;
2437 }
2438 if (ret > 0) {
2439 pr_warn("%s: '%s'->init suspiciously returned %d, it should "
2440 "follow 0/-E convention\n"
2441 "%s: loading module anyway...\n",
2442 __func__, mod->name, ret, __func__);
2443 dump_stack();
2444 }
2445
2446 /* Now it's a first class citizen! */
2447 mod->state = MODULE_STATE_LIVE;
2448 blocking_notifier_call_chain(&module_notify_list,
2449 MODULE_STATE_LIVE, mod);
2450
2451 /* Delay uevent until module has finished its init routine */
2452 kobject_uevent(&mod->mkobj.kobj, KOBJ_ADD);
2453
2454 /*
2455 * We need to finish all async code before the module init sequence
2456 * is done. This has potential to deadlock if synchronous module
2457 * loading is requested from async (which is not allowed!).
2458 *
2459 * See commit 0fdff3ec6d87 ("async, kmod: warn on synchronous
2460 * request_module() from async workers") for more details.
2461 */
2462 if (!mod->async_probe_requested)
2463 async_synchronize_full();
2464
2465 ftrace_free_mem(mod, mod->init_layout.base, mod->init_layout.base +
2466 mod->init_layout.size);
2467 mutex_lock(&module_mutex);
2468 /* Drop initial reference. */
2469 module_put(mod);
2470 trim_init_extable(mod);
2471#ifdef CONFIG_KALLSYMS
2472 /* Switch to core kallsyms now init is done: kallsyms may be walking! */
2473 rcu_assign_pointer(mod->kallsyms, &mod->core_kallsyms);
2474#endif
2475 module_enable_ro(mod, true);
2476 mod_tree_remove_init(mod);
2477 module_arch_freeing_init(mod);
2478 mod->init_layout.base = NULL;
2479 mod->init_layout.size = 0;
2480 mod->init_layout.ro_size = 0;
2481 mod->init_layout.ro_after_init_size = 0;
2482 mod->init_layout.text_size = 0;
2483#ifdef CONFIG_DEBUG_INFO_BTF_MODULES
2484 /* .BTF is not SHF_ALLOC and will get removed, so sanitize pointer */
2485 mod->btf_data = NULL;
2486#endif
2487 /*
2488 * We want to free module_init, but be aware that kallsyms may be
2489 * walking this with preempt disabled. In all the failure paths, we
2490 * call synchronize_rcu(), but we don't want to slow down the success
2491 * path. module_memfree() cannot be called in an interrupt, so do the
2492 * work and call synchronize_rcu() in a work queue.
2493 *
2494 * Note that module_alloc() on most architectures creates W+X page
2495 * mappings which won't be cleaned up until do_free_init() runs. Any
2496 * code such as mark_rodata_ro() which depends on those mappings to
2497 * be cleaned up needs to sync with the queued work - ie
2498 * rcu_barrier()
2499 */
2500 if (llist_add(&freeinit->node, &init_free_list))
2501 schedule_work(&init_free_wq);
2502
2503 mutex_unlock(&module_mutex);
2504 wake_up_all(&module_wq);
2505
2506 return 0;
2507
2508fail_free_freeinit:
2509 kfree(freeinit);
2510fail:
2511 /* Try to protect us from buggy refcounters. */
2512 mod->state = MODULE_STATE_GOING;
2513 synchronize_rcu();
2514 module_put(mod);
2515 blocking_notifier_call_chain(&module_notify_list,
2516 MODULE_STATE_GOING, mod);
2517 klp_module_going(mod);
2518 ftrace_release_mod(mod);
2519 free_module(mod);
2520 wake_up_all(&module_wq);
2521 return ret;
2522}
2523
2524static int may_init_module(void)
2525{
2526 if (!capable(CAP_SYS_MODULE) || modules_disabled)
2527 return -EPERM;
2528
2529 return 0;
2530}
2531
2532/*
2533 * We try to place it in the list now to make sure it's unique before
2534 * we dedicate too many resources. In particular, temporary percpu
2535 * memory exhaustion.
2536 */
2537static int add_unformed_module(struct module *mod)
2538{
2539 int err;
2540 struct module *old;
2541
2542 mod->state = MODULE_STATE_UNFORMED;
2543
2544again:
2545 mutex_lock(&module_mutex);
2546 old = find_module_all(mod->name, strlen(mod->name), true);
2547 if (old != NULL) {
2548 if (old->state != MODULE_STATE_LIVE) {
2549 /* Wait in case it fails to load. */
2550 mutex_unlock(&module_mutex);
2551 err = wait_event_interruptible(module_wq,
2552 finished_loading(mod->name));
2553 if (err)
2554 goto out_unlocked;
2555 goto again;
2556 }
2557 err = -EEXIST;
2558 goto out;
2559 }
2560 mod_update_bounds(mod);
2561 list_add_rcu(&mod->list, &modules);
2562 mod_tree_insert(mod);
2563 err = 0;
2564
2565out:
2566 mutex_unlock(&module_mutex);
2567out_unlocked:
2568 return err;
2569}
2570
2571static int complete_formation(struct module *mod, struct load_info *info)
2572{
2573 int err;
2574
2575 mutex_lock(&module_mutex);
2576
2577 /* Find duplicate symbols (must be called under lock). */
2578 err = verify_exported_symbols(mod);
2579 if (err < 0)
2580 goto out;
2581
2582 /* This relies on module_mutex for list integrity. */
2583 module_bug_finalize(info->hdr, info->sechdrs, mod);
2584
2585 if (module_check_misalignment(mod))
2586 goto out_misaligned;
2587
2588 module_enable_ro(mod, false);
2589 module_enable_nx(mod);
2590 module_enable_x(mod);
2591
2592 /*
2593 * Mark state as coming so strong_try_module_get() ignores us,
2594 * but kallsyms etc. can see us.
2595 */
2596 mod->state = MODULE_STATE_COMING;
2597 mutex_unlock(&module_mutex);
2598
2599 return 0;
2600
2601out_misaligned:
2602 err = -EINVAL;
2603out:
2604 mutex_unlock(&module_mutex);
2605 return err;
2606}
2607
2608static int prepare_coming_module(struct module *mod)
2609{
2610 int err;
2611
2612 ftrace_module_enable(mod);
2613 err = klp_module_coming(mod);
2614 if (err)
2615 return err;
2616
2617 err = blocking_notifier_call_chain_robust(&module_notify_list,
2618 MODULE_STATE_COMING, MODULE_STATE_GOING, mod);
2619 err = notifier_to_errno(err);
2620 if (err)
2621 klp_module_going(mod);
2622
2623 return err;
2624}
2625
2626static int unknown_module_param_cb(char *param, char *val, const char *modname,
2627 void *arg)
2628{
2629 struct module *mod = arg;
2630 int ret;
2631
2632 if (strcmp(param, "async_probe") == 0) {
2633 mod->async_probe_requested = true;
2634 return 0;
2635 }
2636
2637 /* Check for magic 'dyndbg' arg */
2638 ret = ddebug_dyndbg_module_param_cb(param, val, modname);
2639 if (ret != 0)
2640 pr_warn("%s: unknown parameter '%s' ignored\n", modname, param);
2641 return 0;
2642}
2643
2644static void cfi_init(struct module *mod);
2645
2646/*
2647 * Allocate and load the module: note that size of section 0 is always
2648 * zero, and we rely on this for optional sections.
2649 */
2650static int load_module(struct load_info *info, const char __user *uargs,
2651 int flags)
2652{
2653 struct module *mod;
2654 long err = 0;
2655 char *after_dashes;
2656
2657 /*
2658 * Do the signature check (if any) first. All that
2659 * the signature check needs is info->len, it does
2660 * not need any of the section info. That can be
2661 * set up later. This will minimize the chances
2662 * of a corrupt module causing problems before
2663 * we even get to the signature check.
2664 *
2665 * The check will also adjust info->len by stripping
2666 * off the sig length at the end of the module, making
2667 * checks against info->len more correct.
2668 */
2669 err = module_sig_check(info, flags);
2670 if (err)
2671 goto free_copy;
2672
2673 /*
2674 * Do basic sanity checks against the ELF header and
2675 * sections.
2676 */
2677 err = elf_validity_check(info);
2678 if (err)
2679 goto free_copy;
2680
2681 /*
2682 * Everything checks out, so set up the section info
2683 * in the info structure.
2684 */
2685 err = setup_load_info(info, flags);
2686 if (err)
2687 goto free_copy;
2688
2689 /*
2690 * Now that we know we have the correct module name, check
2691 * if it's blacklisted.
2692 */
2693 if (blacklisted(info->name)) {
2694 err = -EPERM;
2695 pr_err("Module %s is blacklisted\n", info->name);
2696 goto free_copy;
2697 }
2698
2699 err = rewrite_section_headers(info, flags);
2700 if (err)
2701 goto free_copy;
2702
2703 /* Check module struct version now, before we try to use module. */
2704 if (!check_modstruct_version(info, info->mod)) {
2705 err = -ENOEXEC;
2706 goto free_copy;
2707 }
2708
2709 /* Figure out module layout, and allocate all the memory. */
2710 mod = layout_and_allocate(info, flags);
2711 if (IS_ERR(mod)) {
2712 err = PTR_ERR(mod);
2713 goto free_copy;
2714 }
2715
2716 audit_log_kern_module(mod->name);
2717
2718 /* Reserve our place in the list. */
2719 err = add_unformed_module(mod);
2720 if (err)
2721 goto free_module;
2722
2723#ifdef CONFIG_MODULE_SIG
2724 mod->sig_ok = info->sig_ok;
2725 if (!mod->sig_ok) {
2726 pr_notice_once("%s: module verification failed: signature "
2727 "and/or required key missing - tainting "
2728 "kernel\n", mod->name);
2729 add_taint_module(mod, TAINT_UNSIGNED_MODULE, LOCKDEP_STILL_OK);
2730 }
2731#endif
2732
2733 /* To avoid stressing percpu allocator, do this once we're unique. */
2734 err = percpu_modalloc(mod, info);
2735 if (err)
2736 goto unlink_mod;
2737
2738 /* Now module is in final location, initialize linked lists, etc. */
2739 err = module_unload_init(mod);
2740 if (err)
2741 goto unlink_mod;
2742
2743 init_param_lock(mod);
2744
2745 /*
2746 * Now we've got everything in the final locations, we can
2747 * find optional sections.
2748 */
2749 err = find_module_sections(mod, info);
2750 if (err)
2751 goto free_unload;
2752
2753 err = check_module_license_and_versions(mod);
2754 if (err)
2755 goto free_unload;
2756
2757 /* Set up MODINFO_ATTR fields */
2758 setup_modinfo(mod, info);
2759
2760 /* Fix up syms, so that st_value is a pointer to location. */
2761 err = simplify_symbols(mod, info);
2762 if (err < 0)
2763 goto free_modinfo;
2764
2765 err = apply_relocations(mod, info);
2766 if (err < 0)
2767 goto free_modinfo;
2768
2769 err = post_relocation(mod, info);
2770 if (err < 0)
2771 goto free_modinfo;
2772
2773 flush_module_icache(mod);
2774
2775 /* Setup CFI for the module. */
2776 cfi_init(mod);
2777
2778 /* Now copy in args */
2779 mod->args = strndup_user(uargs, ~0UL >> 1);
2780 if (IS_ERR(mod->args)) {
2781 err = PTR_ERR(mod->args);
2782 goto free_arch_cleanup;
2783 }
2784
2785 init_build_id(mod, info);
2786 dynamic_debug_setup(mod, info->debug, info->num_debug);
2787
2788 /* Ftrace init must be called in the MODULE_STATE_UNFORMED state */
2789 ftrace_module_init(mod);
2790
2791 /* Finally it's fully formed, ready to start executing. */
2792 err = complete_formation(mod, info);
2793 if (err)
2794 goto ddebug_cleanup;
2795
2796 err = prepare_coming_module(mod);
2797 if (err)
2798 goto bug_cleanup;
2799
2800 /* Module is ready to execute: parsing args may do that. */
2801 after_dashes = parse_args(mod->name, mod->args, mod->kp, mod->num_kp,
2802 -32768, 32767, mod,
2803 unknown_module_param_cb);
2804 if (IS_ERR(after_dashes)) {
2805 err = PTR_ERR(after_dashes);
2806 goto coming_cleanup;
2807 } else if (after_dashes) {
2808 pr_warn("%s: parameters '%s' after `--' ignored\n",
2809 mod->name, after_dashes);
2810 }
2811
2812 /* Link in to sysfs. */
2813 err = mod_sysfs_setup(mod, info, mod->kp, mod->num_kp);
2814 if (err < 0)
2815 goto coming_cleanup;
2816
2817 if (is_livepatch_module(mod)) {
2818 err = copy_module_elf(mod, info);
2819 if (err < 0)
2820 goto sysfs_cleanup;
2821 }
2822
2823 /* Get rid of temporary copy. */
2824 free_copy(info, flags);
2825
2826 /* Done! */
2827 trace_module_load(mod);
2828
2829 return do_init_module(mod);
2830
2831 sysfs_cleanup:
2832 mod_sysfs_teardown(mod);
2833 coming_cleanup:
2834 mod->state = MODULE_STATE_GOING;
2835 destroy_params(mod->kp, mod->num_kp);
2836 blocking_notifier_call_chain(&module_notify_list,
2837 MODULE_STATE_GOING, mod);
2838 klp_module_going(mod);
2839 bug_cleanup:
2840 mod->state = MODULE_STATE_GOING;
2841 /* module_bug_cleanup needs module_mutex protection */
2842 mutex_lock(&module_mutex);
2843 module_bug_cleanup(mod);
2844 mutex_unlock(&module_mutex);
2845
2846 ddebug_cleanup:
2847 ftrace_release_mod(mod);
2848 dynamic_debug_remove(mod, info->debug);
2849 synchronize_rcu();
2850 kfree(mod->args);
2851 free_arch_cleanup:
2852 cfi_cleanup(mod);
2853 module_arch_cleanup(mod);
2854 free_modinfo:
2855 free_modinfo(mod);
2856 free_unload:
2857 module_unload_free(mod);
2858 unlink_mod:
2859 mutex_lock(&module_mutex);
2860 /* Unlink carefully: kallsyms could be walking list. */
2861 list_del_rcu(&mod->list);
2862 mod_tree_remove(mod);
2863 wake_up_all(&module_wq);
2864 /* Wait for RCU-sched synchronizing before releasing mod->list. */
2865 synchronize_rcu();
2866 mutex_unlock(&module_mutex);
2867 free_module:
2868 /* Free lock-classes; relies on the preceding sync_rcu() */
2869 lockdep_free_key_range(mod->data_layout.base, mod->data_layout.size);
2870
2871 module_deallocate(mod, info);
2872 free_copy:
2873 free_copy(info, flags);
2874 return err;
2875}
2876
2877SYSCALL_DEFINE3(init_module, void __user *, umod,
2878 unsigned long, len, const char __user *, uargs)
2879{
2880 int err;
2881 struct load_info info = { };
2882
2883 err = may_init_module();
2884 if (err)
2885 return err;
2886
2887 pr_debug("init_module: umod=%p, len=%lu, uargs=%p\n",
2888 umod, len, uargs);
2889
2890 err = copy_module_from_user(umod, len, &info);
2891 if (err)
2892 return err;
2893
2894 return load_module(&info, uargs, 0);
2895}
2896
2897SYSCALL_DEFINE3(finit_module, int, fd, const char __user *, uargs, int, flags)
2898{
2899 struct load_info info = { };
2900 void *buf = NULL;
2901 int len;
2902 int err;
2903
2904 err = may_init_module();
2905 if (err)
2906 return err;
2907
2908 pr_debug("finit_module: fd=%d, uargs=%p, flags=%i\n", fd, uargs, flags);
2909
2910 if (flags & ~(MODULE_INIT_IGNORE_MODVERSIONS
2911 |MODULE_INIT_IGNORE_VERMAGIC
2912 |MODULE_INIT_COMPRESSED_FILE))
2913 return -EINVAL;
2914
2915 len = kernel_read_file_from_fd(fd, 0, &buf, INT_MAX, NULL,
2916 READING_MODULE);
2917 if (len < 0)
2918 return len;
2919
2920 if (flags & MODULE_INIT_COMPRESSED_FILE) {
2921 err = module_decompress(&info, buf, len);
2922 vfree(buf); /* compressed data is no longer needed */
2923 if (err)
2924 return err;
2925 } else {
2926 info.hdr = buf;
2927 info.len = len;
2928 }
2929
2930 return load_module(&info, uargs, flags);
2931}
2932
2933static inline int within(unsigned long addr, void *start, unsigned long size)
2934{
2935 return ((void *)addr >= start && (void *)addr < start + size);
2936}
2937
2938static void cfi_init(struct module *mod)
2939{
2940#ifdef CONFIG_CFI_CLANG
2941 initcall_t *init;
2942 exitcall_t *exit;
2943
2944 rcu_read_lock_sched();
2945 mod->cfi_check = (cfi_check_fn)
2946 find_kallsyms_symbol_value(mod, "__cfi_check");
2947 init = (initcall_t *)
2948 find_kallsyms_symbol_value(mod, "__cfi_jt_init_module");
2949 exit = (exitcall_t *)
2950 find_kallsyms_symbol_value(mod, "__cfi_jt_cleanup_module");
2951 rcu_read_unlock_sched();
2952
2953 /* Fix init/exit functions to point to the CFI jump table */
2954 if (init)
2955 mod->init = *init;
2956#ifdef CONFIG_MODULE_UNLOAD
2957 if (exit)
2958 mod->exit = *exit;
2959#endif
2960
2961 cfi_module_add(mod, mod_tree.addr_min);
2962#endif
2963}
2964
2965static void cfi_cleanup(struct module *mod)
2966{
2967#ifdef CONFIG_CFI_CLANG
2968 cfi_module_remove(mod, mod_tree.addr_min);
2969#endif
2970}
2971
2972/* Keep in sync with MODULE_FLAGS_BUF_SIZE !!! */
2973char *module_flags(struct module *mod, char *buf)
2974{
2975 int bx = 0;
2976
2977 BUG_ON(mod->state == MODULE_STATE_UNFORMED);
2978 if (mod->taints ||
2979 mod->state == MODULE_STATE_GOING ||
2980 mod->state == MODULE_STATE_COMING) {
2981 buf[bx++] = '(';
2982 bx += module_flags_taint(mod->taints, buf + bx);
2983 /* Show a - for module-is-being-unloaded */
2984 if (mod->state == MODULE_STATE_GOING)
2985 buf[bx++] = '-';
2986 /* Show a + for module-is-being-loaded */
2987 if (mod->state == MODULE_STATE_COMING)
2988 buf[bx++] = '+';
2989 buf[bx++] = ')';
2990 }
2991 buf[bx] = '\0';
2992
2993 return buf;
2994}
2995
2996/* Given an address, look for it in the module exception tables. */
2997const struct exception_table_entry *search_module_extables(unsigned long addr)
2998{
2999 const struct exception_table_entry *e = NULL;
3000 struct module *mod;
3001
3002 preempt_disable();
3003 mod = __module_address(addr);
3004 if (!mod)
3005 goto out;
3006
3007 if (!mod->num_exentries)
3008 goto out;
3009
3010 e = search_extable(mod->extable,
3011 mod->num_exentries,
3012 addr);
3013out:
3014 preempt_enable();
3015
3016 /*
3017 * Now, if we found one, we are running inside it now, hence
3018 * we cannot unload the module, hence no refcnt needed.
3019 */
3020 return e;
3021}
3022
3023/**
3024 * is_module_address() - is this address inside a module?
3025 * @addr: the address to check.
3026 *
3027 * See is_module_text_address() if you simply want to see if the address
3028 * is code (not data).
3029 */
3030bool is_module_address(unsigned long addr)
3031{
3032 bool ret;
3033
3034 preempt_disable();
3035 ret = __module_address(addr) != NULL;
3036 preempt_enable();
3037
3038 return ret;
3039}
3040
3041/**
3042 * __module_address() - get the module which contains an address.
3043 * @addr: the address.
3044 *
3045 * Must be called with preempt disabled or module mutex held so that
3046 * module doesn't get freed during this.
3047 */
3048struct module *__module_address(unsigned long addr)
3049{
3050 struct module *mod;
3051 struct mod_tree_root *tree;
3052
3053 if (addr >= mod_tree.addr_min && addr <= mod_tree.addr_max)
3054 tree = &mod_tree;
3055#ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
3056 else if (addr >= mod_data_tree.addr_min && addr <= mod_data_tree.addr_max)
3057 tree = &mod_data_tree;
3058#endif
3059 else
3060 return NULL;
3061
3062 module_assert_mutex_or_preempt();
3063
3064 mod = mod_find(addr, tree);
3065 if (mod) {
3066 BUG_ON(!within_module(addr, mod));
3067 if (mod->state == MODULE_STATE_UNFORMED)
3068 mod = NULL;
3069 }
3070 return mod;
3071}
3072
3073/**
3074 * is_module_text_address() - is this address inside module code?
3075 * @addr: the address to check.
3076 *
3077 * See is_module_address() if you simply want to see if the address is
3078 * anywhere in a module. See kernel_text_address() for testing if an
3079 * address corresponds to kernel or module code.
3080 */
3081bool is_module_text_address(unsigned long addr)
3082{
3083 bool ret;
3084
3085 preempt_disable();
3086 ret = __module_text_address(addr) != NULL;
3087 preempt_enable();
3088
3089 return ret;
3090}
3091
3092/**
3093 * __module_text_address() - get the module whose code contains an address.
3094 * @addr: the address.
3095 *
3096 * Must be called with preempt disabled or module mutex held so that
3097 * module doesn't get freed during this.
3098 */
3099struct module *__module_text_address(unsigned long addr)
3100{
3101 struct module *mod = __module_address(addr);
3102 if (mod) {
3103 /* Make sure it's within the text section. */
3104 if (!within(addr, mod->init_layout.base, mod->init_layout.text_size)
3105 && !within(addr, mod->core_layout.base, mod->core_layout.text_size))
3106 mod = NULL;
3107 }
3108 return mod;
3109}
3110
3111/* Don't grab lock, we're oopsing. */
3112void print_modules(void)
3113{
3114 struct module *mod;
3115 char buf[MODULE_FLAGS_BUF_SIZE];
3116
3117 printk(KERN_DEFAULT "Modules linked in:");
3118 /* Most callers should already have preempt disabled, but make sure */
3119 preempt_disable();
3120 list_for_each_entry_rcu(mod, &modules, list) {
3121 if (mod->state == MODULE_STATE_UNFORMED)
3122 continue;
3123 pr_cont(" %s%s", mod->name, module_flags(mod, buf));
3124 }
3125
3126 print_unloaded_tainted_modules();
3127 preempt_enable();
3128 if (last_unloaded_module[0])
3129 pr_cont(" [last unloaded: %s]", last_unloaded_module);
3130 pr_cont("\n");
3131}
kernel/module/procfs.c+146−0
@@ -0,0 +1,146 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Module proc support
4 *
5 * Copyright (C) 2008 Alexey Dobriyan
6 */
7
8#include <linux/module.h>
9#include <linux/kallsyms.h>
10#include <linux/mutex.h>
11#include <linux/seq_file.h>
12#include <linux/proc_fs.h>
13#include "internal.h"
14
15#ifdef CONFIG_MODULE_UNLOAD
16static inline void print_unload_info(struct seq_file *m, struct module *mod)
17{
18 struct module_use *use;
19 int printed_something = 0;
20
21 seq_printf(m, " %i ", module_refcount(mod));
22
23 /*
24 * Always include a trailing , so userspace can differentiate
25 * between this and the old multi-field proc format.
26 */
27 list_for_each_entry(use, &mod->source_list, source_list) {
28 printed_something = 1;
29 seq_printf(m, "%s,", use->source->name);
30 }
31
32 if (mod->init && !mod->exit) {
33 printed_something = 1;
34 seq_puts(m, "[permanent],");
35 }
36
37 if (!printed_something)
38 seq_puts(m, "-");
39}
40#else /* !CONFIG_MODULE_UNLOAD */
41static inline void print_unload_info(struct seq_file *m, struct module *mod)
42{
43 /* We don't know the usage count, or what modules are using. */
44 seq_puts(m, " - -");
45}
46#endif /* CONFIG_MODULE_UNLOAD */
47
48/* Called by the /proc file system to return a list of modules. */
49static void *m_start(struct seq_file *m, loff_t *pos)
50{
51 mutex_lock(&module_mutex);
52 return seq_list_start(&modules, *pos);
53}
54
55static void *m_next(struct seq_file *m, void *p, loff_t *pos)
56{
57 return seq_list_next(p, &modules, pos);
58}
59
60static void m_stop(struct seq_file *m, void *p)
61{
62 mutex_unlock(&module_mutex);
63}
64
65static int m_show(struct seq_file *m, void *p)
66{
67 struct module *mod = list_entry(p, struct module, list);
68 char buf[MODULE_FLAGS_BUF_SIZE];
69 void *value;
70 unsigned int size;
71
72 /* We always ignore unformed modules. */
73 if (mod->state == MODULE_STATE_UNFORMED)
74 return 0;
75
76 size = mod->init_layout.size + mod->core_layout.size;
77#ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
78 size += mod->data_layout.size;
79#endif
80 seq_printf(m, "%s %u", mod->name, size);
81 print_unload_info(m, mod);
82
83 /* Informative for users. */
84 seq_printf(m, " %s",
85 mod->state == MODULE_STATE_GOING ? "Unloading" :
86 mod->state == MODULE_STATE_COMING ? "Loading" :
87 "Live");
88 /* Used by oprofile and other similar tools. */
89 value = m->private ? NULL : mod->core_layout.base;
90 seq_printf(m, " 0x%px", value);
91
92 /* Taints info */
93 if (mod->taints)
94 seq_printf(m, " %s", module_flags(mod, buf));
95
96 seq_puts(m, "\n");
97 return 0;
98}
99
100/*
101 * Format: modulename size refcount deps address
102 *
103 * Where refcount is a number or -, and deps is a comma-separated list
104 * of depends or -.
105 */
106static const struct seq_operations modules_op = {
107 .start = m_start,
108 .next = m_next,
109 .stop = m_stop,
110 .show = m_show
111};
112
113/*
114 * This also sets the "private" pointer to non-NULL if the
115 * kernel pointers should be hidden (so you can just test
116 * "m->private" to see if you should keep the values private).
117 *
118 * We use the same logic as for /proc/kallsyms.
119 */
120static int modules_open(struct inode *inode, struct file *file)
121{
122 int err = seq_open(file, &modules_op);
123
124 if (!err) {
125 struct seq_file *m = file->private_data;
126
127 m->private = kallsyms_show_value(file->f_cred) ? NULL : (void *)8ul;
128 }
129
130 return err;
131}
132
133static const struct proc_ops modules_proc_ops = {
134 .proc_flags = PROC_ENTRY_PERMANENT,
135 .proc_open = modules_open,
136 .proc_read = seq_read,
137 .proc_lseek = seq_lseek,
138 .proc_release = seq_release,
139};
140
141static int __init proc_modules_init(void)
142{
143 proc_create("modules", 0, NULL, &modules_proc_ops);
144 return 0;
145}
146module_init(proc_modules_init);
kernel/module/signing.c+122−0
@@ -0,0 +1,122 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
2/* Module signature checker
3 *
4 * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved.
5 * Written by David Howells (dhowells@redhat.com)
6 */
7
8#include <linux/kernel.h>
9#include <linux/errno.h>
10#include <linux/module.h>
11#include <linux/module_signature.h>
12#include <linux/string.h>
13#include <linux/verification.h>
14#include <linux/security.h>
15#include <crypto/public_key.h>
16#include <uapi/linux/module.h>
17#include "internal.h"
18
19static bool sig_enforce = IS_ENABLED(CONFIG_MODULE_SIG_FORCE);
20module_param(sig_enforce, bool_enable_only, 0644);
21
22/*
23 * Export sig_enforce kernel cmdline parameter to allow other subsystems rely
24 * on that instead of directly to CONFIG_MODULE_SIG_FORCE config.
25 */
26bool is_module_sig_enforced(void)
27{
28 return sig_enforce;
29}
30EXPORT_SYMBOL(is_module_sig_enforced);
31
32void set_module_sig_enforced(void)
33{
34 sig_enforce = true;
35}
36
37/*
38 * Verify the signature on a module.
39 */
40int mod_verify_sig(const void *mod, struct load_info *info)
41{
42 struct module_signature ms;
43 size_t sig_len, modlen = info->len;
44 int ret;
45
46 pr_devel("==>%s(,%zu)\n", __func__, modlen);
47
48 if (modlen <= sizeof(ms))
49 return -EBADMSG;
50
51 memcpy(&ms, mod + (modlen - sizeof(ms)), sizeof(ms));
52
53 ret = mod_check_sig(&ms, modlen, "module");
54 if (ret)
55 return ret;
56
57 sig_len = be32_to_cpu(ms.sig_len);
58 modlen -= sig_len + sizeof(ms);
59 info->len = modlen;
60
61 return verify_pkcs7_signature(mod, modlen, mod + modlen, sig_len,
62 VERIFY_USE_SECONDARY_KEYRING,
63 VERIFYING_MODULE_SIGNATURE,
64 NULL, NULL);
65}
66
67int module_sig_check(struct load_info *info, int flags)
68{
69 int err = -ENODATA;
70 const unsigned long markerlen = sizeof(MODULE_SIG_STRING) - 1;
71 const char *reason;
72 const void *mod = info->hdr;
73 bool mangled_module = flags & (MODULE_INIT_IGNORE_MODVERSIONS |
74 MODULE_INIT_IGNORE_VERMAGIC);
75 /*
76 * Do not allow mangled modules as a module with version information
77 * removed is no longer the module that was signed.
78 */
79 if (!mangled_module &&
80 info->len > markerlen &&
81 memcmp(mod + info->len - markerlen, MODULE_SIG_STRING, markerlen) == 0) {
82 /* We truncate the module to discard the signature */
83 info->len -= markerlen;
84 err = mod_verify_sig(mod, info);
85 if (!err) {
86 info->sig_ok = true;
87 return 0;
88 }
89 }
90
91 /*
92 * We don't permit modules to be loaded into the trusted kernels
93 * without a valid signature on them, but if we're not enforcing,
94 * certain errors are non-fatal.
95 */
96 switch (err) {
97 case -ENODATA:
98 reason = "unsigned module";
99 break;
100 case -ENOPKG:
101 reason = "module with unsupported crypto";
102 break;
103 case -ENOKEY:
104 reason = "module with unavailable key";
105 break;
106
107 default:
108 /*
109 * All other errors are fatal, including lack of memory,
110 * unparseable signatures, and signature check failures --
111 * even if signatures aren't required.
112 */
113 return err;
114 }
115
116 if (is_module_sig_enforced()) {
117 pr_notice("Loading of %s is rejected\n", reason);
118 return -EKEYREJECTED;
119 }
120
121 return security_locked_down(LOCKDOWN_MODULE_SIGNATURE);
122}
kernel/module/strict_rwx.c+143−0
@@ -0,0 +1,143 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Module strict rwx
4 *
5 * Copyright (C) 2015 Rusty Russell
6 */
7
8#include <linux/module.h>
9#include <linux/mm.h>
10#include <linux/vmalloc.h>
11#include <linux/set_memory.h>
12#include "internal.h"
13
14/*
15 * LKM RO/NX protection: protect module's text/ro-data
16 * from modification and any data from execution.
17 *
18 * General layout of module is:
19 * [text] [read-only-data] [ro-after-init] [writable data]
20 * text_size -----^ ^ ^ ^
21 * ro_size ------------------------| | |
22 * ro_after_init_size -----------------------------| |
23 * size -----------------------------------------------------------|
24 *
25 * These values are always page-aligned (as is base) when
26 * CONFIG_STRICT_MODULE_RWX is set.
27 */
28
29/*
30 * Since some arches are moving towards PAGE_KERNEL module allocations instead
31 * of PAGE_KERNEL_EXEC, keep frob_text() and module_enable_x() independent of
32 * CONFIG_STRICT_MODULE_RWX because they are needed regardless of whether we
33 * are strict.
34 */
35static void frob_text(const struct module_layout *layout,
36 int (*set_memory)(unsigned long start, int num_pages))
37{
38 set_memory((unsigned long)layout->base,
39 PAGE_ALIGN(layout->text_size) >> PAGE_SHIFT);
40}
41
42static void frob_rodata(const struct module_layout *layout,
43 int (*set_memory)(unsigned long start, int num_pages))
44{
45 set_memory((unsigned long)layout->base + layout->text_size,
46 (layout->ro_size - layout->text_size) >> PAGE_SHIFT);
47}
48
49static void frob_ro_after_init(const struct module_layout *layout,
50 int (*set_memory)(unsigned long start, int num_pages))
51{
52 set_memory((unsigned long)layout->base + layout->ro_size,
53 (layout->ro_after_init_size - layout->ro_size) >> PAGE_SHIFT);
54}
55
56static void frob_writable_data(const struct module_layout *layout,
57 int (*set_memory)(unsigned long start, int num_pages))
58{
59 set_memory((unsigned long)layout->base + layout->ro_after_init_size,
60 (layout->size - layout->ro_after_init_size) >> PAGE_SHIFT);
61}
62
63static bool layout_check_misalignment(const struct module_layout *layout)
64{
65 return WARN_ON(!PAGE_ALIGNED(layout->base)) ||
66 WARN_ON(!PAGE_ALIGNED(layout->text_size)) ||
67 WARN_ON(!PAGE_ALIGNED(layout->ro_size)) ||
68 WARN_ON(!PAGE_ALIGNED(layout->ro_after_init_size)) ||
69 WARN_ON(!PAGE_ALIGNED(layout->size));
70}
71
72bool module_check_misalignment(const struct module *mod)
73{
74 if (!IS_ENABLED(CONFIG_STRICT_MODULE_RWX))
75 return false;
76
77 return layout_check_misalignment(&mod->core_layout) ||
78 layout_check_misalignment(&mod->data_layout) ||
79 layout_check_misalignment(&mod->init_layout);
80}
81
82void module_enable_x(const struct module *mod)
83{
84 if (!PAGE_ALIGNED(mod->core_layout.base) ||
85 !PAGE_ALIGNED(mod->init_layout.base))
86 return;
87
88 frob_text(&mod->core_layout, set_memory_x);
89 frob_text(&mod->init_layout, set_memory_x);
90}
91
92void module_enable_ro(const struct module *mod, bool after_init)
93{
94 if (!IS_ENABLED(CONFIG_STRICT_MODULE_RWX))
95 return;
96#ifdef CONFIG_STRICT_MODULE_RWX
97 if (!rodata_enabled)
98 return;
99#endif
100
101 set_vm_flush_reset_perms(mod->core_layout.base);
102 set_vm_flush_reset_perms(mod->init_layout.base);
103 frob_text(&mod->core_layout, set_memory_ro);
104
105 frob_rodata(&mod->data_layout, set_memory_ro);
106 frob_text(&mod->init_layout, set_memory_ro);
107 frob_rodata(&mod->init_layout, set_memory_ro);
108
109 if (after_init)
110 frob_ro_after_init(&mod->data_layout, set_memory_ro);
111}
112
113void module_enable_nx(const struct module *mod)
114{
115 if (!IS_ENABLED(CONFIG_STRICT_MODULE_RWX))
116 return;
117
118 frob_rodata(&mod->data_layout, set_memory_nx);
119 frob_ro_after_init(&mod->data_layout, set_memory_nx);
120 frob_writable_data(&mod->data_layout, set_memory_nx);
121 frob_rodata(&mod->init_layout, set_memory_nx);
122 frob_writable_data(&mod->init_layout, set_memory_nx);
123}
124
125int module_enforce_rwx_sections(Elf_Ehdr *hdr, Elf_Shdr *sechdrs,
126 char *secstrings, struct module *mod)
127{
128 const unsigned long shf_wx = SHF_WRITE | SHF_EXECINSTR;
129 int i;
130
131 if (!IS_ENABLED(CONFIG_STRICT_MODULE_RWX))
132 return 0;
133
134 for (i = 0; i < hdr->e_shnum; i++) {
135 if ((sechdrs[i].sh_flags & shf_wx) == shf_wx) {
136 pr_err("%s: section %s (index %d) has invalid WRITE|EXEC flags\n",
137 mod->name, secstrings + sechdrs[i].sh_name, i);
138 return -ENOEXEC;
139 }
140 }
141
142 return 0;
143}
kernel/module/sysfs.c+436−0
@@ -0,0 +1,436 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Module sysfs support
4 *
5 * Copyright (C) 2008 Rusty Russell
6 */
7
8#include <linux/module.h>
9#include <linux/kernel.h>
10#include <linux/fs.h>
11#include <linux/sysfs.h>
12#include <linux/slab.h>
13#include <linux/kallsyms.h>
14#include <linux/mutex.h>
15#include "internal.h"
16
17/*
18 * /sys/module/foo/sections stuff
19 * J. Corbet <corbet@lwn.net>
20 */
21#ifdef CONFIG_KALLSYMS
22struct module_sect_attr {
23 struct bin_attribute battr;
24 unsigned long address;
25};
26
27struct module_sect_attrs {
28 struct attribute_group grp;
29 unsigned int nsections;
30 struct module_sect_attr attrs[];
31};
32
33#define MODULE_SECT_READ_SIZE (3 /* "0x", "\n" */ + (BITS_PER_LONG / 4))
34static ssize_t module_sect_read(struct file *file, struct kobject *kobj,
35 struct bin_attribute *battr,
36 char *buf, loff_t pos, size_t count)
37{
38 struct module_sect_attr *sattr =
39 container_of(battr, struct module_sect_attr, battr);
40 char bounce[MODULE_SECT_READ_SIZE + 1];
41 size_t wrote;
42
43 if (pos != 0)
44 return -EINVAL;
45
46 /*
47 * Since we're a binary read handler, we must account for the
48 * trailing NUL byte that sprintf will write: if "buf" is
49 * too small to hold the NUL, or the NUL is exactly the last
50 * byte, the read will look like it got truncated by one byte.
51 * Since there is no way to ask sprintf nicely to not write
52 * the NUL, we have to use a bounce buffer.
53 */
54 wrote = scnprintf(bounce, sizeof(bounce), "0x%px\n",
55 kallsyms_show_value(file->f_cred)
56 ? (void *)sattr->address : NULL);
57 count = min(count, wrote);
58 memcpy(buf, bounce, count);
59
60 return count;
61}
62
63static void free_sect_attrs(struct module_sect_attrs *sect_attrs)
64{
65 unsigned int section;
66
67 for (section = 0; section < sect_attrs->nsections; section++)
68 kfree(sect_attrs->attrs[section].battr.attr.name);
69 kfree(sect_attrs);
70}
71
72static void add_sect_attrs(struct module *mod, const struct load_info *info)
73{
74 unsigned int nloaded = 0, i, size[2];
75 struct module_sect_attrs *sect_attrs;
76 struct module_sect_attr *sattr;
77 struct bin_attribute **gattr;
78
79 /* Count loaded sections and allocate structures */
80 for (i = 0; i < info->hdr->e_shnum; i++)
81 if (!sect_empty(&info->sechdrs[i]))
82 nloaded++;
83 size[0] = ALIGN(struct_size(sect_attrs, attrs, nloaded),
84 sizeof(sect_attrs->grp.bin_attrs[0]));
85 size[1] = (nloaded + 1) * sizeof(sect_attrs->grp.bin_attrs[0]);
86 sect_attrs = kzalloc(size[0] + size[1], GFP_KERNEL);
87 if (!sect_attrs)
88 return;
89
90 /* Setup section attributes. */
91 sect_attrs->grp.name = "sections";
92 sect_attrs->grp.bin_attrs = (void *)sect_attrs + size[0];
93
94 sect_attrs->nsections = 0;
95 sattr = &sect_attrs->attrs[0];
96 gattr = &sect_attrs->grp.bin_attrs[0];
97 for (i = 0; i < info->hdr->e_shnum; i++) {
98 Elf_Shdr *sec = &info->sechdrs[i];
99
100 if (sect_empty(sec))
101 continue;
102 sysfs_bin_attr_init(&sattr->battr);
103 sattr->address = sec->sh_addr;
104 sattr->battr.attr.name =
105 kstrdup(info->secstrings + sec->sh_name, GFP_KERNEL);
106 if (!sattr->battr.attr.name)
107 goto out;
108 sect_attrs->nsections++;
109 sattr->battr.read = module_sect_read;
110 sattr->battr.size = MODULE_SECT_READ_SIZE;
111 sattr->battr.attr.mode = 0400;
112 *(gattr++) = &(sattr++)->battr;
113 }
114 *gattr = NULL;
115
116 if (sysfs_create_group(&mod->mkobj.kobj, &sect_attrs->grp))
117 goto out;
118
119 mod->sect_attrs = sect_attrs;
120 return;
121out:
122 free_sect_attrs(sect_attrs);
123}
124
125static void remove_sect_attrs(struct module *mod)
126{
127 if (mod->sect_attrs) {
128 sysfs_remove_group(&mod->mkobj.kobj,
129 &mod->sect_attrs->grp);
130 /*
131 * We are positive that no one is using any sect attrs
132 * at this point. Deallocate immediately.
133 */
134 free_sect_attrs(mod->sect_attrs);
135 mod->sect_attrs = NULL;
136 }
137}
138
139/*
140 * /sys/module/foo/notes/.section.name gives contents of SHT_NOTE sections.
141 */
142
143struct module_notes_attrs {
144 struct kobject *dir;
145 unsigned int notes;
146 struct bin_attribute attrs[];
147};
148
149static ssize_t module_notes_read(struct file *filp, struct kobject *kobj,
150 struct bin_attribute *bin_attr,
151 char *buf, loff_t pos, size_t count)
152{
153 /*
154 * The caller checked the pos and count against our size.
155 */
156 memcpy(buf, bin_attr->private + pos, count);
157 return count;
158}
159
160static void free_notes_attrs(struct module_notes_attrs *notes_attrs,
161 unsigned int i)
162{
163 if (notes_attrs->dir) {
164 while (i-- > 0)
165 sysfs_remove_bin_file(notes_attrs->dir,
166 &notes_attrs->attrs[i]);
167 kobject_put(notes_attrs->dir);
168 }
169 kfree(notes_attrs);
170}
171
172static void add_notes_attrs(struct module *mod, const struct load_info *info)
173{
174 unsigned int notes, loaded, i;
175 struct module_notes_attrs *notes_attrs;
176 struct bin_attribute *nattr;
177
178 /* failed to create section attributes, so can't create notes */
179 if (!mod->sect_attrs)
180 return;
181
182 /* Count notes sections and allocate structures. */
183 notes = 0;
184 for (i = 0; i < info->hdr->e_shnum; i++)
185 if (!sect_empty(&info->sechdrs[i]) &&
186 info->sechdrs[i].sh_type == SHT_NOTE)
187 ++notes;
188
189 if (notes == 0)
190 return;
191
192 notes_attrs = kzalloc(struct_size(notes_attrs, attrs, notes),
193 GFP_KERNEL);
194 if (!notes_attrs)
195 return;
196
197 notes_attrs->notes = notes;
198 nattr = &notes_attrs->attrs[0];
199 for (loaded = i = 0; i < info->hdr->e_shnum; ++i) {
200 if (sect_empty(&info->sechdrs[i]))
201 continue;
202 if (info->sechdrs[i].sh_type == SHT_NOTE) {
203 sysfs_bin_attr_init(nattr);
204 nattr->attr.name = mod->sect_attrs->attrs[loaded].battr.attr.name;
205 nattr->attr.mode = 0444;
206 nattr->size = info->sechdrs[i].sh_size;
207 nattr->private = (void *)info->sechdrs[i].sh_addr;
208 nattr->read = module_notes_read;
209 ++nattr;
210 }
211 ++loaded;
212 }
213
214 notes_attrs->dir = kobject_create_and_add("notes", &mod->mkobj.kobj);
215 if (!notes_attrs->dir)
216 goto out;
217
218 for (i = 0; i < notes; ++i)
219 if (sysfs_create_bin_file(notes_attrs->dir,
220 &notes_attrs->attrs[i]))
221 goto out;
222
223 mod->notes_attrs = notes_attrs;
224 return;
225
226out:
227 free_notes_attrs(notes_attrs, i);
228}
229
230static void remove_notes_attrs(struct module *mod)
231{
232 if (mod->notes_attrs)
233 free_notes_attrs(mod->notes_attrs, mod->notes_attrs->notes);
234}
235
236#else /* !CONFIG_KALLSYMS */
237static inline void add_sect_attrs(struct module *mod, const struct load_info *info) { }
238static inline void remove_sect_attrs(struct module *mod) { }
239static inline void add_notes_attrs(struct module *mod, const struct load_info *info) { }
240static inline void remove_notes_attrs(struct module *mod) { }
241#endif /* CONFIG_KALLSYMS */
242
243static void del_usage_links(struct module *mod)
244{
245#ifdef CONFIG_MODULE_UNLOAD
246 struct module_use *use;
247
248 mutex_lock(&module_mutex);
249 list_for_each_entry(use, &mod->target_list, target_list)
250 sysfs_remove_link(use->target->holders_dir, mod->name);
251 mutex_unlock(&module_mutex);
252#endif
253}
254
255static int add_usage_links(struct module *mod)
256{
257 int ret = 0;
258#ifdef CONFIG_MODULE_UNLOAD
259 struct module_use *use;
260
261 mutex_lock(&module_mutex);
262 list_for_each_entry(use, &mod->target_list, target_list) {
263 ret = sysfs_create_link(use->target->holders_dir,
264 &mod->mkobj.kobj, mod->name);
265 if (ret)
266 break;
267 }
268 mutex_unlock(&module_mutex);
269 if (ret)
270 del_usage_links(mod);
271#endif
272 return ret;
273}
274
275static void module_remove_modinfo_attrs(struct module *mod, int end)
276{
277 struct module_attribute *attr;
278 int i;
279
280 for (i = 0; (attr = &mod->modinfo_attrs[i]); i++) {
281 if (end >= 0 && i > end)
282 break;
283 /* pick a field to test for end of list */
284 if (!attr->attr.name)
285 break;
286 sysfs_remove_file(&mod->mkobj.kobj, &attr->attr);
287 if (attr->free)
288 attr->free(mod);
289 }
290 kfree(mod->modinfo_attrs);
291}
292
293static int module_add_modinfo_attrs(struct module *mod)
294{
295 struct module_attribute *attr;
296 struct module_attribute *temp_attr;
297 int error = 0;
298 int i;
299
300 mod->modinfo_attrs = kzalloc((sizeof(struct module_attribute) *
301 (modinfo_attrs_count + 1)),
302 GFP_KERNEL);
303 if (!mod->modinfo_attrs)
304 return -ENOMEM;
305
306 temp_attr = mod->modinfo_attrs;
307 for (i = 0; (attr = modinfo_attrs[i]); i++) {
308 if (!attr->test || attr->test(mod)) {
309 memcpy(temp_attr, attr, sizeof(*temp_attr));
310 sysfs_attr_init(&temp_attr->attr);
311 error = sysfs_create_file(&mod->mkobj.kobj,
312 &temp_attr->attr);
313 if (error)
314 goto error_out;
315 ++temp_attr;
316 }
317 }
318
319 return 0;
320
321error_out:
322 if (i > 0)
323 module_remove_modinfo_attrs(mod, --i);
324 else
325 kfree(mod->modinfo_attrs);
326 return error;
327}
328
329static void mod_kobject_put(struct module *mod)
330{
331 DECLARE_COMPLETION_ONSTACK(c);
332
333 mod->mkobj.kobj_completion = &c;
334 kobject_put(&mod->mkobj.kobj);
335 wait_for_completion(&c);
336}
337
338static int mod_sysfs_init(struct module *mod)
339{
340 int err;
341 struct kobject *kobj;
342
343 if (!module_sysfs_initialized) {
344 pr_err("%s: module sysfs not initialized\n", mod->name);
345 err = -EINVAL;
346 goto out;
347 }
348
349 kobj = kset_find_obj(module_kset, mod->name);
350 if (kobj) {
351 pr_err("%s: module is already loaded\n", mod->name);
352 kobject_put(kobj);
353 err = -EINVAL;
354 goto out;
355 }
356
357 mod->mkobj.mod = mod;
358
359 memset(&mod->mkobj.kobj, 0, sizeof(mod->mkobj.kobj));
360 mod->mkobj.kobj.kset = module_kset;
361 err = kobject_init_and_add(&mod->mkobj.kobj, &module_ktype, NULL,
362 "%s", mod->name);
363 if (err)
364 mod_kobject_put(mod);
365
366out:
367 return err;
368}
369
370int mod_sysfs_setup(struct module *mod,
371 const struct load_info *info,
372 struct kernel_param *kparam,
373 unsigned int num_params)
374{
375 int err;
376
377 err = mod_sysfs_init(mod);
378 if (err)
379 goto out;
380
381 mod->holders_dir = kobject_create_and_add("holders", &mod->mkobj.kobj);
382 if (!mod->holders_dir) {
383 err = -ENOMEM;
384 goto out_unreg;
385 }
386
387 err = module_param_sysfs_setup(mod, kparam, num_params);
388 if (err)
389 goto out_unreg_holders;
390
391 err = module_add_modinfo_attrs(mod);
392 if (err)
393 goto out_unreg_param;
394
395 err = add_usage_links(mod);
396 if (err)
397 goto out_unreg_modinfo_attrs;
398
399 add_sect_attrs(mod, info);
400 add_notes_attrs(mod, info);
401
402 return 0;
403
404out_unreg_modinfo_attrs:
405 module_remove_modinfo_attrs(mod, -1);
406out_unreg_param:
407 module_param_sysfs_remove(mod);
408out_unreg_holders:
409 kobject_put(mod->holders_dir);
410out_unreg:
411 mod_kobject_put(mod);
412out:
413 return err;
414}
415
416static void mod_sysfs_fini(struct module *mod)
417{
418 remove_notes_attrs(mod);
419 remove_sect_attrs(mod);
420 mod_kobject_put(mod);
421}
422
423void mod_sysfs_teardown(struct module *mod)
424{
425 del_usage_links(mod);
426 module_remove_modinfo_attrs(mod, -1);
427 module_param_sysfs_remove(mod);
428 kobject_put(mod->mkobj.drivers_dir);
429 kobject_put(mod->holders_dir);
430 mod_sysfs_fini(mod);
431}
432
433void init_param_lock(struct module *mod)
434{
435 mutex_init(&mod->param_lock);
436}
kernel/module/tracking.c+61−0
@@ -0,0 +1,61 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Module taint unload tracking support
4 *
5 * Copyright (C) 2022 Aaron Tomlin
6 */
7
8#include <linux/module.h>
9#include <linux/string.h>
10#include <linux/printk.h>
11#include <linux/slab.h>
12#include <linux/list.h>
13#include <linux/rculist.h>
14#include "internal.h"
15
16static LIST_HEAD(unloaded_tainted_modules);
17
18int try_add_tainted_module(struct module *mod)
19{
20 struct mod_unload_taint *mod_taint;
21
22 module_assert_mutex_or_preempt();
23
24 list_for_each_entry_rcu(mod_taint, &unloaded_tainted_modules, list,
25 lockdep_is_held(&module_mutex)) {
26 if (!strcmp(mod_taint->name, mod->name) &&
27 mod_taint->taints & mod->taints) {
28 mod_taint->count++;
29 goto out;
30 }
31 }
32
33 mod_taint = kmalloc(sizeof(*mod_taint), GFP_KERNEL);
34 if (unlikely(!mod_taint))
35 return -ENOMEM;
36 strscpy(mod_taint->name, mod->name, MODULE_NAME_LEN);
37 mod_taint->taints = mod->taints;
38 list_add_rcu(&mod_taint->list, &unloaded_tainted_modules);
39 mod_taint->count = 1;
40out:
41 return 0;
42}
43
44void print_unloaded_tainted_modules(void)
45{
46 struct mod_unload_taint *mod_taint;
47 char buf[MODULE_FLAGS_BUF_SIZE];
48
49 if (!list_empty(&unloaded_tainted_modules)) {
50 printk(KERN_DEFAULT "Unloaded tainted modules:");
51 list_for_each_entry_rcu(mod_taint, &unloaded_tainted_modules,
52 list) {
53 size_t l;
54
55 l = module_flags_taint(mod_taint->taints, buf);
56 buf[l++] = '\0';
57 pr_cont(" %s(%s):%llu", mod_taint->name, buf,
58 mod_taint->count);
59 }
60 }
61}
kernel/module/tree_lookup.c+117−0
@@ -0,0 +1,117 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Modules tree lookup
4 *
5 * Copyright (C) 2015 Peter Zijlstra
6 * Copyright (C) 2015 Rusty Russell
7 */
8
9#include <linux/module.h>
10#include <linux/rbtree_latch.h>
11#include "internal.h"
12
13/*
14 * Use a latched RB-tree for __module_address(); this allows us to use
15 * RCU-sched lookups of the address from any context.
16 *
17 * This is conditional on PERF_EVENTS || TRACING because those can really hit
18 * __module_address() hard by doing a lot of stack unwinding; potentially from
19 * NMI context.
20 */
21
22static __always_inline unsigned long __mod_tree_val(struct latch_tree_node *n)
23{
24 struct module_layout *layout = container_of(n, struct module_layout, mtn.node);
25
26 return (unsigned long)layout->base;
27}
28
29static __always_inline unsigned long __mod_tree_size(struct latch_tree_node *n)
30{
31 struct module_layout *layout = container_of(n, struct module_layout, mtn.node);
32
33 return (unsigned long)layout->size;
34}
35
36static __always_inline bool
37mod_tree_less(struct latch_tree_node *a, struct latch_tree_node *b)
38{
39 return __mod_tree_val(a) < __mod_tree_val(b);
40}
41
42static __always_inline int
43mod_tree_comp(void *key, struct latch_tree_node *n)
44{
45 unsigned long val = (unsigned long)key;
46 unsigned long start, end;
47
48 start = __mod_tree_val(n);
49 if (val < start)
50 return -1;
51
52 end = start + __mod_tree_size(n);
53 if (val >= end)
54 return 1;
55
56 return 0;
57}
58
59static const struct latch_tree_ops mod_tree_ops = {
60 .less = mod_tree_less,
61 .comp = mod_tree_comp,
62};
63
64static noinline void __mod_tree_insert(struct mod_tree_node *node, struct mod_tree_root *tree)
65{
66 latch_tree_insert(&node->node, &tree->root, &mod_tree_ops);
67}
68
69static void __mod_tree_remove(struct mod_tree_node *node, struct mod_tree_root *tree)
70{
71 latch_tree_erase(&node->node, &tree->root, &mod_tree_ops);
72}
73
74/*
75 * These modifications: insert, remove_init and remove; are serialized by the
76 * module_mutex.
77 */
78void mod_tree_insert(struct module *mod)
79{
80 mod->core_layout.mtn.mod = mod;
81 mod->init_layout.mtn.mod = mod;
82
83 __mod_tree_insert(&mod->core_layout.mtn, &mod_tree);
84 if (mod->init_layout.size)
85 __mod_tree_insert(&mod->init_layout.mtn, &mod_tree);
86
87#ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
88 mod->data_layout.mtn.mod = mod;
89 __mod_tree_insert(&mod->data_layout.mtn, &mod_data_tree);
90#endif
91}
92
93void mod_tree_remove_init(struct module *mod)
94{
95 if (mod->init_layout.size)
96 __mod_tree_remove(&mod->init_layout.mtn, &mod_tree);
97}
98
99void mod_tree_remove(struct module *mod)
100{
101 __mod_tree_remove(&mod->core_layout.mtn, &mod_tree);
102 mod_tree_remove_init(mod);
103#ifdef CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC
104 __mod_tree_remove(&mod->data_layout.mtn, &mod_data_tree);
105#endif
106}
107
108struct module *mod_find(unsigned long addr, struct mod_tree_root *tree)
109{
110 struct latch_tree_node *ltn;
111
112 ltn = latch_tree_find((void *)addr, &tree->root, &mod_tree_ops);
113 if (!ltn)
114 return NULL;
115
116 return container_of(ltn, struct mod_tree_node, node)->mod;
117}
kernel/module/version.c+101−0
@@ -0,0 +1,101 @@
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Module version support
4 *
5 * Copyright (C) 2008 Rusty Russell
6 */
7
8#include <linux/module.h>
9#include <linux/string.h>
10#include <linux/printk.h>
11#include "internal.h"
12
13int check_version(const struct load_info *info,
14 const char *symname,
15 struct module *mod,
16 const s32 *crc)
17{
18 Elf_Shdr *sechdrs = info->sechdrs;
19 unsigned int versindex = info->index.vers;
20 unsigned int i, num_versions;
21 struct modversion_info *versions;
22
23 /* Exporting module didn't supply crcs? OK, we're already tainted. */
24 if (!crc)
25 return 1;
26
27 /* No versions at all? modprobe --force does this. */
28 if (versindex == 0)
29 return try_to_force_load(mod, symname) == 0;
30
31 versions = (void *)sechdrs[versindex].sh_addr;
32 num_versions = sechdrs[versindex].sh_size
33 / sizeof(struct modversion_info);
34
35 for (i = 0; i < num_versions; i++) {
36 u32 crcval;
37
38 if (strcmp(versions[i].name, symname) != 0)
39 continue;
40
41 crcval = *crc;
42 if (versions[i].crc == crcval)
43 return 1;
44 pr_debug("Found checksum %X vs module %lX\n",
45 crcval, versions[i].crc);
46 goto bad_version;
47 }
48
49 /* Broken toolchain. Warn once, then let it go.. */
50 pr_warn_once("%s: no symbol version for %s\n", info->name, symname);
51 return 1;
52
53bad_version:
54 pr_warn("%s: disagrees about version of symbol %s\n", info->name, symname);
55 return 0;
56}
57
58int check_modstruct_version(const struct load_info *info,
59 struct module *mod)
60{
61 struct find_symbol_arg fsa = {
62 .name = "module_layout",
63 .gplok = true,
64 };
65
66 /*
67 * Since this should be found in kernel (which can't be removed), no
68 * locking is necessary -- use preempt_disable() to placate lockdep.
69 */
70 preempt_disable();
71 if (!find_symbol(&fsa)) {
72 preempt_enable();
73 BUG();
74 }
75 preempt_enable();
76 return check_version(info, "module_layout", mod, fsa.crc);
77}
78
79/* First part is kernel version, which we ignore if module has crcs. */
80int same_magic(const char *amagic, const char *bmagic,
81 bool has_crcs)
82{
83 if (has_crcs) {
84 amagic += strcspn(amagic, " ");
85 bmagic += strcspn(bmagic, " ");
86 }
87 return strcmp(amagic, bmagic) == 0;
88}
89
90/*
91 * Generate the signature for all relevant module structures here.
92 * If these change, we don't want to try to parse the module.
93 */
94void module_layout(struct module *mod,
95 struct modversion_info *ver,
96 struct kernel_param *kp,
97 struct kernel_symbol *ks,
98 struct tracepoint * const *tp)
99{
100}
101EXPORT_SYMBOL(module_layout);

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t