Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp590576ybt; Fri, 19 Jun 2020 08:51:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw8u22cmVw2t+bpGYMmC9v0LWjYNZd8+1a/XvLFmHSv408At2SgXO7ULYA2gMGIlxiaFa6f X-Received: by 2002:a17:906:a889:: with SMTP id ha9mr4449516ejb.429.1592581915789; Fri, 19 Jun 2020 08:51:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592581915; cv=none; d=google.com; s=arc-20160816; b=gRJqJ3dlKIzw7/qMjU0TM1U+E9oyXBE0hxdyUHlaH3DcnpCc3MbdsgTEiYemSXGRiP BENMBmq4S8/w/81m2wTUh1KpGYYtRYQzE1oWdZ8Vphi8PURAgtWMvng4fJ8amYGz6yZT JtZUWSNKeITgijvgSIl85KFT3O4CmknER86D3lbNOmbUlRoRWTj829mxkQeOBXvTHEAA jN5Bq22N/S4N5iy8492H2N6yex5zZypRZHfMFI21gXpOPbXy9gT4F4k8jYPC1D933zJx 7iYJgdGFqVKAQTzcUH1/VWTuVB/FCHI1J78r+7ZxrYTfOV8JFhthfHCmmyKh/jQH0Mes 0VCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=pEMJJ7CAbuFCpVwQvUjAK/sVMsxgMKgm+cTVsqPXL0k=; b=ILBAPx3lS7BzfEDUJy4KIU/QSO95h96nr2yuhMmC+v5V2e3+g4Jm4nl6ekV4oSMRlf xkxrVsZcRsfIRq2Qiuxo4FmjMb68ozEodUaP38JAKfmaPDRVcQ4nTpK/oPu6BEK6tXKU +n4Jr8JUKPSRYc0Q8u+NFNmUofKk8fK6nNlZ+Lwa9e3seWBT4ibT/Q+0y0GQ+zWr07Fs t37/nhN+0BvzZjo0DFHwXNf5lb9TTmKL0neBrmU0GDN9rM9Tq4jAB3fY9GTHfvu3KFu9 JcfesTYxIlrDwxKSZqKLlthspqBYITFpEXb1PPOLZRR4U2Ti4WfxEujb/ACbVPNc8l7I TOww== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=YhnUcrjf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g11si4583305edk.96.2020.06.19.08.51.33; Fri, 19 Jun 2020 08:51:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=YhnUcrjf; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2404195AbgFSPZ6 (ORCPT + 99 others); Fri, 19 Jun 2020 11:25:58 -0400 Received: from mail.kernel.org ([198.145.29.99]:54800 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2393154AbgFSPXR (ORCPT ); Fri, 19 Jun 2020 11:23:17 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 979D62158C; Fri, 19 Jun 2020 15:23:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592580196; bh=OnMZ5vdf2YOk5hWtwLFzh1/pxKKBakX8EVWv9pl+oRw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YhnUcrjfHpBDnN63yOzX2ew05qiJHS4lgbkLAHO9LA9EMco3rwqTjLDyufcaofz7N M3/w1NkFc2AZq/VZrAcUt1xEygQC3HGbXytF3z5tlOC5NOxggvH3Wotndvh9GdtWJ6 TeAt9YsSw3tWCiK46OG+QQxPfy2xWFdvMEswTI68= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jiaxun Yang , Fangrui Song , Kees Cook , Nathan Chancellor , "Maciej W. Rozycki" , Nick Desaulniers , Thomas Bogendoerfer , Sasha Levin Subject: [PATCH 5.7 159/376] MIPS: Truncate link address into 32bit for 32bit kernel Date: Fri, 19 Jun 2020 16:31:17 +0200 Message-Id: <20200619141717.847551466@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200619141710.350494719@linuxfoundation.org> References: <20200619141710.350494719@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Jiaxun Yang [ Upstream commit ff487d41036035376e47972c7c522490b839ab37 ] LLD failed to link vmlinux with 64bit load address for 32bit ELF while bfd will strip 64bit address into 32bit silently. To fix LLD build, we should truncate load address provided by platform into 32bit for 32bit kernel. Signed-off-by: Jiaxun Yang Link: https://github.com/ClangBuiltLinux/linux/issues/786 Link: https://sourceware.org/bugzilla/show_bug.cgi?id=25784 Reviewed-by: Fangrui Song Reviewed-by: Kees Cook Tested-by: Nathan Chancellor Cc: Maciej W. Rozycki Tested-by: Nick Desaulniers Signed-off-by: Thomas Bogendoerfer Signed-off-by: Sasha Levin --- arch/mips/Makefile | 13 ++++++++++++- arch/mips/boot/compressed/Makefile | 2 +- arch/mips/kernel/vmlinux.lds.S | 2 +- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/arch/mips/Makefile b/arch/mips/Makefile index e1c44aed8156..b6ee29e4565a 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile @@ -288,12 +288,23 @@ ifdef CONFIG_64BIT endif endif +# When linking a 32-bit executable the LLVM linker cannot cope with a +# 32-bit load address that has been sign-extended to 64 bits. Simply +# remove the upper 32 bits then, as it is safe to do so with other +# linkers. +ifdef CONFIG_64BIT + load-ld = $(load-y) +else + load-ld = $(subst 0xffffffff,0x,$(load-y)) +endif + KBUILD_AFLAGS += $(cflags-y) KBUILD_CFLAGS += $(cflags-y) -KBUILD_CPPFLAGS += -DVMLINUX_LOAD_ADDRESS=$(load-y) +KBUILD_CPPFLAGS += -DVMLINUX_LOAD_ADDRESS=$(load-y) -DLINKER_LOAD_ADDRESS=$(load-ld) KBUILD_CPPFLAGS += -DDATAOFFSET=$(if $(dataoffset-y),$(dataoffset-y),0) bootvars-y = VMLINUX_LOAD_ADDRESS=$(load-y) \ + LINKER_LOAD_ADDRESS=$(load-ld) \ VMLINUX_ENTRY_ADDRESS=$(entry-y) \ PLATFORM="$(platform-y)" \ ITS_INPUTS="$(its-y)" diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile index 0df0ee8a298d..6e56caef69f0 100644 --- a/arch/mips/boot/compressed/Makefile +++ b/arch/mips/boot/compressed/Makefile @@ -90,7 +90,7 @@ ifneq ($(zload-y),) VMLINUZ_LOAD_ADDRESS := $(zload-y) else VMLINUZ_LOAD_ADDRESS = $(shell $(obj)/calc_vmlinuz_load_addr \ - $(obj)/vmlinux.bin $(VMLINUX_LOAD_ADDRESS)) + $(obj)/vmlinux.bin $(LINKER_LOAD_ADDRESS)) endif UIMAGE_LOADADDR = $(VMLINUZ_LOAD_ADDRESS) diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index a5f00ec73ea6..f185a85a27c1 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S @@ -55,7 +55,7 @@ SECTIONS /* . = 0xa800000000300000; */ . = 0xffffffff80300000; #endif - . = VMLINUX_LOAD_ADDRESS; + . = LINKER_LOAD_ADDRESS; /* read-only */ _text = .; /* Text and read-only data */ .text : { -- 2.25.1