]>
Commit | Line | Data |
---|---|---|
ad48b6e1 PK |
1 | diff --git a/Documentation/dontdiff b/Documentation/dontdiff |
2 | index 9de9813..1462492 100644 | |
3 | --- a/Documentation/dontdiff | |
4 | +++ b/Documentation/dontdiff | |
5 | @@ -3,9 +3,11 @@ | |
6 | *.bc | |
7 | *.bin | |
8 | *.bz2 | |
9 | +*.c.[012]*.* | |
10 | *.cis | |
11 | *.cpio | |
12 | *.csp | |
13 | +*.dbg | |
14 | *.dsp | |
15 | *.dvi | |
16 | *.elf | |
17 | @@ -15,6 +17,7 @@ | |
18 | *.gcov | |
19 | *.gen.S | |
20 | *.gif | |
21 | +*.gmo | |
22 | *.grep | |
23 | *.grp | |
24 | *.gz | |
25 | @@ -51,14 +54,17 @@ | |
26 | *.tab.h | |
27 | *.tex | |
28 | *.ver | |
29 | +*.vim | |
30 | *.xml | |
31 | *.xz | |
32 | *_MODULES | |
33 | +*_reg_safe.h | |
34 | *_vga16.c | |
35 | *~ | |
36 | \#*# | |
37 | *.9 | |
38 | -.* | |
39 | +.[^g]* | |
40 | +.gen* | |
41 | .*.d | |
42 | .mm | |
43 | 53c700_d.h | |
44 | @@ -72,9 +78,11 @@ Image | |
45 | Module.markers | |
46 | Module.symvers | |
47 | PENDING | |
48 | +PERF* | |
49 | SCCS | |
50 | System.map* | |
51 | TAGS | |
52 | +TRACEEVENT-CFLAGS | |
53 | aconf | |
54 | af_names.h | |
55 | aic7*reg.h* | |
56 | @@ -83,6 +91,7 @@ aic7*seq.h* | |
57 | aicasm | |
58 | aicdb.h* | |
59 | altivec*.c | |
60 | +ashldi3.S | |
61 | asm-offsets.h | |
62 | asm_offsets.h | |
63 | autoconf.h* | |
64 | @@ -95,32 +104,40 @@ bounds.h | |
65 | bsetup | |
66 | btfixupprep | |
67 | build | |
68 | +builtin-policy.h | |
69 | bvmlinux | |
70 | bzImage* | |
71 | capability_names.h | |
72 | capflags.c | |
73 | classlist.h* | |
74 | +clut_vga16.c | |
75 | +common-cmds.h | |
76 | comp*.log | |
77 | compile.h* | |
78 | conf | |
79 | config | |
80 | config-* | |
81 | config_data.h* | |
82 | +config.c | |
83 | config.mak | |
84 | config.mak.autogen | |
85 | +config.tmp | |
86 | conmakehash | |
87 | consolemap_deftbl.c* | |
88 | cpustr.h | |
89 | crc32table.h* | |
90 | cscope.* | |
91 | defkeymap.c | |
92 | +devicetable-offsets.h | |
93 | devlist.h* | |
94 | dnotify_test | |
95 | docproc | |
96 | dslm | |
97 | +dtc-lexer.lex.c | |
98 | elf2ecoff | |
99 | elfconfig.h* | |
100 | evergreen_reg_safe.h | |
101 | +exception_policy.conf | |
102 | fixdep | |
103 | flask.h | |
104 | fore200e_mkfirm | |
105 | @@ -128,12 +145,15 @@ fore200e_pca_fw.c* | |
106 | gconf | |
107 | gconf.glade.h | |
108 | gen-devlist | |
109 | +gen-kdb_cmds.c | |
110 | gen_crc32table | |
111 | gen_init_cpio | |
112 | generated | |
113 | genheaders | |
114 | genksyms | |
115 | *_gray256.c | |
116 | +hash | |
117 | +hid-example | |
118 | hpet_example | |
119 | hugepage-mmap | |
120 | hugepage-shm | |
121 | @@ -148,14 +168,14 @@ int32.c | |
122 | int4.c | |
123 | int8.c | |
124 | kallsyms | |
125 | -kconfig | |
126 | +kern_constants.h | |
127 | keywords.c | |
128 | ksym.c* | |
129 | ksym.h* | |
130 | kxgettext | |
131 | lex.c | |
132 | lex.*.c | |
133 | -linux | |
134 | +lib1funcs.S | |
135 | logo_*.c | |
136 | logo_*_clut224.c | |
137 | logo_*_mono.c | |
138 | @@ -165,14 +185,15 @@ mach-types.h | |
139 | machtypes.h | |
140 | map | |
141 | map_hugetlb | |
142 | -media | |
143 | mconf | |
144 | +mdp | |
145 | miboot* | |
146 | mk_elfconfig | |
147 | mkboot | |
148 | mkbugboot | |
149 | mkcpustr | |
150 | mkdep | |
151 | +mkpiggy | |
152 | mkprep | |
153 | mkregtable | |
154 | mktables | |
155 | @@ -188,6 +209,8 @@ oui.c* | |
156 | page-types | |
157 | parse.c | |
158 | parse.h | |
159 | +parse-events* | |
160 | +pasyms.h | |
161 | patches* | |
162 | pca200e.bin | |
163 | pca200e_ecd.bin2 | |
164 | @@ -197,6 +220,7 @@ perf-archive | |
165 | piggyback | |
166 | piggy.gzip | |
167 | piggy.S | |
168 | +pmu-* | |
169 | pnmtologo | |
170 | ppc_defs.h* | |
171 | pss_boot.h | |
172 | @@ -206,7 +230,12 @@ r200_reg_safe.h | |
173 | r300_reg_safe.h | |
174 | r420_reg_safe.h | |
175 | r600_reg_safe.h | |
176 | +randomize_layout_hash.h | |
177 | +randomize_layout_seed.h | |
178 | +realmode.lds | |
179 | +realmode.relocs | |
180 | recordmcount | |
181 | +regdb.c | |
182 | relocs | |
183 | rlim_names.h | |
184 | rn50_reg_safe.h | |
185 | @@ -216,8 +245,12 @@ series | |
186 | setup | |
187 | setup.bin | |
188 | setup.elf | |
189 | +signing_key* | |
190 | +size_overflow_hash.h | |
191 | sImage | |
192 | +slabinfo | |
193 | sm_tbl* | |
194 | +sortextable | |
195 | split-include | |
196 | syscalltab.h | |
197 | tables.c | |
198 | @@ -227,6 +260,7 @@ tftpboot.img | |
199 | timeconst.h | |
200 | times.h* | |
201 | trix_boot.h | |
202 | +user_constants.h | |
203 | utsrelease.h* | |
204 | vdso-syms.lds | |
205 | vdso.lds | |
206 | @@ -238,13 +272,17 @@ vdso32.lds | |
207 | vdso32.so.dbg | |
208 | vdso64.lds | |
209 | vdso64.so.dbg | |
210 | +vdsox32.lds | |
211 | +vdsox32-syms.lds | |
212 | version.h* | |
213 | vmImage | |
214 | vmlinux | |
215 | vmlinux-* | |
216 | vmlinux.aout | |
217 | vmlinux.bin.all | |
218 | +vmlinux.bin.bz2 | |
219 | vmlinux.lds | |
220 | +vmlinux.relocs | |
221 | vmlinuz | |
222 | voffset.h | |
223 | vsyscall.lds | |
224 | @@ -252,9 +290,12 @@ vsyscall_32.lds | |
225 | wanxlfw.inc | |
226 | uImage | |
227 | unifdef | |
228 | +utsrelease.h | |
229 | wakeup.bin | |
230 | wakeup.elf | |
231 | wakeup.lds | |
232 | +x509* | |
233 | zImage* | |
234 | zconf.hash.c | |
235 | +zconf.lex.c | |
236 | zoffset.h | |
237 | diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt | |
238 | index a311db8..415b28c 100644 | |
239 | --- a/Documentation/kbuild/makefiles.txt | |
240 | +++ b/Documentation/kbuild/makefiles.txt | |
241 | @@ -23,10 +23,11 @@ This document describes the Linux kernel Makefiles. | |
242 | === 4 Host Program support | |
243 | --- 4.1 Simple Host Program | |
244 | --- 4.2 Composite Host Programs | |
245 | - --- 4.3 Using C++ for host programs | |
246 | - --- 4.4 Controlling compiler options for host programs | |
247 | - --- 4.5 When host programs are actually built | |
248 | - --- 4.6 Using hostprogs-$(CONFIG_FOO) | |
249 | + --- 4.3 Defining shared libraries | |
250 | + --- 4.4 Using C++ for host programs | |
251 | + --- 4.5 Controlling compiler options for host programs | |
252 | + --- 4.6 When host programs are actually built | |
253 | + --- 4.7 Using hostprogs-$(CONFIG_FOO) | |
254 | ||
255 | === 5 Kbuild clean infrastructure | |
256 | ||
257 | @@ -642,7 +643,29 @@ Both possibilities are described in the following. | |
258 | Finally, the two .o files are linked to the executable, lxdialog. | |
259 | Note: The syntax <executable>-y is not permitted for host-programs. | |
260 | ||
261 | ---- 4.3 Using C++ for host programs | |
262 | +--- 4.3 Defining shared libraries | |
263 | + | |
264 | + Objects with extension .so are considered shared libraries, and | |
265 | + will be compiled as position independent objects. | |
266 | + Kbuild provides support for shared libraries, but the usage | |
267 | + shall be restricted. | |
268 | + In the following example the libkconfig.so shared library is used | |
269 | + to link the executable conf. | |
270 | + | |
271 | + Example: | |
272 | + #scripts/kconfig/Makefile | |
273 | + hostprogs-y := conf | |
274 | + conf-objs := conf.o libkconfig.so | |
275 | + libkconfig-objs := expr.o type.o | |
276 | + | |
277 | + Shared libraries always require a corresponding -objs line, and | |
278 | + in the example above the shared library libkconfig is composed by | |
279 | + the two objects expr.o and type.o. | |
280 | + expr.o and type.o will be built as position independent code and | |
281 | + linked as a shared library libkconfig.so. C++ is not supported for | |
282 | + shared libraries. | |
283 | + | |
284 | +--- 4.4 Using C++ for host programs | |
285 | ||
286 | kbuild offers support for host programs written in C++. This was | |
287 | introduced solely to support kconfig, and is not recommended | |
288 | @@ -665,7 +688,7 @@ Both possibilities are described in the following. | |
289 | qconf-cxxobjs := qconf.o | |
290 | qconf-objs := check.o | |
291 | ||
292 | ---- 4.4 Controlling compiler options for host programs | |
293 | +--- 4.5 Controlling compiler options for host programs | |
294 | ||
295 | When compiling host programs, it is possible to set specific flags. | |
296 | The programs will always be compiled utilising $(HOSTCC) passed | |
297 | @@ -693,7 +716,7 @@ Both possibilities are described in the following. | |
298 | When linking qconf, it will be passed the extra option | |
299 | "-L$(QTDIR)/lib". | |
300 | ||
301 | ---- 4.5 When host programs are actually built | |
302 | +--- 4.6 When host programs are actually built | |
303 | ||
304 | Kbuild will only build host-programs when they are referenced | |
305 | as a prerequisite. | |
306 | @@ -724,7 +747,7 @@ Both possibilities are described in the following. | |
307 | This will tell kbuild to build lxdialog even if not referenced in | |
308 | any rule. | |
309 | ||
310 | ---- 4.6 Using hostprogs-$(CONFIG_FOO) | |
311 | +--- 4.7 Using hostprogs-$(CONFIG_FOO) | |
312 | ||
313 | A typical pattern in a Kbuild file looks like this: | |
314 | ||
315 | diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt | |
316 | index f4c71d4..66811b1 100644 | |
317 | --- a/Documentation/kernel-parameters.txt | |
318 | +++ b/Documentation/kernel-parameters.txt | |
319 | @@ -1182,6 +1182,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |
320 | Format: <unsigned int> such that (rxsize & ~0x1fffc0) == 0. | |
321 | Default: 1024 | |
322 | ||
323 | + grsec_proc_gid= [GRKERNSEC_PROC_USERGROUP] Chooses GID to | |
324 | + ignore grsecurity's /proc restrictions | |
325 | + | |
326 | + | |
327 | hashdist= [KNL,NUMA] Large hashes allocated during boot | |
328 | are distributed across NUMA nodes. Defaults on | |
329 | for 64-bit NUMA, off otherwise. | |
330 | @@ -2260,6 +2264,10 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |
331 | noexec=on: enable non-executable mappings (default) | |
332 | noexec=off: disable non-executable mappings | |
333 | ||
334 | + nopcid [X86-64] | |
335 | + Disable PCID (Process-Context IDentifier) even if it | |
336 | + is supported by the processor. | |
337 | + | |
338 | nosmap [X86] | |
339 | Disable SMAP (Supervisor Mode Access Prevention) | |
340 | even if it is supported by processor. | |
341 | @@ -2552,6 +2560,30 @@ bytes respectively. Such letter suffixes can also be entirely omitted. | |
342 | the specified number of seconds. This is to be used if | |
343 | your oopses keep scrolling off the screen. | |
344 | ||
345 | + pax_nouderef [X86] disables UDEREF. Most likely needed under certain | |
346 | + virtualization environments that don't cope well with the | |
347 | + expand down segment used by UDEREF on X86-32 or the frequent | |
348 | + page table updates on X86-64. | |
349 | + | |
350 | + pax_sanitize_slab= | |
351 | + Format: { 0 | 1 | off | fast | full } | |
352 | + Options '0' and '1' are only provided for backward | |
353 | + compatibility, 'off' or 'fast' should be used instead. | |
354 | + 0|off : disable slab object sanitization | |
355 | + 1|fast: enable slab object sanitization excluding | |
356 | + whitelisted slabs (default) | |
357 | + full : sanitize all slabs, even the whitelisted ones | |
358 | + | |
359 | + pax_softmode= 0/1 to disable/enable PaX softmode on boot already. | |
360 | + | |
361 | + pax_extra_latent_entropy | |
362 | + Enable a very simple form of latent entropy extraction | |
363 | + from the first 4GB of memory as the bootmem allocator | |
364 | + passes the memory pages to the buddy allocator. | |
365 | + | |
366 | + pax_weakuderef [X86-64] enables the weaker but faster form of UDEREF | |
367 | + when the processor supports PCID. | |
368 | + | |
369 | pcbit= [HW,ISDN] | |
370 | ||
371 | pcd. [PARIDE] | |
372 | diff --git a/Makefile b/Makefile | |
373 | index 0efae22..380e711 100644 | |
374 | --- a/Makefile | |
375 | +++ b/Makefile | |
376 | @@ -298,7 +298,9 @@ CONFIG_SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ | |
377 | HOSTCC = gcc | |
378 | HOSTCXX = g++ | |
379 | HOSTCFLAGS = -Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -std=gnu89 | |
380 | -HOSTCXXFLAGS = -O2 | |
381 | +HOSTCFLAGS = -Wall -W -Wmissing-prototypes -Wstrict-prototypes -Wno-unused-parameter -Wno-missing-field-initializers -O2 -fomit-frame-pointer -std=gnu89 -fno-delete-null-pointer-checks | |
382 | +HOSTCFLAGS += $(call cc-option, -Wno-empty-body) | |
383 | +HOSTCXXFLAGS = -O2 -Wall -W -Wno-array-bounds | |
384 | ||
385 | ifeq ($(shell $(HOSTCC) -v 2>&1 | grep -c "clang version"), 1) | |
386 | HOSTCFLAGS += -Wno-unused-value -Wno-unused-parameter \ | |
387 | @@ -445,8 +447,8 @@ export RCS_TAR_IGNORE := --exclude SCCS --exclude BitKeeper --exclude .svn \ | |
388 | # Rules shared between *config targets and build targets | |
389 | ||
390 | # Basic helpers built in scripts/ | |
391 | -PHONY += scripts_basic | |
392 | -scripts_basic: | |
393 | +PHONY += scripts_basic gcc-plugins | |
394 | +scripts_basic: gcc-plugins | |
395 | $(Q)$(MAKE) $(build)=scripts/basic | |
396 | $(Q)rm -f .tmp_quiet_recordmcount | |
397 | ||
398 | @@ -620,6 +622,72 @@ endif | |
399 | # Tell gcc to never replace conditional load with a non-conditional one | |
400 | KBUILD_CFLAGS += $(call cc-option,--param=allow-store-data-races=0) | |
401 | ||
402 | +ifndef DISABLE_PAX_PLUGINS | |
403 | +ifeq ($(call cc-ifversion, -ge, 0408, y), y) | |
404 | +PLUGINCC := $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-plugin.sh "$(HOSTCXX)" "$(HOSTCXX)" "$(CC)") | |
405 | +else | |
406 | +PLUGINCC := $(shell $(CONFIG_SHELL) $(srctree)/scripts/gcc-plugin.sh "$(HOSTCC)" "$(HOSTCXX)" "$(CC)") | |
407 | +endif | |
408 | +ifneq ($(PLUGINCC),) | |
409 | +ifdef CONFIG_PAX_CONSTIFY_PLUGIN | |
410 | +CONSTIFY_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/constify_plugin.so -DCONSTIFY_PLUGIN | |
411 | +endif | |
412 | +ifdef CONFIG_PAX_MEMORY_STACKLEAK | |
413 | +STACKLEAK_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/stackleak_plugin.so -DSTACKLEAK_PLUGIN | |
414 | +STACKLEAK_PLUGIN_CFLAGS += -fplugin-arg-stackleak_plugin-track-lowest-sp=100 | |
415 | +endif | |
416 | +ifdef CONFIG_KALLOCSTAT_PLUGIN | |
417 | +KALLOCSTAT_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/kallocstat_plugin.so | |
418 | +endif | |
419 | +ifdef CONFIG_PAX_KERNEXEC_PLUGIN | |
420 | +KERNEXEC_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/kernexec_plugin.so | |
421 | +KERNEXEC_PLUGIN_CFLAGS += -fplugin-arg-kernexec_plugin-method=$(CONFIG_PAX_KERNEXEC_PLUGIN_METHOD) -DKERNEXEC_PLUGIN | |
422 | +KERNEXEC_PLUGIN_AFLAGS := -DKERNEXEC_PLUGIN | |
423 | +endif | |
424 | +ifdef CONFIG_GRKERNSEC_RANDSTRUCT | |
425 | +RANDSTRUCT_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/randomize_layout_plugin.so -DRANDSTRUCT_PLUGIN | |
426 | +ifdef CONFIG_GRKERNSEC_RANDSTRUCT_PERFORMANCE | |
427 | +RANDSTRUCT_PLUGIN_CFLAGS += -fplugin-arg-randomize_layout_plugin-performance-mode | |
428 | +endif | |
429 | +endif | |
430 | +ifdef CONFIG_CHECKER_PLUGIN | |
431 | +ifeq ($(call cc-ifversion, -ge, 0406, y), y) | |
432 | +CHECKER_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/checker_plugin.so -DCHECKER_PLUGIN | |
433 | +endif | |
434 | +endif | |
435 | +COLORIZE_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/colorize_plugin.so | |
436 | +ifdef CONFIG_PAX_SIZE_OVERFLOW | |
437 | +SIZE_OVERFLOW_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/size_overflow_plugin/size_overflow_plugin.so -DSIZE_OVERFLOW_PLUGIN | |
438 | +endif | |
439 | +ifdef CONFIG_PAX_LATENT_ENTROPY | |
440 | +LATENT_ENTROPY_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/latent_entropy_plugin.so -DLATENT_ENTROPY_PLUGIN | |
441 | +endif | |
442 | +ifdef CONFIG_PAX_MEMORY_STRUCTLEAK | |
443 | +STRUCTLEAK_PLUGIN_CFLAGS := -fplugin=$(objtree)/tools/gcc/structleak_plugin.so -DSTRUCTLEAK_PLUGIN | |
444 | +endif | |
445 | +GCC_PLUGINS_CFLAGS := $(CONSTIFY_PLUGIN_CFLAGS) $(STACKLEAK_PLUGIN_CFLAGS) $(KALLOCSTAT_PLUGIN_CFLAGS) | |
446 | +GCC_PLUGINS_CFLAGS += $(KERNEXEC_PLUGIN_CFLAGS) $(CHECKER_PLUGIN_CFLAGS) $(COLORIZE_PLUGIN_CFLAGS) | |
447 | +GCC_PLUGINS_CFLAGS += $(SIZE_OVERFLOW_PLUGIN_CFLAGS) $(LATENT_ENTROPY_PLUGIN_CFLAGS) $(STRUCTLEAK_PLUGIN_CFLAGS) | |
448 | +GCC_PLUGINS_CFLAGS += $(RANDSTRUCT_PLUGIN_CFLAGS) | |
449 | +GCC_PLUGINS_AFLAGS := $(KERNEXEC_PLUGIN_AFLAGS) | |
450 | +export PLUGINCC GCC_PLUGINS_CFLAGS GCC_PLUGINS_AFLAGS CONSTIFY_PLUGIN LATENT_ENTROPY_PLUGIN_CFLAGS | |
451 | +ifeq ($(KBUILD_EXTMOD),) | |
452 | +gcc-plugins: | |
453 | + $(Q)$(MAKE) $(build)=tools/gcc | |
454 | +else | |
455 | +gcc-plugins: ; | |
456 | +endif | |
457 | +else | |
458 | +gcc-plugins: | |
459 | +ifeq ($(call cc-ifversion, -ge, 0405, y), y) | |
460 | + $(error Your gcc installation does not support plugins. If the necessary headers for plugin support are missing, they should be installed. On Debian, apt-get install gcc-<ver>-plugin-dev. If you choose to ignore this error and lessen the improvements provided by this patch, re-run make with the DISABLE_PAX_PLUGINS=y argument.)) | |
461 | +else | |
462 | + $(Q)echo "warning, your gcc version does not support plugins, you should upgrade it to gcc 4.5 at least" | |
463 | +endif | |
464 | + $(Q)echo "PAX_MEMORY_STACKLEAK, constification, PAX_LATENT_ENTROPY and other features will be less secure. PAX_SIZE_OVERFLOW will not be active." | |
465 | +endif | |
466 | +endif | |
467 | + | |
468 | ifdef CONFIG_READABLE_ASM | |
469 | # Disable optimizations that make assembler listings hard to read. | |
470 | # reorder blocks reorders the control in the function | |
471 | @@ -712,7 +780,7 @@ KBUILD_CFLAGS += $(call cc-option, -gsplit-dwarf, -g) | |
472 | else | |
473 | KBUILD_CFLAGS += -g | |
474 | endif | |
475 | -KBUILD_AFLAGS += -Wa,-gdwarf-2 | |
476 | +KBUILD_AFLAGS += -Wa,--gdwarf-2 | |
477 | endif | |
478 | ifdef CONFIG_DEBUG_INFO_DWARF4 | |
479 | KBUILD_CFLAGS += $(call cc-option, -gdwarf-4,) | |
480 | @@ -877,7 +945,7 @@ export mod_sign_cmd | |
481 | ||
482 | ||
483 | ifeq ($(KBUILD_EXTMOD),) | |
484 | -core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ | |
485 | +core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ grsecurity/ | |
486 | ||
487 | vmlinux-dirs := $(patsubst %/,%,$(filter %/, $(init-y) $(init-m) \ | |
488 | $(core-y) $(core-m) $(drivers-y) $(drivers-m) \ | |
489 | @@ -924,6 +992,8 @@ endif | |
490 | ||
491 | # The actual objects are generated when descending, | |
492 | # make sure no implicit rule kicks in | |
493 | +$(filter-out $(init-y),$(vmlinux-deps)): KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) | |
494 | +$(filter-out $(init-y),$(vmlinux-deps)): KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) | |
495 | $(sort $(vmlinux-deps)): $(vmlinux-dirs) ; | |
496 | ||
497 | # Handle descending into subdirectories listed in $(vmlinux-dirs) | |
498 | @@ -933,7 +1003,7 @@ $(sort $(vmlinux-deps)): $(vmlinux-dirs) ; | |
499 | # Error messages still appears in the original language | |
500 | ||
501 | PHONY += $(vmlinux-dirs) | |
502 | -$(vmlinux-dirs): prepare scripts | |
503 | +$(vmlinux-dirs): gcc-plugins prepare scripts | |
504 | $(Q)$(MAKE) $(build)=$@ | |
505 | ||
506 | define filechk_kernel.release | |
507 | @@ -976,10 +1046,13 @@ prepare1: prepare2 $(version_h) include/generated/utsrelease.h \ | |
508 | ||
509 | archprepare: archheaders archscripts prepare1 scripts_basic | |
510 | ||
511 | +prepare0: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) | |
512 | +prepare0: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) | |
513 | prepare0: archprepare FORCE | |
514 | $(Q)$(MAKE) $(build)=. | |
515 | ||
516 | # All the preparing.. | |
517 | +prepare: KBUILD_CFLAGS := $(filter-out $(GCC_PLUGINS_CFLAGS),$(KBUILD_CFLAGS)) | |
518 | prepare: prepare0 | |
519 | ||
520 | # Generate some files | |
521 | @@ -1094,6 +1167,8 @@ all: modules | |
522 | # using awk while concatenating to the final file. | |
523 | ||
524 | PHONY += modules | |
525 | +modules: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) | |
526 | +modules: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) | |
527 | modules: $(vmlinux-dirs) $(if $(KBUILD_BUILTIN),vmlinux) modules.builtin | |
528 | $(Q)$(AWK) '!x[$$0]++' $(vmlinux-dirs:%=$(objtree)/%/modules.order) > $(objtree)/modules.order | |
529 | @$(kecho) ' Building modules, stage 2.'; | |
530 | @@ -1109,7 +1184,7 @@ modules.builtin: $(vmlinux-dirs:%=%/modules.builtin) | |
531 | ||
532 | # Target to prepare building external modules | |
533 | PHONY += modules_prepare | |
534 | -modules_prepare: prepare scripts | |
535 | +modules_prepare: gcc-plugins prepare scripts | |
536 | ||
537 | # Target to install modules | |
538 | PHONY += modules_install | |
539 | @@ -1175,7 +1250,10 @@ MRPROPER_FILES += .config .config.old .version .old_version $(version_h) \ | |
540 | Module.symvers tags TAGS cscope* GPATH GTAGS GRTAGS GSYMS \ | |
541 | signing_key.priv signing_key.x509 x509.genkey \ | |
542 | extra_certificates signing_key.x509.keyid \ | |
543 | - signing_key.x509.signer include/linux/version.h | |
544 | + signing_key.x509.signer include/linux/version.h \ | |
545 | + tools/gcc/size_overflow_plugin/size_overflow_hash_aux.h \ | |
546 | + tools/gcc/size_overflow_plugin/size_overflow_hash.h \ | |
547 | + tools/gcc/randomize_layout_seed.h | |
548 | ||
549 | # clean - Delete most, but leave enough to build external modules | |
550 | # | |
551 | @@ -1214,7 +1292,7 @@ distclean: mrproper | |
552 | @find $(srctree) $(RCS_FIND_IGNORE) \ | |
553 | \( -name '*.orig' -o -name '*.rej' -o -name '*~' \ | |
554 | -o -name '*.bak' -o -name '#*#' -o -name '.*.orig' \ | |
555 | - -o -name '.*.rej' -o -name '*%' -o -name 'core' \) \ | |
556 | + -o -name '.*.rej' -o -name '*.so' -o -name '*%' -o -name 'core' \) \ | |
557 | -type f -print | xargs rm -f | |
558 | ||
559 | ||
560 | @@ -1380,6 +1458,8 @@ PHONY += $(module-dirs) modules | |
561 | $(module-dirs): crmodverdir $(objtree)/Module.symvers | |
562 | $(Q)$(MAKE) $(build)=$(patsubst _module_%,%,$@) | |
563 | ||
564 | +modules: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) | |
565 | +modules: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) | |
566 | modules: $(module-dirs) | |
567 | @$(kecho) ' Building modules, stage 2.'; | |
568 | $(Q)$(MAKE) -f $(srctree)/scripts/Makefile.modpost | |
569 | @@ -1520,17 +1600,21 @@ else | |
570 | target-dir = $(if $(KBUILD_EXTMOD),$(dir $<),$(dir $@)) | |
571 | endif | |
572 | ||
573 | -%.s: %.c prepare scripts FORCE | |
574 | +%.s: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) | |
575 | +%.s: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) | |
576 | +%.s: %.c gcc-plugins prepare scripts FORCE | |
577 | $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) | |
578 | %.i: %.c prepare scripts FORCE | |
579 | $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) | |
580 | -%.o: %.c prepare scripts FORCE | |
581 | +%.o: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) | |
582 | +%.o: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) | |
583 | +%.o: %.c gcc-plugins prepare scripts FORCE | |
584 | $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) | |
585 | %.lst: %.c prepare scripts FORCE | |
586 | $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) | |
587 | -%.s: %.S prepare scripts FORCE | |
588 | +%.s: %.S gcc-plugins prepare scripts FORCE | |
589 | $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) | |
590 | -%.o: %.S prepare scripts FORCE | |
591 | +%.o: %.S gcc-plugins prepare scripts FORCE | |
592 | $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) | |
593 | %.symtypes: %.c prepare scripts FORCE | |
594 | $(Q)$(MAKE) $(build)=$(build-dir) $(target-dir)$(notdir $@) | |
595 | @@ -1542,11 +1626,15 @@ endif | |
596 | $(build)=$(build-dir) | |
597 | # Make sure the latest headers are built for Documentation | |
598 | Documentation/: headers_install | |
599 | -%/: prepare scripts FORCE | |
600 | +%/: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) | |
601 | +%/: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) | |
602 | +%/: gcc-plugins prepare scripts FORCE | |
603 | $(cmd_crmodverdir) | |
604 | $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ | |
605 | $(build)=$(build-dir) | |
606 | -%.ko: prepare scripts FORCE | |
607 | +%.ko: KBUILD_CFLAGS += $(GCC_PLUGINS_CFLAGS) | |
608 | +%.ko: KBUILD_AFLAGS += $(GCC_PLUGINS_AFLAGS) | |
609 | +%.ko: gcc-plugins prepare scripts FORCE | |
610 | $(cmd_crmodverdir) | |
611 | $(Q)$(MAKE) KBUILD_MODULES=$(if $(CONFIG_MODULES),1) \ | |
612 | $(build)=$(build-dir) $(@:.ko=.o) | |
613 | diff --git a/arch/alpha/include/asm/atomic.h b/arch/alpha/include/asm/atomic.h | |
614 | index 8f8eafb..3405f46 100644 | |
615 | --- a/arch/alpha/include/asm/atomic.h | |
616 | +++ b/arch/alpha/include/asm/atomic.h | |
617 | @@ -239,4 +239,14 @@ static inline long atomic64_dec_if_positive(atomic64_t *v) | |
618 | #define atomic_dec(v) atomic_sub(1,(v)) | |
619 | #define atomic64_dec(v) atomic64_sub(1,(v)) | |
620 | ||
621 | +#define atomic64_read_unchecked(v) atomic64_read(v) | |
622 | +#define atomic64_set_unchecked(v, i) atomic64_set((v), (i)) | |
623 | +#define atomic64_add_unchecked(a, v) atomic64_add((a), (v)) | |
624 | +#define atomic64_add_return_unchecked(a, v) atomic64_add_return((a), (v)) | |
625 | +#define atomic64_sub_unchecked(a, v) atomic64_sub((a), (v)) | |
626 | +#define atomic64_inc_unchecked(v) atomic64_inc(v) | |
627 | +#define atomic64_inc_return_unchecked(v) atomic64_inc_return(v) | |
628 | +#define atomic64_dec_unchecked(v) atomic64_dec(v) | |
629 | +#define atomic64_cmpxchg_unchecked(v, o, n) atomic64_cmpxchg((v), (o), (n)) | |
630 | + | |
631 | #endif /* _ALPHA_ATOMIC_H */ | |
632 | diff --git a/arch/alpha/include/asm/cache.h b/arch/alpha/include/asm/cache.h | |
633 | index ad368a9..fbe0f25 100644 | |
634 | --- a/arch/alpha/include/asm/cache.h | |
635 | +++ b/arch/alpha/include/asm/cache.h | |
636 | @@ -4,19 +4,19 @@ | |
637 | #ifndef __ARCH_ALPHA_CACHE_H | |
638 | #define __ARCH_ALPHA_CACHE_H | |
639 | ||
640 | +#include <linux/const.h> | |
641 | ||
642 | /* Bytes per L1 (data) cache line. */ | |
643 | #if defined(CONFIG_ALPHA_GENERIC) || defined(CONFIG_ALPHA_EV6) | |
644 | -# define L1_CACHE_BYTES 64 | |
645 | # define L1_CACHE_SHIFT 6 | |
646 | #else | |
647 | /* Both EV4 and EV5 are write-through, read-allocate, | |
648 | direct-mapped, physical. | |
649 | */ | |
650 | -# define L1_CACHE_BYTES 32 | |
651 | # define L1_CACHE_SHIFT 5 | |
652 | #endif | |
653 | ||
654 | +#define L1_CACHE_BYTES (_AC(1,UL) << L1_CACHE_SHIFT) | |
655 | #define SMP_CACHE_BYTES L1_CACHE_BYTES | |
656 | ||
657 | #endif | |
658 | diff --git a/arch/alpha/include/asm/elf.h b/arch/alpha/include/asm/elf.h | |
659 | index 968d999..d36b2df 100644 | |
660 | --- a/arch/alpha/include/asm/elf.h | |
661 | +++ b/arch/alpha/include/asm/elf.h | |
662 | @@ -91,6 +91,13 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; | |
663 | ||
664 | #define ELF_ET_DYN_BASE (TASK_UNMAPPED_BASE + 0x1000000) | |
665 | ||
666 | +#ifdef CONFIG_PAX_ASLR | |
667 | +#define PAX_ELF_ET_DYN_BASE (current->personality & ADDR_LIMIT_32BIT ? 0x10000 : 0x120000000UL) | |
668 | + | |
669 | +#define PAX_DELTA_MMAP_LEN (current->personality & ADDR_LIMIT_32BIT ? 14 : 28) | |
670 | +#define PAX_DELTA_STACK_LEN (current->personality & ADDR_LIMIT_32BIT ? 14 : 19) | |
671 | +#endif | |
672 | + | |
673 | /* $0 is set by ld.so to a pointer to a function which might be | |
674 | registered using atexit. This provides a mean for the dynamic | |
675 | linker to call DT_FINI functions for shared libraries that have | |
676 | diff --git a/arch/alpha/include/asm/pgalloc.h b/arch/alpha/include/asm/pgalloc.h | |
677 | index aab14a0..b4fa3e7 100644 | |
678 | --- a/arch/alpha/include/asm/pgalloc.h | |
679 | +++ b/arch/alpha/include/asm/pgalloc.h | |
680 | @@ -29,6 +29,12 @@ pgd_populate(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd) | |
681 | pgd_set(pgd, pmd); | |
682 | } | |
683 | ||
684 | +static inline void | |
685 | +pgd_populate_kernel(struct mm_struct *mm, pgd_t *pgd, pmd_t *pmd) | |
686 | +{ | |
687 | + pgd_populate(mm, pgd, pmd); | |
688 | +} | |
689 | + | |
690 | extern pgd_t *pgd_alloc(struct mm_struct *mm); | |
691 | ||
692 | static inline void | |
693 | diff --git a/arch/alpha/include/asm/pgtable.h b/arch/alpha/include/asm/pgtable.h | |
694 | index d8f9b7e..f6222fa 100644 | |
695 | --- a/arch/alpha/include/asm/pgtable.h | |
696 | +++ b/arch/alpha/include/asm/pgtable.h | |
697 | @@ -102,6 +102,17 @@ struct vm_area_struct; | |
698 | #define PAGE_SHARED __pgprot(_PAGE_VALID | __ACCESS_BITS) | |
699 | #define PAGE_COPY __pgprot(_PAGE_VALID | __ACCESS_BITS | _PAGE_FOW) | |
700 | #define PAGE_READONLY __pgprot(_PAGE_VALID | __ACCESS_BITS | _PAGE_FOW) | |
701 | + | |
702 | +#ifdef CONFIG_PAX_PAGEEXEC | |
703 | +# define PAGE_SHARED_NOEXEC __pgprot(_PAGE_VALID | __ACCESS_BITS | _PAGE_FOE) | |
704 | +# define PAGE_COPY_NOEXEC __pgprot(_PAGE_VALID | __ACCESS_BITS | _PAGE_FOW | _PAGE_FOE) | |
705 | +# define PAGE_READONLY_NOEXEC __pgprot(_PAGE_VALID | __ACCESS_BITS | _PAGE_FOW | _PAGE_FOE) | |
706 | +#else | |
707 | +# define PAGE_SHARED_NOEXEC PAGE_SHARED | |
708 | +# define PAGE_COPY_NOEXEC PAGE_COPY | |
709 | +# define PAGE_READONLY_NOEXEC PAGE_READONLY | |
710 | +#endif | |
711 | + | |
712 | #define PAGE_KERNEL __pgprot(_PAGE_VALID | _PAGE_ASM | _PAGE_KRE | _PAGE_KWE) | |
713 | ||
714 | #define _PAGE_NORMAL(x) __pgprot(_PAGE_VALID | __ACCESS_BITS | (x)) | |
715 | diff --git a/arch/alpha/kernel/module.c b/arch/alpha/kernel/module.c | |
716 | index 2fd00b7..cfd5069 100644 | |
717 | --- a/arch/alpha/kernel/module.c | |
718 | +++ b/arch/alpha/kernel/module.c | |
719 | @@ -160,7 +160,7 @@ apply_relocate_add(Elf64_Shdr *sechdrs, const char *strtab, | |
720 | ||
721 | /* The small sections were sorted to the end of the segment. | |
722 | The following should definitely cover them. */ | |
723 | - gp = (u64)me->module_core + me->core_size - 0x8000; | |
724 | + gp = (u64)me->module_core_rw + me->core_size_rw - 0x8000; | |
725 | got = sechdrs[me->arch.gotsecindex].sh_addr; | |
726 | ||
727 | for (i = 0; i < n; i++) { | |
728 | diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c | |
729 | index f9c732e..78fbb0f 100644 | |
730 | --- a/arch/alpha/kernel/osf_sys.c | |
731 | +++ b/arch/alpha/kernel/osf_sys.c | |
732 | @@ -1295,10 +1295,11 @@ SYSCALL_DEFINE1(old_adjtimex, struct timex32 __user *, txc_p) | |
733 | generic version except that we know how to honor ADDR_LIMIT_32BIT. */ | |
734 | ||
735 | static unsigned long | |
736 | -arch_get_unmapped_area_1(unsigned long addr, unsigned long len, | |
737 | - unsigned long limit) | |
738 | +arch_get_unmapped_area_1(struct file *filp, unsigned long addr, unsigned long len, | |
739 | + unsigned long limit, unsigned long flags) | |
740 | { | |
741 | struct vm_unmapped_area_info info; | |
742 | + unsigned long offset = gr_rand_threadstack_offset(current->mm, filp, flags); | |
743 | ||
744 | info.flags = 0; | |
745 | info.length = len; | |
746 | @@ -1306,6 +1307,7 @@ arch_get_unmapped_area_1(unsigned long addr, unsigned long len, | |
747 | info.high_limit = limit; | |
748 | info.align_mask = 0; | |
749 | info.align_offset = 0; | |
750 | + info.threadstack_offset = offset; | |
751 | return vm_unmapped_area(&info); | |
752 | } | |
753 | ||
754 | @@ -1338,20 +1340,24 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, | |
755 | merely specific addresses, but regions of memory -- perhaps | |
756 | this feature should be incorporated into all ports? */ | |
757 | ||
758 | +#ifdef CONFIG_PAX_RANDMMAP | |
759 | + if (!(current->mm->pax_flags & MF_PAX_RANDMMAP)) | |
760 | +#endif | |
761 | + | |
762 | if (addr) { | |
763 | - addr = arch_get_unmapped_area_1 (PAGE_ALIGN(addr), len, limit); | |
764 | + addr = arch_get_unmapped_area_1 (filp, PAGE_ALIGN(addr), len, limit, flags); | |
765 | if (addr != (unsigned long) -ENOMEM) | |
766 | return addr; | |
767 | } | |
768 | ||
769 | /* Next, try allocating at TASK_UNMAPPED_BASE. */ | |
770 | - addr = arch_get_unmapped_area_1 (PAGE_ALIGN(TASK_UNMAPPED_BASE), | |
771 | - len, limit); | |
772 | + addr = arch_get_unmapped_area_1 (filp, PAGE_ALIGN(current->mm->mmap_base), len, limit, flags); | |
773 | + | |
774 | if (addr != (unsigned long) -ENOMEM) | |
775 | return addr; | |
776 | ||
777 | /* Finally, try allocating in low memory. */ | |
778 | - addr = arch_get_unmapped_area_1 (PAGE_SIZE, len, limit); | |
779 | + addr = arch_get_unmapped_area_1 (filp, PAGE_SIZE, len, limit, flags); | |
780 | ||
781 | return addr; | |
782 | } | |
783 | diff --git a/arch/alpha/mm/fault.c b/arch/alpha/mm/fault.c | |
784 | index 9d0ac09..479a962 100644 | |
785 | --- a/arch/alpha/mm/fault.c | |
786 | +++ b/arch/alpha/mm/fault.c | |
787 | @@ -53,6 +53,124 @@ __load_new_mm_context(struct mm_struct *next_mm) | |
788 | __reload_thread(pcb); | |
789 | } | |
790 | ||
791 | +#ifdef CONFIG_PAX_PAGEEXEC | |
792 | +/* | |
793 | + * PaX: decide what to do with offenders (regs->pc = fault address) | |
794 | + * | |
795 | + * returns 1 when task should be killed | |
796 | + * 2 when patched PLT trampoline was detected | |
797 | + * 3 when unpatched PLT trampoline was detected | |
798 | + */ | |
799 | +static int pax_handle_fetch_fault(struct pt_regs *regs) | |
800 | +{ | |
801 | + | |
802 | +#ifdef CONFIG_PAX_EMUPLT | |
803 | + int err; | |
804 | + | |
805 | + do { /* PaX: patched PLT emulation #1 */ | |
806 | + unsigned int ldah, ldq, jmp; | |
807 | + | |
808 | + err = get_user(ldah, (unsigned int *)regs->pc); | |
809 | + err |= get_user(ldq, (unsigned int *)(regs->pc+4)); | |
810 | + err |= get_user(jmp, (unsigned int *)(regs->pc+8)); | |
811 | + | |
812 | + if (err) | |
813 | + break; | |
814 | + | |
815 | + if ((ldah & 0xFFFF0000U) == 0x277B0000U && | |
816 | + (ldq & 0xFFFF0000U) == 0xA77B0000U && | |
817 | + jmp == 0x6BFB0000U) | |
818 | + { | |
819 | + unsigned long r27, addr; | |
820 | + unsigned long addrh = (ldah | 0xFFFFFFFFFFFF0000UL) << 16; | |
821 | + unsigned long addrl = ldq | 0xFFFFFFFFFFFF0000UL; | |
822 | + | |
823 | + addr = regs->r27 + ((addrh ^ 0x80000000UL) + 0x80000000UL) + ((addrl ^ 0x8000UL) + 0x8000UL); | |
824 | + err = get_user(r27, (unsigned long *)addr); | |
825 | + if (err) | |
826 | + break; | |
827 | + | |
828 | + regs->r27 = r27; | |
829 | + regs->pc = r27; | |
830 | + return 2; | |
831 | + } | |
832 | + } while (0); | |
833 | + | |
834 | + do { /* PaX: patched PLT emulation #2 */ | |
835 | + unsigned int ldah, lda, br; | |
836 | + | |
837 | + err = get_user(ldah, (unsigned int *)regs->pc); | |
838 | + err |= get_user(lda, (unsigned int *)(regs->pc+4)); | |
839 | + err |= get_user(br, (unsigned int *)(regs->pc+8)); | |
840 | + | |
841 | + if (err) | |
842 | + break; | |
843 | + | |
844 | + if ((ldah & 0xFFFF0000U) == 0x277B0000U && | |
845 | + (lda & 0xFFFF0000U) == 0xA77B0000U && | |
846 | + (br & 0xFFE00000U) == 0xC3E00000U) | |
847 | + { | |
848 | + unsigned long addr = br | 0xFFFFFFFFFFE00000UL; | |
849 | + unsigned long addrh = (ldah | 0xFFFFFFFFFFFF0000UL) << 16; | |
850 | + unsigned long addrl = lda | 0xFFFFFFFFFFFF0000UL; | |
851 | + | |
852 | + regs->r27 += ((addrh ^ 0x80000000UL) + 0x80000000UL) + ((addrl ^ 0x8000UL) + 0x8000UL); | |
853 | + regs->pc += 12 + (((addr ^ 0x00100000UL) + 0x00100000UL) << 2); | |
854 | + return 2; | |
855 | + } | |
856 | + } while (0); | |
857 | + | |
858 | + do { /* PaX: unpatched PLT emulation */ | |
859 | + unsigned int br; | |
860 | + | |
861 | + err = get_user(br, (unsigned int *)regs->pc); | |
862 | + | |
863 | + if (!err && (br & 0xFFE00000U) == 0xC3800000U) { | |
864 | + unsigned int br2, ldq, nop, jmp; | |
865 | + unsigned long addr = br | 0xFFFFFFFFFFE00000UL, resolver; | |
866 | + | |
867 | + addr = regs->pc + 4 + (((addr ^ 0x00100000UL) + 0x00100000UL) << 2); | |
868 | + err = get_user(br2, (unsigned int *)addr); | |
869 | + err |= get_user(ldq, (unsigned int *)(addr+4)); | |
870 | + err |= get_user(nop, (unsigned int *)(addr+8)); | |
871 | + err |= get_user(jmp, (unsigned int *)(addr+12)); | |
872 | + err |= get_user(resolver, (unsigned long *)(addr+16)); | |
873 | + | |
874 | + if (err) | |
875 | + break; | |
876 | + | |
877 | + if (br2 == 0xC3600000U && | |
878 | + ldq == 0xA77B000CU && | |
879 | + nop == 0x47FF041FU && | |
880 | + jmp == 0x6B7B0000U) | |
881 | + { | |
882 | + regs->r28 = regs->pc+4; | |
883 | + regs->r27 = addr+16; | |
884 | + regs->pc = resolver; | |
885 | + return 3; | |
886 | + } | |
887 | + } | |
888 | + } while (0); | |
889 | +#endif | |
890 | + | |
891 | + return 1; | |
892 | +} | |
893 | + | |
894 | +void pax_report_insns(struct pt_regs *regs, void *pc, void *sp) | |
895 | +{ | |
896 | + unsigned long i; | |
897 | + | |
898 | + printk(KERN_ERR "PAX: bytes at PC: "); | |
899 | + for (i = 0; i < 5; i++) { | |
900 | + unsigned int c; | |
901 | + if (get_user(c, (unsigned int *)pc+i)) | |
902 | + printk(KERN_CONT "???????? "); | |
903 | + else | |
904 | + printk(KERN_CONT "%08x ", c); | |
905 | + } | |
906 | + printk("\n"); | |
907 | +} | |
908 | +#endif | |
909 | ||
910 | /* | |
911 | * This routine handles page fault |