1 |
commit: 7a7e6b22b7b5ed9528af9141b51b38c5e77449c4 |
2 |
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sat Apr 30 12:13:11 2016 +0000 |
4 |
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Apr 30 12:13:11 2016 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/hardened-patchset.git/commit/?id=7a7e6b22 |
7 |
|
8 |
grsecurity-3.1-4.5.2-201604290633 |
9 |
|
10 |
4.5.2/0000_README | 2 +- |
11 |
...> 4420_grsecurity-3.1-4.5.2-201604290633.patch} | 143 +++++++++++++-------- |
12 |
2 files changed, 90 insertions(+), 55 deletions(-) |
13 |
|
14 |
diff --git a/4.5.2/0000_README b/4.5.2/0000_README |
15 |
index 6857874..53f08f8 100644 |
16 |
--- a/4.5.2/0000_README |
17 |
+++ b/4.5.2/0000_README |
18 |
@@ -6,7 +6,7 @@ Patch: 1001_linux-4.5.2.patch |
19 |
From: http://www.kernel.org |
20 |
Desc: Linux 4.5.2 |
21 |
|
22 |
-Patch: 4420_grsecurity-3.1-4.5.2-201604282058.patch |
23 |
+Patch: 4420_grsecurity-3.1-4.5.2-201604290633.patch |
24 |
From: http://www.grsecurity.net |
25 |
Desc: hardened-sources base patch from upstream grsecurity |
26 |
|
27 |
|
28 |
diff --git a/4.5.2/4420_grsecurity-3.1-4.5.2-201604282058.patch b/4.5.2/4420_grsecurity-3.1-4.5.2-201604290633.patch |
29 |
similarity index 99% |
30 |
rename from 4.5.2/4420_grsecurity-3.1-4.5.2-201604282058.patch |
31 |
rename to 4.5.2/4420_grsecurity-3.1-4.5.2-201604290633.patch |
32 |
index 00a02a9..89fb9b5 100644 |
33 |
--- a/4.5.2/4420_grsecurity-3.1-4.5.2-201604282058.patch |
34 |
+++ b/4.5.2/4420_grsecurity-3.1-4.5.2-201604290633.patch |
35 |
@@ -15850,7 +15850,7 @@ index 1a4477c..0031513 100644 |
36 |
) { |
37 |
|
38 |
diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S |
39 |
-index bb3e376..567eb30 100644 |
40 |
+index bb3e376..c49752a 100644 |
41 |
--- a/arch/x86/entry/entry_32.S |
42 |
+++ b/arch/x86/entry/entry_32.S |
43 |
@@ -147,13 +147,157 @@ |
44 |
@@ -16231,7 +16231,7 @@ index bb3e376..567eb30 100644 |
45 |
|
46 |
ENTRY(simd_coprocessor_error) |
47 |
ASM_CLAC |
48 |
-@@ -540,7 +758,7 @@ ENTRY(simd_coprocessor_error) |
49 |
+@@ -540,20 +758,20 @@ ENTRY(simd_coprocessor_error) |
50 |
pushl $do_simd_coprocessor_error |
51 |
#endif |
52 |
jmp error_code |
53 |
@@ -16240,7 +16240,13 @@ index bb3e376..567eb30 100644 |
54 |
|
55 |
ENTRY(device_not_available) |
56 |
ASM_CLAC |
57 |
-@@ -553,7 +771,7 @@ END(device_not_available) |
58 |
+ pushl $-1 # mark this as an int |
59 |
+ pushl $do_device_not_available |
60 |
+ jmp error_code |
61 |
+-END(device_not_available) |
62 |
++ENDPROC(device_not_available) |
63 |
+ |
64 |
+ #ifdef CONFIG_PARAVIRT |
65 |
ENTRY(native_iret) |
66 |
iret |
67 |
_ASM_EXTABLE(native_iret, iret_exc) |
68 |
@@ -42998,10 +43004,17 @@ index eae5107..26e7a39 100644 |
69 |
} |
70 |
EXPORT_SYMBOL_GPL(od_unregister_powersave_bias_handler); |
71 |
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c |
72 |
-index cd83d47..3ad4309 100644 |
73 |
+index cd83d47..3d6afab 100644 |
74 |
--- a/drivers/cpufreq/intel_pstate.c |
75 |
+++ b/drivers/cpufreq/intel_pstate.c |
76 |
-@@ -147,7 +147,7 @@ static inline int32_t get_target_pstate_use_performance(struct cpudata *cpu); |
77 |
+@@ -141,13 +141,13 @@ struct pstate_funcs { |
78 |
+ struct cpu_defaults { |
79 |
+ struct pstate_adjust_policy pid_policy; |
80 |
+ struct pstate_funcs funcs; |
81 |
+-}; |
82 |
++} __do_const; |
83 |
+ |
84 |
+ static inline int32_t get_target_pstate_use_performance(struct cpudata *cpu); |
85 |
static inline int32_t get_target_pstate_use_cpu_load(struct cpudata *cpu); |
86 |
|
87 |
static struct pstate_adjust_policy pid_params; |
88 |
@@ -45690,6 +45703,26 @@ index 813ef23..17928d6 100644 |
89 |
struct drm_display_mode *mode) |
90 |
{ |
91 |
struct drm_device *dev = connector->dev; |
92 |
+diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c |
93 |
+index 7cd87a0..be562ce 100644 |
94 |
+--- a/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c |
95 |
++++ b/drivers/gpu/drm/gma500/mdfld_dsi_dpi.c |
96 |
+@@ -120,9 +120,14 @@ static void dsi_set_pipe_plane_enable_state(struct drm_device *dev, |
97 |
+ u32 pipeconf_reg = PIPEACONF; |
98 |
+ u32 dspcntr_reg = DSPACNTR; |
99 |
+ |
100 |
+- u32 dspcntr = dev_priv->dspcntr[pipe]; |
101 |
++ u32 dspcntr; |
102 |
+ u32 mipi = MIPI_PORT_EN | PASS_FROM_SPHY_TO_AFE | SEL_FLOPPED_HSTX; |
103 |
+ |
104 |
++ if (pipe == -1) |
105 |
++ return; |
106 |
++ |
107 |
++ dspcntr = dev_priv->dspcntr[pipe]; |
108 |
++ |
109 |
+ if (pipe) { |
110 |
+ pipeconf_reg = PIPECCONF; |
111 |
+ dspcntr_reg = DSPCCNTR; |
112 |
diff --git a/drivers/gpu/drm/gma500/mdfld_dsi_output.c b/drivers/gpu/drm/gma500/mdfld_dsi_output.c |
113 |
index d758f4c..7828190 100644 |
114 |
--- a/drivers/gpu/drm/gma500/mdfld_dsi_output.c |
115 |
@@ -65533,9 +65566,20 @@ index 1fc622b..8c48fc3 100644 |
116 |
|
117 |
extern struct oprofile_stat_struct oprofile_stats; |
118 |
diff --git a/drivers/oprofile/oprofilefs.c b/drivers/oprofile/oprofilefs.c |
119 |
-index b48ac630..df1b012 100644 |
120 |
+index b48ac630..0a69794 100644 |
121 |
--- a/drivers/oprofile/oprofilefs.c |
122 |
+++ b/drivers/oprofile/oprofilefs.c |
123 |
+@@ -176,8 +176,8 @@ int oprofilefs_create_ro_ulong(struct dentry *root, |
124 |
+ |
125 |
+ static ssize_t atomic_read_file(struct file *file, char __user *buf, size_t count, loff_t *offset) |
126 |
+ { |
127 |
+- atomic_t *val = file->private_data; |
128 |
+- return oprofilefs_ulong_to_user(atomic_read(val), buf, count, offset); |
129 |
++ atomic_unchecked_t *val = file->private_data; |
130 |
++ return oprofilefs_ulong_to_user(atomic_read_unchecked(val), buf, count, offset); |
131 |
+ } |
132 |
+ |
133 |
+ |
134 |
@@ -189,7 +189,7 @@ static const struct file_operations atomic_ro_fops = { |
135 |
|
136 |
|
137 |
@@ -66251,7 +66295,7 @@ index e9caa34..72ed655 100644 |
138 |
.ident = "Sony Vaio", |
139 |
.matches = { |
140 |
diff --git a/drivers/platform/x86/thinkpad_acpi.c b/drivers/platform/x86/thinkpad_acpi.c |
141 |
-index a268a7a..67a0be4 100644 |
142 |
+index a268a7a..558ca4c 100644 |
143 |
--- a/drivers/platform/x86/thinkpad_acpi.c |
144 |
+++ b/drivers/platform/x86/thinkpad_acpi.c |
145 |
@@ -2461,10 +2461,10 @@ static void hotkey_compare_and_issue_event(struct tp_nvram_state *oldn, |
146 |
@@ -66275,15 +66319,7 @@ index a268a7a..67a0be4 100644 |
147 |
{ |
148 |
int status; |
149 |
|
150 |
-@@ -4221,6 +4221,7 @@ static const struct attribute_group bluetooth_attr_group = { |
151 |
- .attrs = bluetooth_attributes, |
152 |
- }; |
153 |
- |
154 |
-+const struct tpacpi_rfk_ops bluetooth_tprfk_ops_; |
155 |
- static const struct tpacpi_rfk_ops bluetooth_tprfk_ops = { |
156 |
- .get_status = bluetooth_get_status, |
157 |
- .set_status = bluetooth_set_status, |
158 |
-@@ -4352,7 +4353,7 @@ static int wan_get_status(void) |
159 |
+@@ -4352,7 +4352,7 @@ static int wan_get_status(void) |
160 |
TPACPI_RFK_RADIO_ON : TPACPI_RFK_RADIO_OFF; |
161 |
} |
162 |
|
163 |
@@ -66292,7 +66328,7 @@ index a268a7a..67a0be4 100644 |
164 |
{ |
165 |
int status; |
166 |
|
167 |
-@@ -4538,7 +4539,7 @@ static int uwb_get_status(void) |
168 |
+@@ -4538,7 +4538,7 @@ static int uwb_get_status(void) |
169 |
TPACPI_RFK_RADIO_ON : TPACPI_RFK_RADIO_OFF; |
170 |
} |
171 |
|
172 |
@@ -66301,7 +66337,7 @@ index a268a7a..67a0be4 100644 |
173 |
{ |
174 |
int status; |
175 |
|
176 |
-@@ -9450,7 +9451,7 @@ static struct ibm_init_struct ibms_init[] __initdata = { |
177 |
+@@ -9450,7 +9450,7 @@ static struct ibm_init_struct ibms_init[] __initdata = { |
178 |
}, |
179 |
}; |
180 |
|
181 |
@@ -134194,19 +134230,20 @@ index 30f5362..8ed8ac9 100644 |
182 |
void *pmi_pal; |
183 |
u8 *vbe_state_orig; /* |
184 |
diff --git a/init/Kconfig b/init/Kconfig |
185 |
-index 2232080..c5df76e 100644 |
186 |
+index 2232080..ae4d217 100644 |
187 |
--- a/init/Kconfig |
188 |
+++ b/init/Kconfig |
189 |
-@@ -286,6 +286,8 @@ config FHANDLE |
190 |
+@@ -285,7 +285,8 @@ config FHANDLE |
191 |
+ |
192 |
config USELIB |
193 |
bool "uselib syscall" |
194 |
- def_bool ALPHA || M68K || SPARC || X86_32 || IA32_EMULATION |
195 |
+- def_bool ALPHA || M68K || SPARC || X86_32 || IA32_EMULATION |
196 |
+ default n |
197 |
+ depends on !GRKERNSEC |
198 |
help |
199 |
This option enables the uselib syscall, a system call used in the |
200 |
dynamic linker from libc5 and earlier. glibc does not use this |
201 |
-@@ -628,6 +630,7 @@ config RCU_FAST_NO_HZ |
202 |
+@@ -628,6 +629,7 @@ config RCU_FAST_NO_HZ |
203 |
config TREE_RCU_TRACE |
204 |
def_bool RCU_TRACE && ( TREE_RCU || PREEMPT_RCU ) |
205 |
select DEBUG_FS |
206 |
@@ -134214,7 +134251,7 @@ index 2232080..c5df76e 100644 |
207 |
help |
208 |
This option provides tracing for the TREE_RCU and |
209 |
PREEMPT_RCU implementations, permitting Makefile to |
210 |
-@@ -1132,6 +1135,7 @@ endif # CGROUPS |
211 |
+@@ -1132,6 +1134,7 @@ endif # CGROUPS |
212 |
config CHECKPOINT_RESTORE |
213 |
bool "Checkpoint/restore support" if EXPERT |
214 |
select PROC_CHILDREN |
215 |
@@ -134222,7 +134259,7 @@ index 2232080..c5df76e 100644 |
216 |
default n |
217 |
help |
218 |
Enables additional kernel features in a sake of checkpoint/restore. |
219 |
-@@ -1676,7 +1680,7 @@ config SLUB_DEBUG |
220 |
+@@ -1676,7 +1679,7 @@ config SLUB_DEBUG |
221 |
|
222 |
config COMPAT_BRK |
223 |
bool "Disable heap randomization" |
224 |
@@ -137469,7 +137506,7 @@ index 0551c21..f753f95 100644 |
225 |
debug_mutex_free_waiter(&waiter); |
226 |
mutex_release(&lock->dep_map, 1, ip); |
227 |
diff --git a/kernel/module.c b/kernel/module.c |
228 |
-index 794ebe8..70e7897 100644 |
229 |
+index 794ebe8..74c285e 100644 |
230 |
--- a/kernel/module.c |
231 |
+++ b/kernel/module.c |
232 |
@@ -59,6 +59,7 @@ |
233 |
@@ -137631,7 +137668,7 @@ index 794ebe8..70e7897 100644 |
234 |
+ __mod_update_bounds_rx(mod->core_layout.base_rx, mod->core_layout.size_rx); |
235 |
+ __mod_update_bounds_rw(mod->core_layout.base_rw, mod->core_layout.size_rw); |
236 |
+ if (mod->init_layout.size_rx) |
237 |
-+ __mod_update_bounds_rw(mod->init_layout.base_rx, mod->init_layout.size_rx); |
238 |
++ __mod_update_bounds_rx(mod->init_layout.base_rx, mod->init_layout.size_rx); |
239 |
+ if (mod->init_layout.size_rw) |
240 |
+ __mod_update_bounds_rw(mod->init_layout.base_rw, mod->init_layout.size_rw); |
241 |
} |
242 |
@@ -137992,7 +138029,7 @@ index 794ebe8..70e7897 100644 |
243 |
} |
244 |
|
245 |
/* |
246 |
-@@ -2509,7 +2593,11 @@ static void add_kallsyms(struct module *mod, const struct load_info *info) |
247 |
+@@ -2509,7 +2593,9 @@ static void add_kallsyms(struct module *mod, const struct load_info *info) |
248 |
Elf_Shdr *symsec = &info->sechdrs[info->index.sym]; |
249 |
|
250 |
/* Set up to point into init section. */ |
251 |
@@ -138000,12 +138037,10 @@ index 794ebe8..70e7897 100644 |
252 |
+ mod->kallsyms = mod->init_layout.base_rx + info->mod_kallsyms_init_off; |
253 |
+ |
254 |
+ pax_open_kernel(); |
255 |
-+ |
256 |
-+ pax_open_kernel(); |
257 |
|
258 |
mod->kallsyms->symtab = (void *)symsec->sh_addr; |
259 |
mod->kallsyms->num_symtab = symsec->sh_size / sizeof(Elf_Sym); |
260 |
-@@ -2522,8 +2610,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info) |
261 |
+@@ -2522,8 +2608,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info) |
262 |
= elf_type(&mod->kallsyms->symtab[i], info); |
263 |
|
264 |
/* Now populate the cut down core kallsyms for after init. */ |
265 |
@@ -138016,7 +138051,7 @@ index 794ebe8..70e7897 100644 |
266 |
src = mod->kallsyms->symtab; |
267 |
for (ndst = i = 0; i < mod->kallsyms->num_symtab; i++) { |
268 |
if (i == 0 || |
269 |
-@@ -2536,6 +2624,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info) |
270 |
+@@ -2536,6 +2622,8 @@ static void add_kallsyms(struct module *mod, const struct load_info *info) |
271 |
} |
272 |
} |
273 |
mod->core_kallsyms.num_symtab = ndst; |
274 |
@@ -138025,7 +138060,7 @@ index 794ebe8..70e7897 100644 |
275 |
} |
276 |
#else |
277 |
static inline void layout_symtab(struct module *mod, struct load_info *info) |
278 |
-@@ -2835,7 +2925,15 @@ static struct module *setup_load_info(struct load_info *info, int flags) |
279 |
+@@ -2835,7 +2923,15 @@ static struct module *setup_load_info(struct load_info *info, int flags) |
280 |
mod = (void *)info->sechdrs[info->index.mod].sh_addr; |
281 |
|
282 |
if (info->index.sym == 0) { |
283 |
@@ -138041,7 +138076,7 @@ index 794ebe8..70e7897 100644 |
284 |
return ERR_PTR(-ENOEXEC); |
285 |
} |
286 |
|
287 |
-@@ -2851,8 +2949,14 @@ static struct module *setup_load_info(struct load_info *info, int flags) |
288 |
+@@ -2851,8 +2947,14 @@ static struct module *setup_load_info(struct load_info *info, int flags) |
289 |
static int check_modinfo(struct module *mod, struct load_info *info, int flags) |
290 |
{ |
291 |
const char *modmagic = get_modinfo(info, "vermagic"); |
292 |
@@ -138056,7 +138091,7 @@ index 794ebe8..70e7897 100644 |
293 |
if (flags & MODULE_INIT_IGNORE_VERMAGIC) |
294 |
modmagic = NULL; |
295 |
|
296 |
-@@ -2877,7 +2981,7 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags) |
297 |
+@@ -2877,7 +2979,7 @@ static int check_modinfo(struct module *mod, struct load_info *info, int flags) |
298 |
} |
299 |
|
300 |
/* Set up license info based on the info section */ |
301 |
@@ -138065,7 +138100,7 @@ index 794ebe8..70e7897 100644 |
302 |
|
303 |
return 0; |
304 |
} |
305 |
-@@ -2974,7 +3078,7 @@ static int move_module(struct module *mod, struct load_info *info) |
306 |
+@@ -2974,7 +3076,7 @@ static int move_module(struct module *mod, struct load_info *info) |
307 |
void *ptr; |
308 |
|
309 |
/* Do the allocs. */ |
310 |
@@ -138074,7 +138109,7 @@ index 794ebe8..70e7897 100644 |
311 |
/* |
312 |
* The pointer to this block is stored in the module structure |
313 |
* which is inside the block. Just mark it as not being a |
314 |
-@@ -2984,11 +3088,11 @@ static int move_module(struct module *mod, struct load_info *info) |
315 |
+@@ -2984,11 +3086,11 @@ static int move_module(struct module *mod, struct load_info *info) |
316 |
if (!ptr) |
317 |
return -ENOMEM; |
318 |
|
319 |
@@ -138090,7 +138125,7 @@ index 794ebe8..70e7897 100644 |
320 |
/* |
321 |
* The pointer to this block is stored in the module structure |
322 |
* which is inside the block. This block doesn't need to be |
323 |
-@@ -2997,13 +3101,45 @@ static int move_module(struct module *mod, struct load_info *info) |
324 |
+@@ -2997,13 +3099,45 @@ static int move_module(struct module *mod, struct load_info *info) |
325 |
*/ |
326 |
kmemleak_ignore(ptr); |
327 |
if (!ptr) { |
328 |
@@ -138140,7 +138175,7 @@ index 794ebe8..70e7897 100644 |
329 |
|
330 |
/* Transfer each section which specifies SHF_ALLOC */ |
331 |
pr_debug("final section addresses:\n"); |
332 |
-@@ -3014,16 +3150,45 @@ static int move_module(struct module *mod, struct load_info *info) |
333 |
+@@ -3014,16 +3148,45 @@ static int move_module(struct module *mod, struct load_info *info) |
334 |
if (!(shdr->sh_flags & SHF_ALLOC)) |
335 |
continue; |
336 |
|
337 |
@@ -138193,7 +138228,7 @@ index 794ebe8..70e7897 100644 |
338 |
pr_debug("\t0x%lx %s\n", |
339 |
(long)shdr->sh_addr, info->secstrings + shdr->sh_name); |
340 |
} |
341 |
-@@ -3080,12 +3245,12 @@ static void flush_module_icache(const struct module *mod) |
342 |
+@@ -3080,12 +3243,12 @@ static void flush_module_icache(const struct module *mod) |
343 |
* Do it before processing of module parameters, so the module |
344 |
* can provide parameter accessor functions of its own. |
345 |
*/ |
346 |
@@ -138212,7 +138247,7 @@ index 794ebe8..70e7897 100644 |
347 |
|
348 |
set_fs(old_fs); |
349 |
} |
350 |
-@@ -3143,8 +3308,10 @@ static void module_deallocate(struct module *mod, struct load_info *info) |
351 |
+@@ -3143,8 +3306,10 @@ static void module_deallocate(struct module *mod, struct load_info *info) |
352 |
{ |
353 |
percpu_modfree(mod); |
354 |
module_arch_freeing_init(mod); |
355 |
@@ -138225,7 +138260,7 @@ index 794ebe8..70e7897 100644 |
356 |
} |
357 |
|
358 |
int __weak module_finalize(const Elf_Ehdr *hdr, |
359 |
-@@ -3157,7 +3324,9 @@ int __weak module_finalize(const Elf_Ehdr *hdr, |
360 |
+@@ -3157,7 +3322,9 @@ int __weak module_finalize(const Elf_Ehdr *hdr, |
361 |
static int post_relocation(struct module *mod, const struct load_info *info) |
362 |
{ |
363 |
/* Sort exception table now relocations are done. */ |
364 |
@@ -138235,7 +138270,7 @@ index 794ebe8..70e7897 100644 |
365 |
|
366 |
/* Copy relocated percpu area over. */ |
367 |
percpu_modcopy(mod, (void *)info->sechdrs[info->index.pcpu].sh_addr, |
368 |
-@@ -3205,13 +3374,15 @@ static void do_mod_ctors(struct module *mod) |
369 |
+@@ -3205,13 +3372,15 @@ static void do_mod_ctors(struct module *mod) |
370 |
/* For freeing module_init on success, in case kallsyms traversing */ |
371 |
struct mod_initfree { |
372 |
struct rcu_head rcu; |
373 |
@@ -138253,7 +138288,7 @@ index 794ebe8..70e7897 100644 |
374 |
kfree(m); |
375 |
} |
376 |
|
377 |
-@@ -3231,7 +3402,8 @@ static noinline int do_init_module(struct module *mod) |
378 |
+@@ -3231,7 +3400,8 @@ static noinline int do_init_module(struct module *mod) |
379 |
ret = -ENOMEM; |
380 |
goto fail; |
381 |
} |
382 |
@@ -138263,7 +138298,7 @@ index 794ebe8..70e7897 100644 |
383 |
|
384 |
/* |
385 |
* We want to find out whether @mod uses async during init. Clear |
386 |
-@@ -3290,10 +3462,10 @@ static noinline int do_init_module(struct module *mod) |
387 |
+@@ -3290,10 +3460,10 @@ static noinline int do_init_module(struct module *mod) |
388 |
mod_tree_remove_init(mod); |
389 |
disable_ro_nx(&mod->init_layout); |
390 |
module_arch_freeing_init(mod); |
391 |
@@ -138278,7 +138313,7 @@ index 794ebe8..70e7897 100644 |
392 |
/* |
393 |
* We want to free module_init, but be aware that kallsyms may be |
394 |
* walking this with preempt disabled. In all the failure paths, we |
395 |
-@@ -3481,9 +3653,38 @@ static int load_module(struct load_info *info, const char __user *uargs, |
396 |
+@@ -3481,9 +3651,38 @@ static int load_module(struct load_info *info, const char __user *uargs, |
397 |
if (err) |
398 |
goto free_unload; |
399 |
|
400 |
@@ -138317,7 +138352,7 @@ index 794ebe8..70e7897 100644 |
401 |
/* Fix up syms, so that st_value is a pointer to location. */ |
402 |
err = simplify_symbols(mod, info); |
403 |
if (err < 0) |
404 |
-@@ -3499,13 +3700,6 @@ static int load_module(struct load_info *info, const char __user *uargs, |
405 |
+@@ -3499,13 +3698,6 @@ static int load_module(struct load_info *info, const char __user *uargs, |
406 |
|
407 |
flush_module_icache(mod); |
408 |
|
409 |
@@ -138331,7 +138366,7 @@ index 794ebe8..70e7897 100644 |
410 |
dynamic_debug_setup(info->debug, info->num_debug); |
411 |
|
412 |
/* Ftrace init must be called in the MODULE_STATE_UNFORMED state */ |
413 |
-@@ -3557,11 +3751,10 @@ static int load_module(struct load_info *info, const char __user *uargs, |
414 |
+@@ -3557,11 +3749,10 @@ static int load_module(struct load_info *info, const char __user *uargs, |
415 |
ddebug_cleanup: |
416 |
dynamic_debug_remove(info->debug); |
417 |
synchronize_sched(); |
418 |
@@ -138344,7 +138379,7 @@ index 794ebe8..70e7897 100644 |
419 |
free_unload: |
420 |
module_unload_free(mod); |
421 |
unlink_mod: |
422 |
-@@ -3581,7 +3774,8 @@ static int load_module(struct load_info *info, const char __user *uargs, |
423 |
+@@ -3581,7 +3772,8 @@ static int load_module(struct load_info *info, const char __user *uargs, |
424 |
*/ |
425 |
ftrace_release_mod(mod); |
426 |
/* Free lock-classes; relies on the preceding sync_rcu() */ |
427 |
@@ -138354,7 +138389,7 @@ index 794ebe8..70e7897 100644 |
428 |
|
429 |
module_deallocate(mod, info); |
430 |
free_copy: |
431 |
-@@ -3664,10 +3858,16 @@ static const char *get_ksymbol(struct module *mod, |
432 |
+@@ -3664,10 +3856,16 @@ static const char *get_ksymbol(struct module *mod, |
433 |
struct mod_kallsyms *kallsyms = rcu_dereference_sched(mod->kallsyms); |
434 |
|
435 |
/* At worse, next value is at end of module */ |
436 |
@@ -138374,7 +138409,7 @@ index 794ebe8..70e7897 100644 |
437 |
|
438 |
/* Scan for closest preceding symbol, and next symbol. (ELF |
439 |
starts real symbols at 1). */ |
440 |
-@@ -3920,7 +4120,7 @@ static int m_show(struct seq_file *m, void *p) |
441 |
+@@ -3920,7 +4118,7 @@ static int m_show(struct seq_file *m, void *p) |
442 |
return 0; |
443 |
|
444 |
seq_printf(m, "%s %u", |
445 |
@@ -138383,7 +138418,7 @@ index 794ebe8..70e7897 100644 |
446 |
print_unload_info(m, mod); |
447 |
|
448 |
/* Informative for users. */ |
449 |
-@@ -3929,7 +4129,7 @@ static int m_show(struct seq_file *m, void *p) |
450 |
+@@ -3929,7 +4127,7 @@ static int m_show(struct seq_file *m, void *p) |
451 |
mod->state == MODULE_STATE_COMING ? "Loading" : |
452 |
"Live"); |
453 |
/* Used by oprofile and other similar tools. */ |
454 |
@@ -138392,7 +138427,7 @@ index 794ebe8..70e7897 100644 |
455 |
|
456 |
/* Taints info */ |
457 |
if (mod->taints) |
458 |
-@@ -3965,7 +4165,17 @@ static const struct file_operations proc_modules_operations = { |
459 |
+@@ -3965,7 +4163,17 @@ static const struct file_operations proc_modules_operations = { |
460 |
|
461 |
static int __init proc_modules_init(void) |
462 |
{ |
463 |
@@ -138410,7 +138445,7 @@ index 794ebe8..70e7897 100644 |
464 |
return 0; |
465 |
} |
466 |
module_init(proc_modules_init); |
467 |
-@@ -4026,7 +4236,8 @@ struct module *__module_address(unsigned long addr) |
468 |
+@@ -4026,7 +4234,8 @@ struct module *__module_address(unsigned long addr) |
469 |
{ |
470 |
struct module *mod; |
471 |
|
472 |
@@ -138420,7 +138455,7 @@ index 794ebe8..70e7897 100644 |
473 |
return NULL; |
474 |
|
475 |
module_assert_mutex_or_preempt(); |
476 |
-@@ -4069,11 +4280,21 @@ bool is_module_text_address(unsigned long addr) |
477 |
+@@ -4069,11 +4278,21 @@ bool is_module_text_address(unsigned long addr) |
478 |
*/ |
479 |
struct module *__module_text_address(unsigned long addr) |
480 |
{ |