Currently, when compiling liburing on x86, x86-64, and aarch64 architectures, the resulting binary lacks the linkage with the standard C library (libc). To address the concerns raised by Linux distribution package maintainers regarding security, it is necessary to enable the linkage of libc to liburing. Especially right now, when the security of io_uring is being scrutinized. By incorporating the '--use-libc' option, developers can now enhance the overall hardening of liburing by utilizing compiler features such as the stack protector and address sanitizer. Link: https://security.googleblog.com/2023/06/learnings-from-kctf-vrps-42-linux.html Link: https://lore.kernel.org/io-uring/20230621100447.GD2667602@fedora Link: https://lore.kernel.org/io-uring/ZJLkXC7QffsoCnpu@xxxxxxxxxxxxxxxxxxx Cc: Stefan Hajnoczi <stefanha@xxxxxxxxxx> Cc: Guillem Jover <guillem@xxxxxxxxxxx> Co-authored-by: Alviro Iskandar Setiawan <alviro.iskandar@xxxxxxxxxxx> Signed-off-by: Alviro Iskandar Setiawan <alviro.iskandar@xxxxxxxxxxx> Signed-off-by: Ammar Faizi <ammarfaizi2@xxxxxxxxxxx> --- configure | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/configure b/configure index a16ffca83d678364..46afb7285a1ea8d0 100755 --- a/configure +++ b/configure @@ -26,6 +26,8 @@ for opt do ;; --cxx=*) cxx="$optarg" ;; + --use-libc) use_libc=yes + ;; *) echo "ERROR: unknown option $opt" echo "Try '$0 --help' for more information" @@ -73,6 +75,7 @@ Options: [defaults in brackets after descriptions] --datadir=PATH install shared data in PATH [$datadir] --cc=CMD use CMD as the C compiler --cxx=CMD use CMD as the C++ compiler + --use-libc use libc for liburing (useful for hardening) EOF exit 0 fi @@ -382,10 +385,13 @@ fi print_config "NVMe uring command support" "$nvme_uring_cmd" ############################################################################# -# -# Currently, CONFIG_NOLIBC is only enabled on x86-64, x86 (32-bit) and aarch64. -# -cat > $TMPC << EOF +liburing_nolibc="no" +if test "$use_libc" != "yes"; then + + # + # Currently, CONFIG_NOLIBC only supports x86-64, x86 (32-bit) and aarch64. + # + cat > $TMPC << EOF int main(void){ #if defined(__x86_64__) || defined(__i386__) || defined(__aarch64__) return 0; @@ -394,10 +400,13 @@ int main(void){ #endif } EOF -if compile_prog "" "" "nolibc support"; then - liburing_nolibc="yes" + + if compile_prog "" "" "nolibc"; then + liburing_nolibc="yes" + fi fi -print_config "nolibc support" "$liburing_nolibc"; + +print_config "nolibc" "$liburing_nolibc"; ############################################################################# #################################################### -- Ammar Faizi