diff mbox series

pc-bios/optionrom: Fix pvh.img ld build failure on fedora rawhide

Message ID 20231128143647.847668-1-crobinso@redhat.com (mailing list archive)
State New, archived
Headers show
Series pc-bios/optionrom: Fix pvh.img ld build failure on fedora rawhide | expand

Commit Message

Cole Robinson Nov. 28, 2023, 2:36 p.m. UTC
binutils 2.39 shows some warnings when building pvh.img

/usr/bin/ld: warning: pvh.o: missing .note.GNU-stack section implies executable stack
/usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
/usr/bin/ld: warning: pvh.img has a LOAD segment with RWX permissions

The latter of which is fatal on Fedora rawhide for some reason.

Add linker options to suppress the errors

Signed-off-by: Cole Robinson <crobinso@redhat.com>
---
 pc-bios/optionrom/Makefile | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Daniel P. Berrangé Jan. 3, 2024, 12:44 p.m. UTC | #1
On Tue, Nov 28, 2023 at 09:36:47AM -0500, Cole Robinson wrote:
> binutils 2.39 shows some warnings when building pvh.img
> 
> /usr/bin/ld: warning: pvh.o: missing .note.GNU-stack section implies executable stack
> /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
> /usr/bin/ld: warning: pvh.img has a LOAD segment with RWX permissions
> 
> The latter of which is fatal on Fedora rawhide for some reason.
> 
> Add linker options to suppress the errors

This makes it silent, but I guess someone needs to confirm that this
option ROM code genuinely does NOT need to have executable stack,
otherwise the future change that is being warned about could impact
it ?

> 
> Signed-off-by: Cole Robinson <crobinso@redhat.com>
> ---
>  pc-bios/optionrom/Makefile | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
> index 30d07026c7..f54ed39b54 100644
> --- a/pc-bios/optionrom/Makefile
> +++ b/pc-bios/optionrom/Makefile
> @@ -36,7 +36,7 @@ config-cc.mak: Makefile
>  	    $(call cc-option,-Wno-array-bounds)) 3> config-cc.mak
>  -include config-cc.mak
>  
> -override LDFLAGS = -nostdlib -Wl,--build-id=none,-T,$(SRC_DIR)/flat.lds
> +override LDFLAGS = -nostdlib -Wl,--build-id=none,-T,$(SRC_DIR)/flat.lds -Wl,--no-warn-rwx-segments -Wl,--no-warn-execstack
>  
>  pvh.img: pvh.o pvh_main.o
>  
> 
> 

With regards,
Daniel
Gerd Hoffmann Jan. 3, 2024, 3:44 p.m. UTC | #2
On Wed, Jan 03, 2024 at 12:44:39PM +0000, Daniel P. Berrangé wrote:
> On Tue, Nov 28, 2023 at 09:36:47AM -0500, Cole Robinson wrote:
> > binutils 2.39 shows some warnings when building pvh.img
> > 
> > /usr/bin/ld: warning: pvh.o: missing .note.GNU-stack section implies executable stack
> > /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
> > /usr/bin/ld: warning: pvh.img has a LOAD segment with RWX permissions
> > 
> > The latter of which is fatal on Fedora rawhide for some reason.
> > 
> > Add linker options to suppress the errors
> 
> This makes it silent, but I guess someone needs to confirm that this
> option ROM code genuinely does NOT need to have executable stack,
> otherwise the future change that is being warned about could impact
> it ?

Skimming the code it does not look like it depends on a execute-able
stack.  Beside that the option rom will be loaded as raw binary by
seabios and run without paging.  There is nothing which could actually
setup and enforce an NX stack ...

Acked-by: Gerd Hoffmann <kraxel@redhat.com>

take care,
  Gerd
Cole Robinson Jan. 21, 2024, 10:18 p.m. UTC | #3
On 1/3/24 10:44 AM, Gerd Hoffmann wrote:
> On Wed, Jan 03, 2024 at 12:44:39PM +0000, Daniel P. Berrangé wrote:
>> On Tue, Nov 28, 2023 at 09:36:47AM -0500, Cole Robinson wrote:
>>> binutils 2.39 shows some warnings when building pvh.img
>>>
>>> /usr/bin/ld: warning: pvh.o: missing .note.GNU-stack section implies executable stack
>>> /usr/bin/ld: NOTE: This behaviour is deprecated and will be removed in a future version of the linker
>>> /usr/bin/ld: warning: pvh.img has a LOAD segment with RWX permissions
>>>
>>> The latter of which is fatal on Fedora rawhide for some reason.
>>>
>>> Add linker options to suppress the errors
>>
>> This makes it silent, but I guess someone needs to confirm that this
>> option ROM code genuinely does NOT need to have executable stack,
>> otherwise the future change that is being warned about could impact
>> it ?
> 
> Skimming the code it does not look like it depends on a execute-able
> stack.  Beside that the option rom will be loaded as raw binary by
> seabios and run without paging.  There is nothing which could actually
> setup and enforce an NX stack ...
> 
> Acked-by: Gerd Hoffmann <kraxel@redhat.com>
> 

I just realized this breaks the build on centos 9 with binutils
2.35.2-42.el9

make[1]: Leaving directory
'/builddir/build/BUILD/qemu-8.2.0/qemu_kvm_build/pc-bios/optionrom'
make[1]: Entering directory
'/builddir/build/BUILD/qemu-8.2.0/qemu_kvm_build/pc-bios/optionrom'
gcc -O2 -g -march=i486 -Wall -m32 -m16 -ffreestanding
-I/builddir/build/BUILD/qemu-8.2.0/include -fcf-protection=none -fno-pie
-no-pie -fno-stack-protector -Wno-array-bounds -nostdlib
-Wl,--build-id=none,-T,/builddir/build/BUILD/qemu-8.2.0/pc-bios/optionrom/flat.lds
-Wl,--no-warn-rwx-segments -Wl,--no-warn-execstack -s -o multiboot.img
multiboot.o
/usr/bin/ld: unrecognized option '--no-warn-rwx-segments'
/usr/bin/ld: use the --help option for usage information

This article has tips about how to fix these issues in the linker
scripts, so maybe that's the better approach:

https://www.redhat.com/en/blog/linkers-warnings-about-executable-stacks-and-segments

Thanks,
Cole
diff mbox series

Patch

diff --git a/pc-bios/optionrom/Makefile b/pc-bios/optionrom/Makefile
index 30d07026c7..f54ed39b54 100644
--- a/pc-bios/optionrom/Makefile
+++ b/pc-bios/optionrom/Makefile
@@ -36,7 +36,7 @@  config-cc.mak: Makefile
 	    $(call cc-option,-Wno-array-bounds)) 3> config-cc.mak
 -include config-cc.mak
 
-override LDFLAGS = -nostdlib -Wl,--build-id=none,-T,$(SRC_DIR)/flat.lds
+override LDFLAGS = -nostdlib -Wl,--build-id=none,-T,$(SRC_DIR)/flat.lds -Wl,--no-warn-rwx-segments -Wl,--no-warn-execstack
 
 pvh.img: pvh.o pvh_main.o