summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--extra/Configs/Config.in99
1 files changed, 79 insertions, 20 deletions
diff --git a/extra/Configs/Config.in b/extra/Configs/Config.in
index a56292de8..4aca400b5 100644
--- a/extra/Configs/Config.in
+++ b/extra/Configs/Config.in
@@ -1062,24 +1062,29 @@ endif
menu "String and Stdio Support"
config UCLIBC_HAS_STRING_GENERIC_OPT
- bool "Use glibc generic string functions"
+ bool "Use faster (but larger) generic string functions"
default y
help
Answer Y to use the (tweaked) glibc generic string functions.
+
In general, they are faster (but 3-5K larger) than the base
uClibc string functions which are optimized solely for size.
Many people will answer Y.
config UCLIBC_HAS_STRING_ARCH_OPT
- bool "Use arch-specific string functions"
+ bool "Use arch-specific assembly string functions (where available)"
default y
help
- Answer Y to use the arch-specific string functions instead of the
- base uClibc versions, which are optimized exclusively for size.
+ Answer Y to use any archtecture-specific assembly language string
+ functions available for this target plaform.
+
+ Note that assembly implementations are not available for all string
+ functions, so some generic (written in C) string functions may
+ still be used.
- Most people will answer Y, as this has been default behavior
- for some time.
+ These are small and fast, the only reason _not_ to say Y here is
+ for debugging purposes.
config UCLIBC_HAS_CTYPE_TABLES
bool "Use Table Versions Of 'ctype.h' Functions."
@@ -1727,14 +1732,24 @@ config HAVE_NO_SSP
default n
config UCLIBC_HAS_SSP
- bool "Support for propolice smashing stack protector"
+ bool "Support for GCC stack smashing protector"
depends on !HAVE_NO_SSP
default n
help
- Add propolice smashing stack protector to the library.
- This requires GCC 4.1, supporting the -fstack-protector[-all]
- options. GCC does not have to provide libssp, the needed
- functions are added to ldso/libc instead.
+ Add code to support GCC's -fstack-protector[-all] option to uClibc.
+ This requires GCC 4.1 or newer. GCC does not have to provide libssp,
+ the needed functions are added to ldso/libc instead.
+
+ GCC's stack protector is a reimplementation of IBM's propolice.
+ See http://www.trl.ibm.com/projects/security/ssp/ and
+ http://www.linuxfromscratch.org/hints/downloads/files/ssp.txt
+ for details.
+
+ Note that NOEXECSTACK on a kernel with address space randomization
+ is generally sufficient to prevent most buffer overflow exploits
+ without increasing code size. This option essentially adds debugging
+ code to catch them.
+
Most people will answer N.
config UCLIBC_HAS_SSP_COMPAT
@@ -1743,12 +1758,15 @@ config UCLIBC_HAS_SSP_COMPAT
default n
help
Add gcc-3.x propolice smashing stack protector to the library.
+
This requires a patched version of GCC, supporting the
-fstack-protector[-all] options, with the __guard and
__stack_smash_handler functions removed from libgcc.
These functions are added to ldso/libc instead.
+
More information at:
<http://www.research.ibm.com/trl/projects/security/ssp/>
+
Most people will answer N.
config SSP_QUICK_CANARY
@@ -1785,33 +1803,74 @@ config PROPOLICE_BLOCK_SEGV
endchoice
config UCLIBC_BUILD_SSP
- bool "Build uClibc with propolice protection"
+ bool "Build uClibc with -fstack-protector"
depends on UCLIBC_HAS_SSP
default n
help
- Build all libraries and executables with propolice protection enabled.
+ Build all uClibc libraries and executables with -fstack-protector,
+ adding extra stack overflow checking to most uClibc functions.
config UCLIBC_BUILD_RELRO
- bool "Build uClibc with RELRO"
+ bool "Build uClibc with linker option -z RELRO"
depends on HAVE_SHARED
default y
help
- Build all libraries and executables with -z relro.
+ Build all libraries and executables with "ld -z relro".
+
+ This tells the linker to mark chunks of an executable or shared
+ library read-only after applying dynamic relocations. (This comes
+ up when a global const variable is initialized to the address of a
+ function or the value of another global variable.)
+
+ This is a fairly obscure option the ld man page doesn't even bother
+ to document properly. It's a security paranoia issue that's more
+ likely to consume memory (by allocating an extra page) rather than
+ save it.
+
+ This is explained in more depth at
+ http://www.airs.com/blog/archives/189
+
+ Nobody is likely to care whether you say Y or N here.
config UCLIBC_BUILD_NOW
- bool "Build uClibc with NOW"
+ bool "Build uClibc with linker option -z NOW"
depends on HAVE_SHARED
default n
help
- Build all libraries and executables with -z now.
+ Build all libraries and executables with "ld -z now".
+
+ This tells the linker to resolve all symbols when the library is
+ first loaded, rather than when each function is first called. This
+ increases start-up latency by a few microseconds and may do
+ unnecessary work (resolving symbols that are never used), but the
+ realtime people like it for making microbenchmark timings slightly
+ more predictable and in some cases it can be slightly faster due to
+ CPU cache behavior (not having to fault the linker back in to do
+ lazy symbol resolution).
+
+ Most people can't tell the difference between selecting Y or N here.
config UCLIBC_BUILD_NOEXECSTACK
bool "Build uClibc with noexecstack marking"
default y
help
- Mark all assembler files as noexecstack. This will result in marking
- all libraries and executables built against uClibc not requiring
- executable stack.
+ Mark all assembler files as noexecstack, which will mark uClibc
+ as not requiring an executable stack. (This doesn't prevent other
+ files you link against from claiming to need an executable stack, it
+ just won't cause uClibc to request it unnecessarily.)
+
+ This is a security thing to make buffer overflows harder to exploit.
+ By itself, it's kind of useless, as Linus Torvalds explained in 1998:
+ http://old.lwn.net/1998/0806/a/linus-noexec.html
+
+ It only actually provides any security when combined with address
+ space randomization, explained here: http://lwn.net/Articles/121845/
+
+ Address space randomization is on by default in current linux
+ kernels (although it can be disabled using the option
+ CONFIG_COMPAT_BRK).
+
+ You should probably say Y.
endmenu