Received: by 2002:a25:d783:0:0:0:0:0 with SMTP id o125csp652838ybg; Thu, 19 Mar 2020 06:27:22 -0700 (PDT) X-Google-Smtp-Source: ADFU+vuHoqSH0c4k+BR85YCTs9sFWJyr/xlIv4T5TUzPowHvkRRxLrCBMvlugDDLUnNuvv2QfyiI X-Received: by 2002:a05:6830:1db3:: with SMTP id z19mr2238179oti.270.1584624442476; Thu, 19 Mar 2020 06:27:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1584624442; cv=none; d=google.com; s=arc-20160816; b=Gugk55dNqqqr07kKaCD/kV4vFXJbY262s861cAzZN6dvSLx/ZYSQH3hYiofnGICKHl uui9ZMypSWPjEnMQYxCEvFdnZ+GieBRKvxNE74L1Hf0WY4vJx/Yym1V0BojoTcaWq8a0 9mXaOfZ6wy+is2Yb5nDNVjl6io3pDoRER8N0O0C4RlBI/NA+zVVn0FHvHETtdkzTtLom kZ+gaUP8z3aPAHrvm29P8aivzB1uUHj97lQ6NoT1w99w0LbHOhxVFCVIv4QVQFgdCYfz smRTRD9a6bF0IC3bSYyBmpwFbAtq45uJK3SbMec0UmgxDcpFe8H+/2ZOC1srPjy8jqTI mPeg== 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=1NTpj9X2HlGedfV1lcZq4iL1p7DZYjyCQCyUcJF0kIU=; b=e/DFQlAxxIMyaAOwbQmEbwUhTkB3xqvFcOTw348KTpUw7jZdNz2mVCNLliu0VPKLHv 4I4+OszWUDdRHrQpjU+P4iBX0B4R6RecSpo3sSbwp1NPskj8RptPuxaXuARL8UC0uBZK 5yobYW421FeeS6wvBk+HzBm5/TwYZFx+9dEXh6pWVh1t5qM8z+od+r8yqkjlTYMsvOss VFyn0HLrWgLq5eUMitAtpNdShLo7BypkTy+hY1IP1P5leWCxapkR1QoAmJ6dAeG6cgU4 Unvsw8cDmpdKY+MdGlvrE3JWgD1El3hQlgH2Z2QtN6/32ezAdnErF8xVQJdfD0LRpW0z OWZg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=WDmgnlBA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l17si1326967otn.221.2020.03.19.06.27.10; Thu, 19 Mar 2020 06:27:22 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=WDmgnlBA; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730313AbgCSNZy (ORCPT + 99 others); Thu, 19 Mar 2020 09:25:54 -0400 Received: from mail.kernel.org ([198.145.29.99]:53602 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730694AbgCSNZv (ORCPT ); Thu, 19 Mar 2020 09:25:51 -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 8045D208C3; Thu, 19 Mar 2020 13:25:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1584624351; bh=kJdYtdkXoUJqBCbsGNBYogiLr8GIFp4ngkilDarlmMY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=WDmgnlBAdY82QQ6cayWDQgfBx8T2WYBPyIabciDR/EpXXhdW5eRGUyf/dBCU70sHQ Yq+nFlDEu7H42l/sG75fjmLUsvXQj2Tk5Fs99e+xSSz0u2/ocJy/IaxPZDjGJTWmAE ro2MdfcbAec7sI6WfswFNrbhft+CdaV2MiiubkAk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Bruce Ashfield , Victor Kamensky , Paul Burton , linux-mips@vger.kernel.org, Ralf Baechle , James Hogan , Vincenzo Frascino , richard.purdie@linuxfoundation.org, Sasha Levin Subject: [PATCH 5.5 13/65] mips: vdso: fix jalr t9 crash in vdso code Date: Thu, 19 Mar 2020 14:03:55 +0100 Message-Id: <20200319123930.497716995@linuxfoundation.org> X-Mailer: git-send-email 2.25.2 In-Reply-To: <20200319123926.466988514@linuxfoundation.org> References: <20200319123926.466988514@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: Victor Kamensky [ Upstream commit d3f703c4359ff06619b2322b91f69710453e6b6d ] Observed that when kernel is built with Yocto mips64-poky-linux-gcc, and mips64-poky-linux-gnun32-gcc toolchain, resulting vdso contains 'jalr t9' instructions in its code and since in vdso case nobody sets GOT table code crashes when instruction reached. On other hand observed that when kernel is built mips-poky-linux-gcc toolchain, the same 'jalr t9' instruction are replaced with PC relative function calls using 'bal' instructions. The difference boils down to -mrelax-pic-calls and -mexplicit-relocs gcc options that gets different default values depending on gcc target triplets and corresponding binutils. -mrelax-pic-calls got enabled by default only in mips-poky-linux-gcc case. MIPS binutils ld relies on R_MIPS_JALR relocation to convert 'jalr t9' into 'bal' and such relocation is generated only if -mrelax-pic-calls option is on. Please note 'jalr t9' conversion to 'bal' can happen only to static functions. These static PIC calls use mips local GOT entries that are supposed to be filled with start of DSO value by run-time linker (missing in VDSO case) and they do not have dynamic relocations. Global mips GOT entries must have dynamic relocations and they should be prevented by cmd_vdso_check Makefile rule. Solution call out -mrelax-pic-calls and -mexplicit-relocs options explicitly while compiling MIPS vdso code. That would get correct and consistent between different toolchains behaviour. Reported-by: Bruce Ashfield Signed-off-by: Victor Kamensky Signed-off-by: Paul Burton Cc: linux-mips@vger.kernel.org Cc: Ralf Baechle Cc: James Hogan Cc: Vincenzo Frascino Cc: richard.purdie@linuxfoundation.org Signed-off-by: Sasha Levin --- arch/mips/vdso/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/arch/mips/vdso/Makefile b/arch/mips/vdso/Makefile index e05938997e696..96afd73c94e8a 100644 --- a/arch/mips/vdso/Makefile +++ b/arch/mips/vdso/Makefile @@ -29,6 +29,7 @@ endif cflags-vdso := $(ccflags-vdso) \ $(filter -W%,$(filter-out -Wa$(comma)%,$(KBUILD_CFLAGS))) \ -O3 -g -fPIC -fno-strict-aliasing -fno-common -fno-builtin -G 0 \ + -mrelax-pic-calls -mexplicit-relocs \ -fno-stack-protector -fno-jump-tables -DDISABLE_BRANCH_PROFILING \ $(call cc-option, -fno-asynchronous-unwind-tables) \ $(call cc-option, -fno-stack-protector) -- 2.20.1