Received: by 2002:a25:c593:0:0:0:0:0 with SMTP id v141csp1234416ybe; Wed, 11 Sep 2019 11:29:59 -0700 (PDT) X-Google-Smtp-Source: APXvYqxrdjdMKtuXQX3ePmXtqu3wrP0mpBWrBB8CFc8X3Udz7m3Mh055tWk9FlwaVWUqzKt9kClh X-Received: by 2002:a50:8a9a:: with SMTP id j26mr38150060edj.251.1568226599295; Wed, 11 Sep 2019 11:29:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1568226599; cv=none; d=google.com; s=arc-20160816; b=oDdslqQvncWPMrmRDv65k/4k2+C7PL0gx1WKG9H9WuC4Gh98WKN4tXA9NpKER+wxbg zoYSVQ8uwUg62ynpbTFiPCKNSLSgfvCKpVl8pOj9v3nlGVOTccXs9N/fnGDourMLO35B Z0kM1U+Iq3xAT8PwvWmoTNokRiFwBc/byJysw5psPq0RAtQf9m1KdA37VcMGuKdEN5iq FEEuRMYyzbHVhmXIaJeMJnj30AAXObUNe55+BYr+iLb5MkIeBTQDJQoz5A+Ny1W5zWi0 XRwyJbogHMfUuR4Xl17DhOJHqubU7XyhxaF6gA/l/uhYuE2S62oxydOuCQ+A71InvDAC Ebmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:dkim-signature; bh=tkWbf8ELwAdJ/xlr0OaBm0rrsvGIBGvztZfwra4bVB8=; b=xfXQiC3y0alJ/u8gRINKgaScEXDbHb4tJdO4YxlTjOwQo8ewN3M2dwgtN1xfl/ftbz tAdPL/3BH5FlEKeK79rQaPqzcgAdvsm0N+PwNgWlVzwhW1zBCUFvyDyfKY+BLYgCTnEM uMMWWDDdje9U5HbglxiPFCYqYKaexrmUQOIBp3Nh3JZ/ITzOFVpNmc2rVjVxM9VN2Qwh O7LYCUj4iSugNG2Mx684gDdCn0dA21UEXSanq6mo/IBnkz6XB2lo8fY0yrY94VnrD67Y i6AT0D1P/E651uzNiFYM0DUfF5tVQckc/05Eft+DsMEoQKU/M2EERBmuMCCdO4m2EK+C swlQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b="eXp/lwwV"; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l3si3687810edq.115.2019.09.11.11.29.35; Wed, 11 Sep 2019 11:29:59 -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="eXp/lwwV"; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730093AbfIKS0O (ORCPT + 99 others); Wed, 11 Sep 2019 14:26:14 -0400 Received: from mail.kernel.org ([198.145.29.99]:53164 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728198AbfIKS0O (ORCPT ); Wed, 11 Sep 2019 14:26:14 -0400 Received: from linux-8ccs (ip5f5ade65.dynamic.kabel-deutschland.de [95.90.222.101]) (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 53FC220863; Wed, 11 Sep 2019 18:26:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1568226373; bh=Ih6q6C0Ey30P2dlsz+uDKXdLbs5oAKqU5nDPKbljbi0=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=eXp/lwwVvWeEMbRvy3kuxSz/AaCEA3vwhWofMQlcUiNHEwd2d9u/hKgUSbuDKHs62 yfGnWux9k7HS7uMGj4a7Qnq0+S/Ms6J/PzTf5vdVVCwqHK7q1LzPVwWClrKGzwFeyo JBLtX5XN6jtYKxMI32h8dwTT1n8uVVW6draC3nE4= Date: Wed, 11 Sep 2019 20:26:07 +0200 From: Jessica Yu To: Will Deacon Cc: linux-kernel@vger.kernel.org, maco@android.com, gregkh@linuxfoundation.org, Matthias Maennich , Ard Biesheuvel , Catalin Marinas Subject: Re: [PATCH] module: Fix link failure due to invalid relocation on namespace offset Message-ID: <20190911182607.GB640@linux-8ccs> References: <20190911122646.13838-1-will@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <20190911122646.13838-1-will@kernel.org> X-OS: Linux linux-8ccs 4.12.14-lp150.12.61-default x86_64 User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org +++ Will Deacon [11/09/19 13:26 +0100]: >Commit 8651ec01daed ("module: add support for symbol namespaces.") >broke linking for arm64 defconfig: > > | lib/crypto/arc4.o: In function `__ksymtab_arc4_setkey': > | arc4.c:(___ksymtab+arc4_setkey+0x8): undefined reference to `no symbol' > | lib/crypto/arc4.o: In function `__ksymtab_arc4_crypt': > | arc4.c:(___ksymtab+arc4_crypt+0x8): undefined reference to `no symbol' > >This is because the dummy initialisation of the 'namespace_offset' field >in 'struct kernel_symbol' when using EXPORT_SYMBOL on architectures with >support for PREL32 locations uses an offset from an absolute address (0) >in an effort to trick 'offset_to_pointer' into behaving as a NOP, >allowing non-namespaced symbols to be treated in the same way as those >belonging to a namespace. > >Unfortunately, place-relative relocations require a symbol reference >rather than an absolute value and, although x86 appears to get away with >this due to placing the kernel text at the top of the address space, it >almost certainly results in a runtime failure if the kernel is relocated >dynamically as a result of KASLR. > >Rework 'namespace_offset' so that a value of 0, which cannot occur for a >valid namespaced symbol, indicates that the corresponding symbol does >not belong to a namespace. > >Cc: Matthias Maennich >Cc: Jessica Yu >Cc: Ard Biesheuvel >Cc: Catalin Marinas >Fixes: 8651ec01daed ("module: add support for symbol namespaces.") >Reported-by: kbuild test robot >Signed-off-by: Will Deacon Applied, thanks everyone! Jessica >--- > >Please note that I've not been able to test this at LPC, but it's been >submitted to kernelci. > > include/asm-generic/export.h | 2 +- > include/linux/export.h | 2 +- > kernel/module.c | 2 ++ > 3 files changed, 4 insertions(+), 2 deletions(-) > >diff --git a/include/asm-generic/export.h b/include/asm-generic/export.h >index e2b5d0f569d3..d0912c7ac2fc 100644 >--- a/include/asm-generic/export.h >+++ b/include/asm-generic/export.h >@@ -17,7 +17,7 @@ > > .macro __put, val, name > #ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS >- .long \val - ., \name - ., 0 - . >+ .long \val - ., \name - ., 0 > #elif defined(CONFIG_64BIT) > .quad \val, \name, 0 > #else >diff --git a/include/linux/export.h b/include/linux/export.h >index 2c5468d8ea9a..ef5d015d754a 100644 >--- a/include/linux/export.h >+++ b/include/linux/export.h >@@ -68,7 +68,7 @@ extern struct module __this_module; > "__ksymtab_" #sym ": \n" \ > " .long " #sym "- . \n" \ > " .long __kstrtab_" #sym "- . \n" \ >- " .long 0 - . \n" \ >+ " .long 0 \n" \ > " .previous \n") > > struct kernel_symbol { >diff --git a/kernel/module.c b/kernel/module.c >index f76efcf2043e..7ab244c4e1ba 100644 >--- a/kernel/module.c >+++ b/kernel/module.c >@@ -547,6 +547,8 @@ static const char *kernel_symbol_name(const struct kernel_symbol *sym) > static const char *kernel_symbol_namespace(const struct kernel_symbol *sym) > { > #ifdef CONFIG_HAVE_ARCH_PREL32_RELOCATIONS >+ if (!sym->namespace_offset) >+ return NULL; > return offset_to_ptr(&sym->namespace_offset); > #else > return sym->namespace; >-- >2.23.0.162.g0b9fbb3734-goog >