.. | .. |
---|
18 | 18 | select CRASH_CORE |
---|
19 | 19 | bool |
---|
20 | 20 | |
---|
| 21 | +config KEXEC_ELF |
---|
| 22 | + bool |
---|
| 23 | + |
---|
21 | 24 | config HAVE_IMA_KEXEC |
---|
| 25 | + bool |
---|
| 26 | + |
---|
| 27 | +config SET_FS |
---|
22 | 28 | bool |
---|
23 | 29 | |
---|
24 | 30 | config HOTPLUG_SMT |
---|
25 | 31 | bool |
---|
| 32 | + |
---|
| 33 | +config GENERIC_ENTRY |
---|
| 34 | + bool |
---|
26 | 35 | |
---|
27 | 36 | config OPROFILE |
---|
28 | 37 | tristate "OProfile system profiling" |
---|
.. | .. |
---|
69 | 78 | If in doubt, say "N". |
---|
70 | 79 | |
---|
71 | 80 | config JUMP_LABEL |
---|
72 | | - bool "Optimize very unlikely/likely branches" |
---|
73 | | - depends on HAVE_ARCH_JUMP_LABEL |
---|
74 | | - depends on CC_HAS_ASM_GOTO |
---|
75 | | - help |
---|
76 | | - This option enables a transparent branch optimization that |
---|
| 81 | + bool "Optimize very unlikely/likely branches" |
---|
| 82 | + depends on HAVE_ARCH_JUMP_LABEL |
---|
| 83 | + depends on CC_HAS_ASM_GOTO |
---|
| 84 | + help |
---|
| 85 | + This option enables a transparent branch optimization that |
---|
77 | 86 | makes certain almost-always-true or almost-always-false branch |
---|
78 | 87 | conditions even cheaper to execute within the kernel. |
---|
79 | 88 | |
---|
.. | .. |
---|
81 | 90 | scheduler functionality, networking code and KVM have such |
---|
82 | 91 | branches and include support for this optimization technique. |
---|
83 | 92 | |
---|
84 | | - If it is detected that the compiler has support for "asm goto", |
---|
| 93 | + If it is detected that the compiler has support for "asm goto", |
---|
85 | 94 | the kernel will compile such branches with just a nop |
---|
86 | 95 | instruction. When the condition flag is toggled to true, the |
---|
87 | 96 | nop will be converted to a jump instruction to execute the |
---|
.. | .. |
---|
100 | 109 | help |
---|
101 | 110 | Boot time self-test of the branch patching code. |
---|
102 | 111 | |
---|
| 112 | +config STATIC_CALL_SELFTEST |
---|
| 113 | + bool "Static call selftest" |
---|
| 114 | + depends on HAVE_STATIC_CALL |
---|
| 115 | + help |
---|
| 116 | + Boot time self-test of the call patching code. |
---|
| 117 | + |
---|
103 | 118 | config OPTPROBES |
---|
104 | 119 | def_bool y |
---|
105 | 120 | depends on KPROBES && HAVE_OPTPROBES |
---|
106 | | - select TASKS_RCU if PREEMPT |
---|
| 121 | + select TASKS_RCU if PREEMPTION |
---|
107 | 122 | |
---|
108 | 123 | config KPROBES_ON_FTRACE |
---|
109 | 124 | def_bool y |
---|
.. | .. |
---|
160 | 175 | problems with received packets if doing so would not help |
---|
161 | 176 | much. |
---|
162 | 177 | |
---|
163 | | - See Documentation/unaligned-memory-access.txt for more |
---|
| 178 | + See Documentation/core-api/unaligned-memory-access.rst for more |
---|
164 | 179 | information on the topic of unaligned memory accesses. |
---|
165 | 180 | |
---|
166 | 181 | config ARCH_USE_BUILTIN_BSWAP |
---|
167 | | - bool |
---|
168 | | - help |
---|
| 182 | + bool |
---|
| 183 | + help |
---|
169 | 184 | Modern versions of GCC (since 4.4) have builtin functions |
---|
170 | 185 | for handling byte-swapping. Using these, instead of the old |
---|
171 | 186 | inline assembler that the architecture code provides in the |
---|
.. | .. |
---|
234 | 249 | bool |
---|
235 | 250 | |
---|
236 | 251 | config GENERIC_SMP_IDLE_THREAD |
---|
237 | | - bool |
---|
| 252 | + bool |
---|
238 | 253 | |
---|
239 | 254 | config GENERIC_IDLE_POLL_SETUP |
---|
240 | | - bool |
---|
| 255 | + bool |
---|
241 | 256 | |
---|
242 | 257 | config ARCH_HAS_FORTIFY_SOURCE |
---|
243 | 258 | bool |
---|
.. | .. |
---|
245 | 260 | An architecture should select this when it can successfully |
---|
246 | 261 | build and run with CONFIG_FORTIFY_SOURCE. |
---|
247 | 262 | |
---|
| 263 | +# |
---|
| 264 | +# Select if the arch provides a historic keepinit alias for the retain_initrd |
---|
| 265 | +# command line option |
---|
| 266 | +# |
---|
| 267 | +config ARCH_HAS_KEEPINITRD |
---|
| 268 | + bool |
---|
| 269 | + |
---|
248 | 270 | # Select if arch has all set_memory_ro/rw/x/nx() functions in asm/cacheflush.h |
---|
249 | 271 | config ARCH_HAS_SET_MEMORY |
---|
250 | 272 | bool |
---|
251 | 273 | |
---|
| 274 | +# Select if arch has all set_direct_map_invalid/default() functions |
---|
| 275 | +config ARCH_HAS_SET_DIRECT_MAP |
---|
| 276 | + bool |
---|
| 277 | + |
---|
| 278 | +# |
---|
| 279 | +# Select if the architecture provides the arch_dma_set_uncached symbol to |
---|
| 280 | +# either provide an uncached segement alias for a DMA allocation, or |
---|
| 281 | +# to remap the page tables in place. |
---|
| 282 | +# |
---|
| 283 | +config ARCH_HAS_DMA_SET_UNCACHED |
---|
| 284 | + bool |
---|
| 285 | + |
---|
| 286 | +# |
---|
| 287 | +# Select if the architectures provides the arch_dma_clear_uncached symbol |
---|
| 288 | +# to undo an in-place page table remap for uncached access. |
---|
| 289 | +# |
---|
| 290 | +config ARCH_HAS_DMA_CLEAR_UNCACHED |
---|
| 291 | + bool |
---|
| 292 | + |
---|
| 293 | +config ARCH_HAS_CPU_FINALIZE_INIT |
---|
| 294 | + bool |
---|
| 295 | + |
---|
252 | 296 | # Select if arch init_task must go in the __init_task_data section |
---|
253 | 297 | config ARCH_TASK_STRUCT_ON_STACK |
---|
254 | | - bool |
---|
| 298 | + bool |
---|
255 | 299 | |
---|
256 | 300 | # Select if arch has its private alloc_task_struct() function |
---|
257 | 301 | config ARCH_TASK_STRUCT_ALLOCATOR |
---|
.. | .. |
---|
276 | 320 | config ARCH_WANTS_DYNAMIC_TASK_STRUCT |
---|
277 | 321 | bool |
---|
278 | 322 | |
---|
| 323 | +config ARCH_32BIT_OFF_T |
---|
| 324 | + bool |
---|
| 325 | + depends on !64BIT |
---|
| 326 | + help |
---|
| 327 | + All new 32-bit architectures should have 64-bit off_t type on |
---|
| 328 | + userspace side which corresponds to the loff_t kernel type. This |
---|
| 329 | + is the requirement for modern ABIs. Some existing architectures |
---|
| 330 | + still support 32-bit off_t. This option is enabled for all such |
---|
| 331 | + architectures explicitly. |
---|
| 332 | + |
---|
| 333 | +config HAVE_ASM_MODVERSIONS |
---|
| 334 | + bool |
---|
| 335 | + help |
---|
| 336 | + This symbol should be selected by an architecure if it provides |
---|
| 337 | + <asm/asm-prototypes.h> to support the module versioning for symbols |
---|
| 338 | + exported from assembly code. |
---|
| 339 | + |
---|
279 | 340 | config HAVE_REGS_AND_STACK_ACCESS_API |
---|
280 | 341 | bool |
---|
281 | 342 | help |
---|
.. | .. |
---|
291 | 352 | This symbol should be selected by an architecture if it |
---|
292 | 353 | supports an implementation of restartable sequences. |
---|
293 | 354 | |
---|
294 | | -config HAVE_CLK |
---|
| 355 | +config HAVE_FUNCTION_ARG_ACCESS_API |
---|
295 | 356 | bool |
---|
296 | 357 | help |
---|
297 | | - The <linux/clk.h> calls support software clock gating and |
---|
298 | | - thus are a key power management tool on many systems. |
---|
| 358 | + This symbol should be selected by an architecure if it supports |
---|
| 359 | + the API needed to access function arguments from pt_regs, |
---|
| 360 | + declared in asm/ptrace.h |
---|
299 | 361 | |
---|
300 | 362 | config HAVE_HW_BREAKPOINT |
---|
301 | 363 | bool |
---|
.. | .. |
---|
360 | 422 | config HAVE_ARCH_JUMP_LABEL |
---|
361 | 423 | bool |
---|
362 | 424 | |
---|
363 | | -config HAVE_RCU_TABLE_FREE |
---|
| 425 | +config HAVE_ARCH_JUMP_LABEL_RELATIVE |
---|
364 | 426 | bool |
---|
365 | 427 | |
---|
366 | | -config HAVE_RCU_TABLE_INVALIDATE |
---|
| 428 | +config MMU_GATHER_TABLE_FREE |
---|
367 | 429 | bool |
---|
| 430 | + |
---|
| 431 | +config MMU_GATHER_RCU_TABLE_FREE |
---|
| 432 | + bool |
---|
| 433 | + select MMU_GATHER_TABLE_FREE |
---|
| 434 | + |
---|
| 435 | +config MMU_GATHER_PAGE_SIZE |
---|
| 436 | + bool |
---|
| 437 | + |
---|
| 438 | +config MMU_GATHER_NO_RANGE |
---|
| 439 | + bool |
---|
| 440 | + |
---|
| 441 | +config MMU_GATHER_NO_GATHER |
---|
| 442 | + bool |
---|
| 443 | + depends on MMU_GATHER_TABLE_FREE |
---|
368 | 444 | |
---|
369 | 445 | config ARCH_WANT_IRQS_OFF_ACTIVATE_MM |
---|
370 | 446 | bool |
---|
.. | .. |
---|
403 | 479 | select ARCH_WANT_COMPAT_IPC_PARSE_VERSION |
---|
404 | 480 | bool |
---|
405 | 481 | |
---|
406 | | -config HAVE_ARCH_SECCOMP_FILTER |
---|
| 482 | +config HAVE_ARCH_SECCOMP |
---|
407 | 483 | bool |
---|
408 | 484 | help |
---|
| 485 | + An arch should select this symbol to support seccomp mode 1 (the fixed |
---|
| 486 | + syscall policy), and must provide an overrides for __NR_seccomp_sigreturn, |
---|
| 487 | + and compat syscalls if the asm-generic/seccomp.h defaults need adjustment: |
---|
| 488 | + - __NR_seccomp_read_32 |
---|
| 489 | + - __NR_seccomp_write_32 |
---|
| 490 | + - __NR_seccomp_exit_32 |
---|
| 491 | + - __NR_seccomp_sigreturn_32 |
---|
| 492 | + |
---|
| 493 | +config HAVE_ARCH_SECCOMP_FILTER |
---|
| 494 | + bool |
---|
| 495 | + select HAVE_ARCH_SECCOMP |
---|
| 496 | + help |
---|
409 | 497 | An arch should select this symbol if it provides all of these things: |
---|
| 498 | + - all the requirements for HAVE_ARCH_SECCOMP |
---|
410 | 499 | - syscall_get_arch() |
---|
411 | 500 | - syscall_get_arguments() |
---|
412 | 501 | - syscall_rollback() |
---|
.. | .. |
---|
416 | 505 | - secure_computing return value is checked and a return value of -1 |
---|
417 | 506 | results in the system call being skipped immediately. |
---|
418 | 507 | - seccomp syscall wired up |
---|
| 508 | + |
---|
| 509 | +config SECCOMP |
---|
| 510 | + prompt "Enable seccomp to safely execute untrusted bytecode" |
---|
| 511 | + def_bool y |
---|
| 512 | + depends on HAVE_ARCH_SECCOMP |
---|
| 513 | + help |
---|
| 514 | + This kernel feature is useful for number crunching applications |
---|
| 515 | + that may need to handle untrusted bytecode during their |
---|
| 516 | + execution. By using pipes or other transports made available |
---|
| 517 | + to the process as file descriptors supporting the read/write |
---|
| 518 | + syscalls, it's possible to isolate those applications in their |
---|
| 519 | + own address space using seccomp. Once seccomp is enabled via |
---|
| 520 | + prctl(PR_SET_SECCOMP) or the seccomp() syscall, it cannot be |
---|
| 521 | + disabled and the task is only allowed to execute a few safe |
---|
| 522 | + syscalls defined by each seccomp mode. |
---|
| 523 | + |
---|
| 524 | + If unsure, say Y. |
---|
419 | 525 | |
---|
420 | 526 | config SECCOMP_FILTER |
---|
421 | 527 | def_bool y |
---|
.. | .. |
---|
427 | 533 | |
---|
428 | 534 | See Documentation/userspace-api/seccomp_filter.rst for details. |
---|
429 | 535 | |
---|
| 536 | +config HAVE_ARCH_STACKLEAK |
---|
| 537 | + bool |
---|
| 538 | + help |
---|
| 539 | + An architecture should select this if it has the code which |
---|
| 540 | + fills the used part of the kernel stack with the STACKLEAK_POISON |
---|
| 541 | + value before returning from system calls. |
---|
| 542 | + |
---|
430 | 543 | config HAVE_STACKPROTECTOR |
---|
431 | 544 | bool |
---|
432 | 545 | help |
---|
433 | 546 | An arch should select this symbol if: |
---|
434 | 547 | - it has implemented a stack canary (e.g. __stack_chk_guard) |
---|
435 | | - |
---|
436 | | -config CC_HAS_STACKPROTECTOR_NONE |
---|
437 | | - def_bool $(cc-option,-fno-stack-protector) |
---|
438 | 548 | |
---|
439 | 549 | config STACKPROTECTOR |
---|
440 | 550 | bool "Stack Protector buffer overflow detection" |
---|
.. | .. |
---|
482 | 592 | about 20% of all kernel functions, which increases the kernel code |
---|
483 | 593 | size by about 2%. |
---|
484 | 594 | |
---|
| 595 | +config ARCH_SUPPORTS_SHADOW_CALL_STACK |
---|
| 596 | + bool |
---|
| 597 | + help |
---|
| 598 | + An architecture should select this if it supports Clang's Shadow |
---|
| 599 | + Call Stack and implements runtime support for shadow stack |
---|
| 600 | + switching. |
---|
| 601 | + |
---|
| 602 | +config SHADOW_CALL_STACK |
---|
| 603 | + bool "Clang Shadow Call Stack" |
---|
| 604 | + depends on CC_IS_CLANG && ARCH_SUPPORTS_SHADOW_CALL_STACK |
---|
| 605 | + depends on DYNAMIC_FTRACE_WITH_REGS || !FUNCTION_GRAPH_TRACER |
---|
| 606 | + help |
---|
| 607 | + This option enables Clang's Shadow Call Stack, which uses a |
---|
| 608 | + shadow stack to protect function return addresses from being |
---|
| 609 | + overwritten by an attacker. More information can be found in |
---|
| 610 | + Clang's documentation: |
---|
| 611 | + |
---|
| 612 | + https://clang.llvm.org/docs/ShadowCallStack.html |
---|
| 613 | + |
---|
| 614 | + Note that security guarantees in the kernel differ from the |
---|
| 615 | + ones documented for user space. The kernel must store addresses |
---|
| 616 | + of shadow stacks in memory, which means an attacker capable of |
---|
| 617 | + reading and writing arbitrary memory may be able to locate them |
---|
| 618 | + and hijack control flow by modifying the stacks. |
---|
| 619 | + |
---|
485 | 620 | config LTO |
---|
486 | | - def_bool n |
---|
| 621 | + bool |
---|
| 622 | + help |
---|
| 623 | + Selected if the kernel will be built using the compiler's LTO feature. |
---|
| 624 | + |
---|
| 625 | +config LTO_CLANG |
---|
| 626 | + bool |
---|
| 627 | + select LTO |
---|
| 628 | + help |
---|
| 629 | + Selected if the kernel will be built using Clang's LTO feature. |
---|
487 | 630 | |
---|
488 | 631 | config ARCH_SUPPORTS_LTO_CLANG |
---|
489 | 632 | bool |
---|
490 | 633 | help |
---|
491 | 634 | An architecture should select this option if it supports: |
---|
492 | | - - compiling with clang, |
---|
493 | | - - compiling inline assembly with clang's integrated assembler, |
---|
| 635 | + - compiling with Clang, |
---|
| 636 | + - compiling inline assembly with Clang's integrated assembler, |
---|
494 | 637 | - and linking with LLD. |
---|
495 | 638 | |
---|
496 | | -config ARCH_SUPPORTS_THINLTO |
---|
| 639 | +config ARCH_SUPPORTS_LTO_CLANG_THIN |
---|
497 | 640 | bool |
---|
498 | 641 | help |
---|
499 | | - An architecture should select this if it supports clang's ThinLTO. |
---|
| 642 | + An architecture should select this option if it can support Clang's |
---|
| 643 | + ThinLTO mode. |
---|
500 | 644 | |
---|
501 | | -config THINLTO |
---|
502 | | - bool "Use clang ThinLTO (EXPERIMENTAL)" |
---|
503 | | - depends on LTO_CLANG && ARCH_SUPPORTS_THINLTO |
---|
504 | | - default y |
---|
| 645 | +config HAS_LTO_CLANG |
---|
| 646 | + def_bool y |
---|
| 647 | + # Clang >= 11: https://github.com/ClangBuiltLinux/linux/issues/510 |
---|
| 648 | + depends on CC_IS_CLANG && CLANG_VERSION >= 110000 && LD_IS_LLD |
---|
| 649 | + depends on $(success,test $(LLVM) -eq 1) |
---|
| 650 | + depends on $(success,test $(LLVM_IAS) -eq 1) |
---|
| 651 | + depends on $(success,$(NM) --help | head -n 1 | grep -qi llvm) |
---|
| 652 | + depends on $(success,$(AR) --help | head -n 1 | grep -qi llvm) |
---|
| 653 | + depends on ARCH_SUPPORTS_LTO_CLANG |
---|
| 654 | + depends on !FTRACE_MCOUNT_USE_RECORDMCOUNT |
---|
| 655 | + depends on !KASAN || KASAN_HW_TAGS |
---|
| 656 | + depends on !GCOV_KERNEL |
---|
505 | 657 | help |
---|
506 | | - Use ThinLTO to speed up Link Time Optimization. |
---|
| 658 | + The compiler and Kconfig options support building with Clang's |
---|
| 659 | + LTO. |
---|
507 | 660 | |
---|
508 | 661 | choice |
---|
509 | | - prompt "Link-Time Optimization (LTO) (EXPERIMENTAL)" |
---|
| 662 | + prompt "Link Time Optimization (LTO)" |
---|
510 | 663 | default LTO_NONE |
---|
511 | 664 | help |
---|
512 | | - This option turns on Link-Time Optimization (LTO). |
---|
| 665 | + This option enables Link Time Optimization (LTO), which allows the |
---|
| 666 | + compiler to optimize binaries globally. |
---|
| 667 | + |
---|
| 668 | + If unsure, select LTO_NONE. Note that LTO is very resource-intensive |
---|
| 669 | + so it's disabled by default. |
---|
513 | 670 | |
---|
514 | 671 | config LTO_NONE |
---|
515 | 672 | bool "None" |
---|
516 | | - |
---|
517 | | -config LTO_CLANG |
---|
518 | | - bool "Use clang Link Time Optimization (LTO) (EXPERIMENTAL)" |
---|
519 | | - depends on ARCH_SUPPORTS_LTO_CLANG |
---|
520 | | - depends on !FTRACE_MCOUNT_RECORD || HAVE_C_RECORDMCOUNT |
---|
521 | | - depends on !KASAN |
---|
522 | | - depends on CC_IS_CLANG && LD_IS_LLD |
---|
523 | | - select LTO |
---|
524 | 673 | help |
---|
525 | | - This option enables clang's Link Time Optimization (LTO), which allows |
---|
526 | | - the compiler to optimize the kernel globally at link time. If you |
---|
527 | | - enable this option, the compiler generates LLVM IR instead of object |
---|
528 | | - files, and the actual compilation from IR occurs at the LTO link step, |
---|
529 | | - which may take several minutes. |
---|
| 674 | + Build the kernel normally, without Link Time Optimization (LTO). |
---|
530 | 675 | |
---|
531 | | - If you select this option, you must compile the kernel with clang and |
---|
532 | | - LLD. |
---|
| 676 | +config LTO_CLANG_FULL |
---|
| 677 | + bool "Clang Full LTO (EXPERIMENTAL)" |
---|
| 678 | + depends on HAS_LTO_CLANG |
---|
| 679 | + depends on !COMPILE_TEST |
---|
| 680 | + select LTO_CLANG |
---|
| 681 | + help |
---|
| 682 | + This option enables Clang's full Link Time Optimization (LTO), which |
---|
| 683 | + allows the compiler to optimize the kernel globally. If you enable |
---|
| 684 | + this option, the compiler generates LLVM bitcode instead of ELF |
---|
| 685 | + object files, and the actual compilation from bitcode happens at |
---|
| 686 | + the LTO link step, which may take several minutes depending on the |
---|
| 687 | + kernel configuration. More information can be found from LLVM's |
---|
| 688 | + documentation: |
---|
533 | 689 | |
---|
| 690 | + https://llvm.org/docs/LinkTimeOptimization.html |
---|
| 691 | + |
---|
| 692 | + During link time, this option can use a large amount of RAM, and |
---|
| 693 | + may take much longer than the ThinLTO option. |
---|
| 694 | + |
---|
| 695 | +config LTO_CLANG_THIN |
---|
| 696 | + bool "Clang ThinLTO (EXPERIMENTAL)" |
---|
| 697 | + depends on HAS_LTO_CLANG && ARCH_SUPPORTS_LTO_CLANG_THIN |
---|
| 698 | + select LTO_CLANG |
---|
| 699 | + help |
---|
| 700 | + This option enables Clang's ThinLTO, which allows for parallel |
---|
| 701 | + optimization and faster incremental compiles compared to the |
---|
| 702 | + CONFIG_LTO_CLANG_FULL option. More information can be found |
---|
| 703 | + from Clang's documentation: |
---|
| 704 | + |
---|
| 705 | + https://clang.llvm.org/docs/ThinLTO.html |
---|
| 706 | + |
---|
| 707 | + If unsure, say Y. |
---|
534 | 708 | endchoice |
---|
535 | 709 | |
---|
536 | | -config CFI |
---|
537 | | - bool |
---|
538 | | - |
---|
539 | | -config CFI_PERMISSIVE |
---|
540 | | - bool "Use CFI in permissive mode" |
---|
541 | | - depends on CFI |
---|
542 | | - help |
---|
543 | | - When selected, Control Flow Integrity (CFI) violations result in a |
---|
544 | | - warning instead of a kernel panic. This option is useful for finding |
---|
545 | | - CFI violations in drivers during development. |
---|
546 | | - |
---|
547 | 710 | config CFI_CLANG |
---|
548 | | - bool "Use clang Control Flow Integrity (CFI) (EXPERIMENTAL)" |
---|
549 | | - depends on LTO_CLANG |
---|
550 | | - depends on KALLSYMS |
---|
551 | | - select CFI |
---|
| 711 | + bool "Use Clang's Control Flow Integrity (CFI)" |
---|
| 712 | + depends on LTO_CLANG && KALLSYMS |
---|
552 | 713 | help |
---|
553 | | - This option enables clang Control Flow Integrity (CFI), which adds |
---|
| 714 | + This option enables Clang's Control Flow Integrity (CFI), which adds |
---|
554 | 715 | runtime checking for indirect function calls. |
---|
555 | 716 | |
---|
556 | 717 | config CFI_CLANG_SHADOW |
---|
557 | 718 | bool "Use CFI shadow to speed up cross-module checks" |
---|
558 | 719 | default y |
---|
559 | | - depends on CFI_CLANG |
---|
| 720 | + depends on CFI_CLANG && MODULES |
---|
560 | 721 | help |
---|
561 | 722 | If you select this option, the kernel builds a fast look-up table of |
---|
562 | 723 | CFI check functions in loaded modules to reduce overhead. |
---|
563 | 724 | |
---|
564 | | -config ARCH_SUPPORTS_SHADOW_CALL_STACK |
---|
565 | | - bool |
---|
| 725 | +config CFI_PERMISSIVE |
---|
| 726 | + bool "Use CFI in permissive mode" |
---|
| 727 | + depends on CFI_CLANG |
---|
566 | 728 | help |
---|
567 | | - An architecture should select this if it supports Clang's Shadow |
---|
568 | | - Call Stack, has asm/scs.h, and implements runtime support for shadow |
---|
569 | | - stack switching. |
---|
570 | | - |
---|
571 | | -config SHADOW_CALL_STACK |
---|
572 | | - bool "Clang Shadow Call Stack" |
---|
573 | | - depends on ARCH_SUPPORTS_SHADOW_CALL_STACK |
---|
574 | | - help |
---|
575 | | - This option enables Clang's Shadow Call Stack, which uses a |
---|
576 | | - shadow stack to protect function return addresses from being |
---|
577 | | - overwritten by an attacker. More information can be found from |
---|
578 | | - Clang's documentation: |
---|
579 | | - |
---|
580 | | - https://clang.llvm.org/docs/ShadowCallStack.html |
---|
581 | | - |
---|
582 | | - Note that security guarantees in the kernel differ from the ones |
---|
583 | | - documented for user space. The kernel must store addresses of shadow |
---|
584 | | - stacks used by other tasks and interrupt handlers in memory, which |
---|
585 | | - means an attacker capable reading and writing arbitrary memory may |
---|
586 | | - be able to locate them and hijack control flow by modifying shadow |
---|
587 | | - stacks that are not currently in use. |
---|
588 | | - |
---|
589 | | -config SHADOW_CALL_STACK_VMAP |
---|
590 | | - bool "Use virtually mapped shadow call stacks" |
---|
591 | | - depends on SHADOW_CALL_STACK |
---|
592 | | - help |
---|
593 | | - Use virtually mapped shadow call stacks. Selecting this option |
---|
594 | | - provides better stack exhaustion protection, but increases per-thread |
---|
595 | | - memory consumption as a full page is allocated for each shadow stack. |
---|
| 729 | + When selected, Control Flow Integrity (CFI) violations result in a |
---|
| 730 | + warning instead of a kernel panic. This option is useful for finding |
---|
| 731 | + CFI violations during development. |
---|
596 | 732 | |
---|
597 | 733 | config HAVE_ARCH_WITHIN_STACK_FRAMES |
---|
598 | 734 | bool |
---|
.. | .. |
---|
608 | 744 | help |
---|
609 | 745 | Provide kernel/user boundaries probes necessary for subsystems |
---|
610 | 746 | that need it, such as userspace RCU extended quiescent state. |
---|
611 | | - Syscalls need to be wrapped inside user_exit()-user_enter() through |
---|
612 | | - the slow path using TIF_NOHZ flag. Exceptions handlers must be |
---|
613 | | - wrapped as well. Irqs are already protected inside |
---|
614 | | - rcu_irq_enter/rcu_irq_exit() but preemption or signal handling on |
---|
615 | | - irq exit still need to be protected. |
---|
| 747 | + Syscalls need to be wrapped inside user_exit()-user_enter(), either |
---|
| 748 | + optimized behind static key or through the slow path using TIF_NOHZ |
---|
| 749 | + flag. Exceptions handlers must be wrapped as well. Irqs are already |
---|
| 750 | + protected inside rcu_irq_enter/rcu_irq_exit() but preemption or signal |
---|
| 751 | + handling on irq exit still need to be protected. |
---|
| 752 | + |
---|
| 753 | +config HAVE_TIF_NOHZ |
---|
| 754 | + bool |
---|
| 755 | + help |
---|
| 756 | + Arch relies on TIF_NOHZ and syscall slow path to implement context |
---|
| 757 | + tracking calls to user_enter()/user_exit(). |
---|
616 | 758 | |
---|
617 | 759 | config HAVE_VIRT_CPU_ACCOUNTING |
---|
618 | 760 | bool |
---|
.. | .. |
---|
638 | 780 | Archs need to ensure they use a high enough resolution clock to |
---|
639 | 781 | support irq time accounting and then call enable_sched_clock_irqtime(). |
---|
640 | 782 | |
---|
| 783 | +config HAVE_MOVE_PUD |
---|
| 784 | + bool |
---|
| 785 | + help |
---|
| 786 | + Architectures that select this are able to move page tables at the |
---|
| 787 | + PUD level. If there are only 3 page table levels, the move effectively |
---|
| 788 | + happens at the PGD level. |
---|
| 789 | + |
---|
| 790 | +config HAVE_MOVE_PMD |
---|
| 791 | + bool |
---|
| 792 | + help |
---|
| 793 | + Archs that select this are able to move page tables at the PMD level. |
---|
| 794 | + |
---|
641 | 795 | config HAVE_ARCH_TRANSPARENT_HUGEPAGE |
---|
642 | 796 | bool |
---|
643 | 797 | |
---|
.. | .. |
---|
645 | 799 | bool |
---|
646 | 800 | |
---|
647 | 801 | config HAVE_ARCH_HUGE_VMAP |
---|
| 802 | + bool |
---|
| 803 | + |
---|
| 804 | +config ARCH_WANT_HUGE_PMD_SHARE |
---|
648 | 805 | bool |
---|
649 | 806 | |
---|
650 | 807 | config HAVE_ARCH_SOFT_DIRTY |
---|
.. | .. |
---|
771 | 928 | and vice-versa 32-bit applications to call 64-bit mmap(). |
---|
772 | 929 | Required for applications doing different bitness syscalls. |
---|
773 | 930 | |
---|
774 | | -config HAVE_COPY_THREAD_TLS |
---|
| 931 | +# This allows to use a set of generic functions to determine mmap base |
---|
| 932 | +# address by giving priority to top-down scheme only if the process |
---|
| 933 | +# is not in legacy mode (compat task, unlimited stack size or |
---|
| 934 | +# sysctl_legacy_va_layout). |
---|
| 935 | +# Architecture that selects this option can provide its own version of: |
---|
| 936 | +# - STACK_RND_MASK |
---|
| 937 | +config ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT |
---|
775 | 938 | bool |
---|
776 | | - help |
---|
777 | | - Architecture provides copy_thread_tls to accept tls argument via |
---|
778 | | - normal C parameter passing, rather than extracting the syscall |
---|
779 | | - argument from pt_regs. |
---|
| 939 | + depends on MMU |
---|
| 940 | + select ARCH_HAS_ELF_RANDOMIZE |
---|
780 | 941 | |
---|
781 | 942 | config HAVE_STACK_VALIDATION |
---|
782 | 943 | bool |
---|
.. | .. |
---|
787 | 948 | config HAVE_RELIABLE_STACKTRACE |
---|
788 | 949 | bool |
---|
789 | 950 | help |
---|
790 | | - Architecture has a save_stack_trace_tsk_reliable() function which |
---|
791 | | - only returns a stack trace if it can guarantee the trace is reliable. |
---|
| 951 | + Architecture has either save_stack_trace_tsk_reliable() or |
---|
| 952 | + arch_stack_walk_reliable() function which only returns a stack trace |
---|
| 953 | + if it can guarantee the trace is reliable. |
---|
792 | 954 | |
---|
793 | 955 | config HAVE_ARCH_HASH |
---|
794 | 956 | bool |
---|
.. | .. |
---|
797 | 959 | If this is set, the architecture provides an <asm/hash.h> |
---|
798 | 960 | file which provides platform-specific implementations of some |
---|
799 | 961 | functions in <linux/hash.h> or fs/namei.c. |
---|
| 962 | + |
---|
| 963 | +config HAVE_ARCH_NVRAM_OPS |
---|
| 964 | + bool |
---|
800 | 965 | |
---|
801 | 966 | config ISA_BUS_API |
---|
802 | 967 | def_bool ISA |
---|
.. | .. |
---|
847 | 1012 | config COMPAT_OLD_SIGACTION |
---|
848 | 1013 | bool |
---|
849 | 1014 | |
---|
850 | | -config 64BIT_TIME |
---|
851 | | - def_bool ARCH_HAS_64BIT_TIME |
---|
852 | | - help |
---|
853 | | - This should be selected by all architectures that need to support |
---|
854 | | - new system calls with a 64-bit time_t. This is relevant on all 32-bit |
---|
855 | | - architectures, and 64-bit architectures as part of compat syscall |
---|
856 | | - handling. |
---|
857 | | - |
---|
858 | 1015 | config COMPAT_32BIT_TIME |
---|
859 | | - def_bool (!64BIT && 64BIT_TIME) || COMPAT |
---|
| 1016 | + bool "Provide system calls for 32-bit time_t" |
---|
| 1017 | + default !64BIT || COMPAT |
---|
860 | 1018 | help |
---|
861 | 1019 | This enables 32 bit time_t support in addition to 64 bit time_t support. |
---|
862 | 1020 | This is relevant on all 32-bit architectures, and 64-bit architectures |
---|
863 | 1021 | as part of compat syscall handling. |
---|
864 | 1022 | |
---|
865 | | -config ARCH_NO_COHERENT_DMA_MMAP |
---|
| 1023 | +config ARCH_NO_PREEMPT |
---|
866 | 1024 | bool |
---|
867 | 1025 | |
---|
868 | | -config ARCH_NO_PREEMPT |
---|
| 1026 | +config ARCH_SUPPORTS_RT |
---|
869 | 1027 | bool |
---|
870 | 1028 | |
---|
871 | 1029 | config CPU_NO_EFFICIENT_FFS |
---|
.. | .. |
---|
894 | 1052 | config VMAP_STACK |
---|
895 | 1053 | default y |
---|
896 | 1054 | bool "Use a virtually-mapped stack" |
---|
897 | | - depends on HAVE_ARCH_VMAP_STACK && !KASAN |
---|
898 | | - ---help--- |
---|
| 1055 | + depends on HAVE_ARCH_VMAP_STACK |
---|
| 1056 | + depends on !KASAN || KASAN_HW_TAGS || KASAN_VMALLOC |
---|
| 1057 | + help |
---|
899 | 1058 | Enable this if you want the use virtually-mapped kernel stacks |
---|
900 | 1059 | with guard pages. This causes kernel stack overflows to be |
---|
901 | 1060 | caught immediately rather than causing difficult-to-diagnose |
---|
902 | 1061 | corruption. |
---|
903 | 1062 | |
---|
904 | | - This is presently incompatible with KASAN because KASAN expects |
---|
905 | | - the stack to map directly to the KASAN shadow map using a formula |
---|
906 | | - that is incorrect if the stack is in vmalloc space. |
---|
| 1063 | + To use this with software KASAN modes, the architecture must support |
---|
| 1064 | + backing virtual mappings with real shadow memory, and KASAN_VMALLOC |
---|
| 1065 | + must be enabled. |
---|
907 | 1066 | |
---|
908 | 1067 | config ARCH_OPTIONAL_KERNEL_RWX |
---|
909 | 1068 | def_bool n |
---|
.. | .. |
---|
943 | 1102 | config ARCH_HAS_PHYS_TO_DMA |
---|
944 | 1103 | bool |
---|
945 | 1104 | |
---|
946 | | -config ARCH_HAS_REFCOUNT |
---|
947 | | - bool |
---|
948 | | - help |
---|
949 | | - An architecture selects this when it has implemented refcount_t |
---|
950 | | - using open coded assembly primitives that provide an optimized |
---|
951 | | - refcount_t implementation, possibly at the expense of some full |
---|
952 | | - refcount state checks of CONFIG_REFCOUNT_FULL=y. |
---|
953 | | - |
---|
954 | | - The refcount overflow check behavior, however, must be retained. |
---|
955 | | - Catching overflows is the primary security concern for protecting |
---|
956 | | - against bugs in reference counts. |
---|
957 | | - |
---|
958 | | -config REFCOUNT_FULL |
---|
959 | | - bool "Perform full reference count validation at the expense of speed" |
---|
960 | | - help |
---|
961 | | - Enabling this switches the refcounting infrastructure from a fast |
---|
962 | | - unchecked atomic_t implementation to a fully state checked |
---|
963 | | - implementation, which can be (slightly) slower but provides protections |
---|
964 | | - against various use-after-free conditions that can be used in |
---|
965 | | - security flaw exploits. |
---|
966 | | - |
---|
967 | 1105 | config HAVE_ARCH_COMPILER_H |
---|
968 | 1106 | bool |
---|
969 | 1107 | help |
---|
.. | .. |
---|
985 | 1123 | config ARCH_USE_MEMREMAP_PROT |
---|
986 | 1124 | bool |
---|
987 | 1125 | |
---|
| 1126 | +config LOCK_EVENT_COUNTS |
---|
| 1127 | + bool "Locking event counts collection" |
---|
| 1128 | + depends on DEBUG_FS |
---|
| 1129 | + help |
---|
| 1130 | + Enable light-weight counting of various locking related events |
---|
| 1131 | + in the system with minimal performance impact. This reduces |
---|
| 1132 | + the chance of application behavior change because of timing |
---|
| 1133 | + differences. The counts are reported via debugfs. |
---|
| 1134 | + |
---|
988 | 1135 | # Select if the architecture has support for applying RELR relocations. |
---|
989 | 1136 | config ARCH_HAS_RELR |
---|
990 | 1137 | bool |
---|
.. | .. |
---|
999 | 1146 | well as compatible NM and OBJCOPY utilities (llvm-nm and llvm-objcopy |
---|
1000 | 1147 | are compatible). |
---|
1001 | 1148 | |
---|
| 1149 | +config ARCH_HAS_MEM_ENCRYPT |
---|
| 1150 | + bool |
---|
| 1151 | + |
---|
| 1152 | +config ARCH_HAS_CC_PLATFORM |
---|
| 1153 | + bool |
---|
| 1154 | + |
---|
| 1155 | +config HAVE_SPARSE_SYSCALL_NR |
---|
| 1156 | + bool |
---|
| 1157 | + help |
---|
| 1158 | + An architecture should select this if its syscall numbering is sparse |
---|
| 1159 | + to save space. For example, MIPS architecture has a syscall array with |
---|
| 1160 | + entries at 4000, 5000 and 6000 locations. This option turns on syscall |
---|
| 1161 | + related optimizations for a given architecture. |
---|
| 1162 | + |
---|
| 1163 | +config ARCH_HAS_VDSO_DATA |
---|
| 1164 | + bool |
---|
| 1165 | + |
---|
| 1166 | +config HAVE_STATIC_CALL |
---|
| 1167 | + bool |
---|
| 1168 | + |
---|
| 1169 | +config HAVE_STATIC_CALL_INLINE |
---|
| 1170 | + bool |
---|
| 1171 | + depends on HAVE_STATIC_CALL |
---|
| 1172 | + |
---|
| 1173 | +config ARCH_WANT_LD_ORPHAN_WARN |
---|
| 1174 | + bool |
---|
| 1175 | + help |
---|
| 1176 | + An arch should select this symbol once all linker sections are explicitly |
---|
| 1177 | + included, size-asserted, or discarded in the linker scripts. This is |
---|
| 1178 | + important because we never want expected sections to be placed heuristically |
---|
| 1179 | + by the linker, since the locations of such sections can change between linker |
---|
| 1180 | + versions. |
---|
| 1181 | + |
---|
| 1182 | +config ARCH_SPLIT_ARG64 |
---|
| 1183 | + bool |
---|
| 1184 | + help |
---|
| 1185 | + If a 32-bit architecture requires 64-bit arguments to be split into |
---|
| 1186 | + pairs of 32-bit arguments, select this option. |
---|
| 1187 | + |
---|
1002 | 1188 | source "kernel/gcov/Kconfig" |
---|
1003 | 1189 | |
---|
1004 | 1190 | source "scripts/gcc-plugins/Kconfig" |
---|