Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp388912pxj; Thu, 20 May 2021 11:39:00 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz94vNqYmBYolLWPRsSiy3fcClM2GhzAjp9hsJ9c/osf8lXd2o3c84nxN7eA8dxX3kMI4zP X-Received: by 2002:a05:6e02:1382:: with SMTP id d2mr2725130ilo.256.1621535940758; Thu, 20 May 2021 11:39:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621535940; cv=none; d=google.com; s=arc-20160816; b=lnY0HI62bFzMNVRIKRUR0+IMwKJgSeD5lhocH6T9iw5zvSGlgQsmDCBzZg/vAMeX/7 EJuL4D5Yaz4TQJKrQAOJJSVzXNUAxdBdn+2SrLIvG/AzGb/P1ItnSJCepUYYGiZzjwh8 sIk76Et4+xnX1B15G4nLMOPRbLlz2tK8SrJ0Ytxmk7kVyE+v2ycRQ3UJdFfyCgXOcQ+V /ghoey/mJ+bjSG1vBhJurBmbMuIRgYiVuvL7lKm1tDU+qUiMrGp1WbMrZ6QslPFePcdN Qo0keSvWJoQ7a9tCZa75O4oZl53YrXkDbFul8QVC/Cjp7Gvef/q5PfWZNyuk1Njb+ecp y2Ig== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=6BdzHiraunLbbqAHz9Co5zP6DHTQTIxIFa93GaNNzB0=; b=LIo2KmmjBQya+ldFxaDNQ904pSkj6muv7IVp3XRYTASc5Ht5rzpQfSCbtYYwd4fw2S UyTd9t3Axw0g9rKeKm1f7fqmtJ2CNqaZBnL6qQhi0mPyMFwjr5aRBiRGEGd9bV4Wpcef M9w7sxHwnJT+ElnPlJhQTeJUkBixPZTk3bkNEyCYdOC+v6WIvo5TVngTyQQPgZ5ZcDWK 1W5u4Qb3blPuUH+z6dJNutBJD/0DfR0fLPuhS8hMHYnaxxwatxlIMY7hbt+7w53jQmPm NqmS5WBnmUz6/t7ICZLWmfGju2mtR16WUdB1IXOCc/5ArFzLc4bBB1p07V2F5pwqOX+D S7EA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=S+VWOBhv; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y16si3203166jad.62.2021.05.20.11.38.47; Thu, 20 May 2021 11:39:00 -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=@linuxfoundation.org header.s=korg header.b=S+VWOBhv; 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; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236082AbhETKZz (ORCPT + 99 others); Thu, 20 May 2021 06:25:55 -0400 Received: from mail.kernel.org ([198.145.29.99]:48156 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236242AbhETKOu (ORCPT ); Thu, 20 May 2021 06:14:50 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 7A429613D8; Thu, 20 May 2021 09:45:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1621503900; bh=UiHprfsDhBPlWYXfRFyYrCW+JLjI9ilyBToEENB948E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=S+VWOBhvFCBVGQ+wXJFR+rbRIDcxxkOltrxg/jj6XcBVkRUKOaJcU4pGkBa83+iep xux8zYvDOegtqxTOl1a+0vAQDjtzRyS9C2Pe7sER8I9NfkMLUGSSCxb+0AUmefG5b+ l6ncvV4NjU5JJ+l4UuCiHNGBAJ24SFui/YMsITFg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Ritesh Raj Sarraf , Johannes Berg , Anton Ivanov , Richard Weinberger , Sasha Levin Subject: [PATCH 4.19 407/425] um: Mark all kernel symbols as local Date: Thu, 20 May 2021 11:22:56 +0200 Message-Id: <20210520092144.772932429@linuxfoundation.org> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20210520092131.308959589@linuxfoundation.org> References: <20210520092131.308959589@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Johannes Berg [ Upstream commit d5027ca63e0e778b641cf23e3f5c6d6212cf412b ] Ritesh reported a bug [1] against UML, noting that it crashed on startup. The backtrace shows the following (heavily redacted): (gdb) bt ... #26 0x0000000060015b5d in sem_init () at ipc/sem.c:268 #27 0x00007f89906d92f7 in ?? () from /lib/x86_64-linux-gnu/libcom_err.so.2 #28 0x00007f8990ab8fb2 in call_init (...) at dl-init.c:72 ... #40 0x00007f89909bf3a6 in nss_load_library (...) at nsswitch.c:359 ... #44 0x00007f8990895e35 in _nss_compat_getgrnam_r (...) at nss_compat/compat-grp.c:486 #45 0x00007f8990968b85 in __getgrnam_r [...] #46 0x00007f89909d6b77 in grantpt [...] #47 0x00007f8990a9394e in __GI_openpty [...] #48 0x00000000604a1f65 in openpty_cb (...) at arch/um/os-Linux/sigio.c:407 #49 0x00000000604a58d0 in start_idle_thread (...) at arch/um/os-Linux/skas/process.c:598 #50 0x0000000060004a3d in start_uml () at arch/um/kernel/skas/process.c:45 #51 0x00000000600047b2 in linux_main (...) at arch/um/kernel/um_arch.c:334 #52 0x000000006000574f in main (...) at arch/um/os-Linux/main.c:144 indicating that the UML function openpty_cb() calls openpty(), which internally calls __getgrnam_r(), which causes the nsswitch machinery to get started. This loads, through lots of indirection that I snipped, the libcom_err.so.2 library, which (in an unknown function, "??") calls sem_init(). Now, of course it wants to get libpthread's sem_init(), since it's linked against libpthread. However, the dynamic linker looks up that symbol against the binary first, and gets the kernel's sem_init(). Hajime Tazaki noted that "objcopy -L" can localize a symbol, so the dynamic linker wouldn't do the lookup this way. I tried, but for some reason that didn't seem to work. Doing the same thing in the linker script instead does seem to work, though I cannot entirely explain - it *also* works if I just add "VERSION { { global: *; }; }" instead, indicating that something else is happening that I don't really understand. It may be that explicitly doing that marks them with some kind of empty version, and that's different from the default. Explicitly marking them with a version breaks kallsyms, so that doesn't seem to be possible. Marking all the symbols as local seems correct, and does seem to address the issue, so do that. Also do it for static link, nsswitch libraries could still be loaded there. [1] https://bugs.debian.org/983379 Reported-by: Ritesh Raj Sarraf Signed-off-by: Johannes Berg Acked-By: Anton Ivanov Tested-By: Ritesh Raj Sarraf Signed-off-by: Richard Weinberger Signed-off-by: Sasha Levin --- arch/um/kernel/dyn.lds.S | 6 ++++++ arch/um/kernel/uml.lds.S | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/arch/um/kernel/dyn.lds.S b/arch/um/kernel/dyn.lds.S index 5568cf882371..899233625467 100644 --- a/arch/um/kernel/dyn.lds.S +++ b/arch/um/kernel/dyn.lds.S @@ -6,6 +6,12 @@ OUTPUT_ARCH(ELF_ARCH) ENTRY(_start) jiffies = jiffies_64; +VERSION { + { + local: *; + }; +} + SECTIONS { PROVIDE (__executable_start = START); diff --git a/arch/um/kernel/uml.lds.S b/arch/um/kernel/uml.lds.S index 36b07ec09742..22ff701d9b71 100644 --- a/arch/um/kernel/uml.lds.S +++ b/arch/um/kernel/uml.lds.S @@ -7,6 +7,12 @@ OUTPUT_ARCH(ELF_ARCH) ENTRY(_start) jiffies = jiffies_64; +VERSION { + { + local: *; + }; +} + SECTIONS { /* This must contain the right address - not quite the default ELF one.*/ -- 2.30.2