[PATCH liburing v1] src/Makefile: Don't use stack protector for all builds by default

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Stack protector adds extra mov, extra stack allocation and extra branch
to save and validate the stack canary. While this feature could be
useful to detect stack corruption in some scenarios, it is not really
needed for liburing which is simple enough to review.

Good code shouldn't corrupt the stack. We don't need this extra
checking at the moment. Just for comparison, let's take a hot function
__io_uring_get_cqe.

Before this patch:
```
0000000000002b80 <__io_uring_get_cqe>:
  2b80:   f3 0f 1e fa             endbr64
  2b84:   48 83 ec 28             sub    $0x28,%rsp
  2b88:   64 48 8b 04 25 28 00    mov    %fs:0x28,%rax
  2b8f:   00 00
  2b91:   48 89 44 24 18          mov    %rax,0x18(%rsp)
  2b96:   31 c0                   xor    %eax,%eax
  2b98:   89 14 24                mov    %edx,(%rsp)
  2b9b:   48 89 e2                mov    %rsp,%rdx
  2b9e:   48 b8 00 00 00 00 08    movabs $0x800000000,%rax
  2ba5:   00 00 00
  2ba8:   89 4c 24 04             mov    %ecx,0x4(%rsp)
  2bac:   48 89 44 24 08          mov    %rax,0x8(%rsp)
  2bb1:   4c 89 44 24 10          mov    %r8,0x10(%rsp)
  2bb6:   e8 45 fe ff ff          call   2a00 <_io_uring_get_cqe>
  2bbb:   48 8b 54 24 18          mov    0x18(%rsp),%rdx
  2bc0:   64 48 2b 14 25 28 00    sub    %fs:0x28,%rdx
  2bc7:   00 00
  2bc9:   75 05                   jne    2bd0 <__io_uring_get_cqe+0x50>
  2bcb:   48 83 c4 28             add    $0x28,%rsp
  2bcf:   c3                      ret
  2bd0:   e8 9b f5 ff ff          call   2170 <__stack_chk_fail@plt>
  2bd5:   66 66 2e 0f 1f 84 00    data16 cs nopw 0x0(%rax,%rax,1)
  2bdc:   00 00 00 00
```

After this patch:
```
0000000000002ab0 <__io_uring_get_cqe>:
  2ab0:   f3 0f 1e fa             endbr64
  2ab4:   48 b8 00 00 00 00 08    movabs $0x800000000,%rax
  2abb:   00 00 00
  2abe:   48 83 ec 28             sub    $0x28,%rsp
  2ac2:   89 14 24                mov    %edx,(%rsp)
  2ac5:   48 89 e2                mov    %rsp,%rdx
  2ac8:   89 4c 24 04             mov    %ecx,0x4(%rsp)
  2acc:   48 89 44 24 08          mov    %rax,0x8(%rsp)
  2ad1:   4c 89 44 24 10          mov    %r8,0x10(%rsp)
  2ad6:   e8 55 fe ff ff          call   2930 <_io_uring_get_cqe>
  2adb:   48 83 c4 28             add    $0x28,%rsp
  2adf:   c3                      ret
```

Previously, we only use `-fno-stack-protector` for nolibc build as the
stack protector needs to call `__stack_chk_fail@plt` function from the
libc. Now, we always use `-fno-stack-protector` for both nolibc and
libc builds to generate shorter Assembly code.

Cc: Nugra <richiisei@xxxxxxxxx>
Cc: Alviro Iskandar Setiawan <alviro.iskandar@xxxxxxxxxxx>
Cc: GNU/Weeb Mailing List <gwml@xxxxxxxxxxxxxxxx>
Cc: Tea Inside Mailing List <timl@xxxxxxxxxxxxxxxxxx>
Cc: io-uring Mailing List <io-uring@xxxxxxxxxxxxxxx>
Signed-off-by: Ammar Faizi <ammarfaizi2@xxxxxxxxxxx>
---
 src/Makefile | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/Makefile b/src/Makefile
index cc6c871..3e1192f 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -8,7 +8,7 @@ libdevdir ?= $(prefix)/lib
 CPPFLAGS ?=
 override CPPFLAGS += -D_GNU_SOURCE \
 	-Iinclude/ -include ../config-host.h
-CFLAGS ?= -g -fomit-frame-pointer -O2 -Wall -Wextra
+CFLAGS ?= -g -fomit-frame-pointer -O2 -Wall -Wextra -fno-stack-protector
 override CFLAGS += -Wno-unused-parameter -Wno-sign-compare -DLIBURING_INTERNAL
 SO_CFLAGS=-fPIC $(CFLAGS)
 L_CFLAGS=$(CFLAGS)
@@ -36,8 +36,8 @@ liburing_srcs := setup.c queue.c register.c
 
 ifeq ($(CONFIG_NOLIBC),y)
 	liburing_srcs += nolibc.c
-	override CFLAGS += -nostdlib -nodefaultlibs -ffreestanding -fno-stack-protector
-	override CPPFLAGS += -nostdlib -nodefaultlibs -ffreestanding -fno-stack-protector
+	override CFLAGS += -nostdlib -nodefaultlibs -ffreestanding
+	override CPPFLAGS += -nostdlib -nodefaultlibs -ffreestanding
 	override LINK_FLAGS += -nostdlib -nodefaultlibs
 else
 	liburing_srcs += syscall.c

base-commit: 896a1d3ab14a8777a45db6e7b67cf557a44923fb
-- 
2.32.0




[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux