Hi Andrew,

> On 26 Apr 2022, at 00:06, Andrew Cooper <andrew.coop...@citrix.com> wrote:
> 
> In a GNU compatbile makefile, $(LDFLAGS) are passed to $(CC), not $(LD).

You mean because CC is used for linking or even when compiling object files ?

If not, what is the expected way to pass linker flags ?

> 
> In a default CentOS 7 build environment, $(LDFLAGS) is set to -Wl,-z,relro,
> which causes the Xen build to explode with:
> 
>  ld: unrecognized option '-Wl,-z,relro'
>  ld: use the --help option for usage information
> 
> It turns out that many downstreams identify this as a breakage in Xen's build
> system and bodge around it in various ways, mostly by unsetting all of
> $(CFLAGS), $(AFLAGS) and $(LDFLAGS).
> 
> However, that is a security issue because it means that tools/ is not built
> with the distro-wide hardening flags that are otherwise expected of
> packages (relro, _FORTIFY_SOURCE, stack-protector, etc).
> 
> tools/ specifically should honour the packaging environment's choice of flags,
> while xen/ must not pass $(LDFLAGS) to $(LD), and should not be influenced by
> the others either.
> 
> Signed-off-by: Andrew Cooper <andrew.coop...@citrix.com>
> ---
> CC: Anthony PERARD <anthony.per...@citrix.com>
> CC: Bertrand Marquis <bertrand.marq...@arm.com>
> CC: George Dunlap <george.dun...@eu.citrix.com>
> CC: Jan Beulich <jbeul...@suse.com>
> CC: Juergen Gross <jgr...@suse.com>
> CC: Julien Grall <jul...@xen.org>
> CC: Roger Pau Monné <roger....@citrix.com>
> CC: Stefano Stabellini <sstabell...@kernel.org>
> CC: Volodymyr Babchuk <volodymyr_babc...@epam.com>
> CC: Wei Liu <w...@xen.org>
> 
> RFC, because CFLAGS/AFLAGS need nuking too, and they're rather more entangled.
> I expect this to cause some disgreement, but Xen is behaving in a very
> nonstandard way even among embedded projects and all downstreams are suffering
> security problems as a consequence.
> ---
> xen/Makefile | 2 ++
> 1 file changed, 2 insertions(+)
> 
> diff --git a/xen/Makefile b/xen/Makefile
> index ec34524ed21d..a8e1de54823b 100644
> --- a/xen/Makefile
> +++ b/xen/Makefile
> @@ -254,6 +254,8 @@ export KBUILD_DEFCONFIG := $(ARCH)_defconfig
> # reparsing Config.mk by e.g. arch/x86/boot/.
> export XEN_TREEWIDE_CFLAGS := $(CFLAGS)
> 
> +LDFLAGS :=
> +

This would require a comment in the Makefile to explain why this is done.

Also how could anybody specify linker specific flags if this is done ?

Regards
Bertrand


> # CLANG_FLAGS needs to be calculated before calling Kconfig
> ifneq ($(shell $(CC) --version 2>&1 | head -n 1 | grep clang),)
> CLANG_FLAGS :=
> -- 
> 2.11.0
> 

Reply via email to