2023-06-22 17:40:15

by Ammar Faizi

[permalink] [raw]
Subject: [RFC PATCH liburing v1 0/3] Introduce '--use-libc' option

Hi Jens,
Hi Stefan and Guillem,

This is an RFC patch series to introduce the '--use-libc' option to the
configure script.

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.

See the following links for viewing the discussion:
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/[email protected]

There are three patches in this series.

- The first patch removes the '--nolibc' option from the configure
script as it is no longer needed. The default build on x86, x86-64,
and aarch64 architectures is still not using libc.

- The second patch introduces the '--use-libc' option to the configure
script. This option enables the linkage of libc to liburing.

- The third patch allows the use of the stack protector when building
liburing with libc.

Please review. Thank you.

Signed-off-by: Alviro Iskandar Setiawan <[email protected]>
Signed-off-by: Ammar Faizi <[email protected]>
---

Ammar Faizi (3):
configure: Remove --nolibc option
configure: Introduce '--use-libc' option
src/Makefile: Allow using stack protector with libc

configure | 40 +++++++++++++++-------------------------
src/Makefile | 7 +++----
2 files changed, 18 insertions(+), 29 deletions(-)


base-commit: 49fa118c58422bad38cb96fea0f10af60691baa9
--
Ammar Faizi



2023-06-22 18:02:57

by Ammar Faizi

[permalink] [raw]
Subject: [RFC PATCH liburing v1 1/3] configure: Remove --nolibc option

This option was deprecated and planned to be removed. Now remove it.

Co-authored-by: Alviro Iskandar Setiawan <[email protected]>
Signed-off-by: Alviro Iskandar Setiawan <[email protected]>
Signed-off-by: Ammar Faizi <[email protected]>
---
configure | 19 -------------------
1 file changed, 19 deletions(-)

diff --git a/configure b/configure
index 28f3eb0aee24f9ea..a16ffca83d678364 100755
--- a/configure
+++ b/configure
@@ -5,22 +5,6 @@ set -e
cc=${CC:-gcc}
cxx=${CXX:-g++}

-#
-# TODO(ammarfaizi2): Remove this notice and `--nolibc` option.
-#
-nolibc_deprecated() {
- echo "";
- echo "=================================================================";
- echo "";
- echo " --nolibc option is deprecated and has no effect.";
- echo " It will be removed in a future liburing release.";
- echo "";
- echo " liburing on x86-64, x86 (32-bit) and aarch64 always use CONFIG_NOLIBC.";
- echo "";
- echo "=================================================================";
- echo "";
-}
-
for opt do
optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)' || true)
case "$opt" in
@@ -42,8 +26,6 @@ for opt do
;;
--cxx=*) cxx="$optarg"
;;
- --nolibc) nolibc_deprecated
- ;;
*)
echo "ERROR: unknown option $opt"
echo "Try '$0 --help' for more information"
@@ -91,7 +73,6 @@ 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
- --nolibc build liburing without libc
EOF
exit 0
fi
--
Ammar Faizi


2023-06-22 18:12:05

by Ammar Faizi

[permalink] [raw]
Subject: [RFC PATCH liburing v1 2/3] configure: Introduce '--use-libc' option

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/[email protected]
Cc: Stefan Hajnoczi <[email protected]>
Cc: Guillem Jover <[email protected]>
Co-authored-by: Alviro Iskandar Setiawan <[email protected]>
Signed-off-by: Alviro Iskandar Setiawan <[email protected]>
Signed-off-by: Ammar Faizi <[email protected]>
---
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


2023-06-23 22:19:54

by Jens Axboe

[permalink] [raw]
Subject: Re: [RFC PATCH liburing v1 0/3] Introduce '--use-libc' option


On Fri, 23 Jun 2023 00:20:26 +0700, Ammar Faizi wrote:
> Hi Stefan and Guillem,
>
> This is an RFC patch series to introduce the '--use-libc' option to the
> configure script.
>
> Currently, when compiling liburing on x86, x86-64, and aarch64
> architectures, the resulting binary lacks the linkage with the standard
> C library (libc).
>
> [...]

Applied, thanks!

[1/3] configure: Remove --nolibc option
commit: 7eba81f6eb2d62d7835622267b483b95bdf0bcd5
[2/3] configure: Introduce '--use-libc' option
commit: 151f80504d8cba262f0950b76953dd7441342163
[3/3] src/Makefile: Allow using stack protector with libc
commit: 449ebc5a425f3a8b14c78357cbe9ab1011a797eb

Best regards,
--
Jens Axboe