Received: by 2002:a05:6902:102b:0:0:0:0 with SMTP id x11csp540036ybt; Fri, 19 Jun 2020 07:48:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy60nn9I88Q7eIwVJT39HifbI3WRrxavuEPQ7I3Sr8R8JzV7Hoeuqket0eRUqSMSahR9G30 X-Received: by 2002:a17:906:4ada:: with SMTP id u26mr4241725ejt.368.1592578109730; Fri, 19 Jun 2020 07:48:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1592578109; cv=none; d=google.com; s=arc-20160816; b=rwmzggXkW7qrsfTc9Bj3u+W3fyS3X3QHl3XY4LCNgcdPwdJ4ngRd5mxkzb/7uj0Tzq yGu2v7WgYkE3AfEsImiiezcIsD/CteQo6vEWTsLWpDMShl6Ook7NsMyKIyCO/BzARpVQ LljmVIxWwo+RNueh+E7RUZwr1WU80Fg1nRbpZWl7uGx879SuYTkmyE00G6tCj0osxiwJ 12nSGrjOgbWqDx6J0GpzDfUvoPus4P1XCZzvfWZXmJKgEhrKXtT7hhgYWtOWiyxdriYn YEv2WsaXUbXGz7IMOub/+uckEq3fB2gFOXu3A+mfWN9vC6oXrpcPf/tPpPb/J17WYaQ+ f3pA== 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=xTMM7aX4KCOcZqJWcM2QQRehWQy8MqW7vnkhzmEQ4JE=; b=EI4z27Q49PoEEp4xOS1vLaSAAihOeyJrTmyVZ0h9BmoszWd0BfmrJLAI/sgTTCFEDn dpaWReh6566l5vNzXfqH3VPn5U+AgG+HSFNKCvJo1BjPpNoo3MP2QCIjgDI0UGUzeyiV GE84pABfCePc28m6odtIz5YRqy+PC4FD3Q3Do9vQYifPtYy/VlBLep0khoWwHXuc90eT lrHxtcmGm9WeHXQhA53eUDmKnvPvYshbicbtK9TWJc2jftvoegYXHe5/Pdo9uDd0FPv9 2bPT1I1SclZdEuQ5zXSp/QG+PDi4wydaN5EeeTE7YK4JzGkFidiJXXXCU/LGxRiPD3yC Ikag== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=UhvZUJjx; 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 o20si3721495eju.673.2020.06.19.07.48.06; Fri, 19 Jun 2020 07:48:29 -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=UhvZUJjx; 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 S2388064AbgFSOnN (ORCPT + 99 others); Fri, 19 Jun 2020 10:43:13 -0400 Received: from mail.kernel.org ([198.145.29.99]:33576 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388049AbgFSOmo (ORCPT ); Fri, 19 Jun 2020 10:42:44 -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 B4F3620A8B; Fri, 19 Jun 2020 14:42:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1592577764; bh=diiyOjNq8LrZxMGiR/Bwi79RN46XE7pZtYMsDouPzUw=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UhvZUJjxzZku6tXHvh9f0U2S3j8bXxlFpQ45wRlBKormGvOOcorSpKr0iTaQ1yXEV 404CnkBwSJVXNK220Ti0QtXZ2VT5GMMy5ewkJn8xt9en5cgwSmSdlSh4TB5bBLbgVR 2SbZbrXUHgVWTC/GhSDJwIa/0MoeblxhMQS8l6SU= 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 4.9 079/128] MIPS: Truncate link address into 32bit for 32bit kernel Date: Fri, 19 Jun 2020 16:32:53 +0200 Message-Id: <20200619141624.346641028@linuxfoundation.org> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20200619141620.148019466@linuxfoundation.org> References: <20200619141620.148019466@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 1a6bac7b076f..25f3bfef9b39 100644 --- a/arch/mips/Makefile +++ b/arch/mips/Makefile @@ -256,12 +256,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)" ifdef CONFIG_32BIT diff --git a/arch/mips/boot/compressed/Makefile b/arch/mips/boot/compressed/Makefile index 2f77e250b91d..0fa91c981658 100644 --- a/arch/mips/boot/compressed/Makefile +++ b/arch/mips/boot/compressed/Makefile @@ -87,7 +87,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 vmlinuzobjs-y += $(obj)/piggy.o diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S index 2d965d91fee4..612b2b301280 100644 --- a/arch/mips/kernel/vmlinux.lds.S +++ b/arch/mips/kernel/vmlinux.lds.S @@ -49,7 +49,7 @@ SECTIONS /* . = 0xa800000000300000; */ . = 0xffffffff80300000; #endif - . = VMLINUX_LOAD_ADDRESS; + . = LINKER_LOAD_ADDRESS; /* read-only */ _text = .; /* Text and read-only data */ .text : { -- 2.25.1