From patchwork Fri Feb 5 07:32:18 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: develop--- via Libc-alpha X-Patchwork-Id: 41943 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id D900C3851C2A; Fri, 5 Feb 2021 07:32:27 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org D900C3851C2A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1612510347; bh=3tJ/eOJBNR1Z9yNhoVW3y4x4eGv8sDR+vFUIMfCLzSI=; h=To:Subject:Date:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:Cc:From; b=Xh4y1wNfWFv64KUD8FRpoIKIZ1Z5JA5TMwBPLfxU8LuDiwmMD7lDENUDbwajBiH7i X9C/T+1fVc5kZ6xfg0Q7aZeJTpVJepIH3K3ovqwURZyNWwOTbvACRkca+RBxJf0FEZ J1O5V8OHhzt7AUzltXjFUmTimiTf8QaA1fKKA/Dc= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by sourceware.org (Postfix) with ESMTPS id D2AD93851C07 for ; Fri, 5 Feb 2021 07:32:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org D2AD93851C07 Received: by mail-ej1-x62e.google.com with SMTP id sa23so10342456ejb.0 for ; Thu, 04 Feb 2021 23:32:24 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=3tJ/eOJBNR1Z9yNhoVW3y4x4eGv8sDR+vFUIMfCLzSI=; b=nDvC1WV1CBciVWEWhrRB5bL4wUgyiWtsDpqg1AF3BELb0HZtAFyj7ZYa3WmlD7blA4 LhkDM8m8ziU1Y7TRKwgIJwUp32xk/B8RmyuAiJJE3rnCyshpzA9j3XNLYuTwh+AIfK4E u6zFcyvvLUitkcApIumPQ8bC5mA+egLFVyk3ZWFQheeJ4k9ci59GfkZGmoyvbkxV6VE1 vUlSlo7LLlxbsivhZ69KZWf3E4U6Poby6JtiMQ+MljvaWOaDB8vD4ZXRDqvinTUIrNpy NQ+LP0f8gWRixZ7OKtD13eRWe9K70Zk4pRaGeG3M/bysuywWYmvh2dBx/Uc7QWhXNvvA TKeQ== X-Gm-Message-State: AOAM532SHYf4s5SiHhc7sI8IGHyO2whdkM7xLSA2DUK0otM3yy0S0zpN kvx9xSUnqxuV37KN5K8Iszgrm70RKg/5Pg== X-Google-Smtp-Source: ABdhPJwN3UTwMThDhtMnzNZTehzZACZ1yaAb+PB9E4EbuiFJjTzcrN2NcxD2mUQQuR7rfg+LAARaZQ== X-Received: by 2002:a17:906:b50:: with SMTP id v16mr2701894ejg.298.1612510343778; Thu, 04 Feb 2021 23:32:23 -0800 (PST) Received: from sf.home (host81-129-87-227.range81-129.btcentralplus.com. [81.129.87.227]) by smtp.gmail.com with ESMTPSA id y2sm3554105ejd.27.2021.02.04.23.32.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 04 Feb 2021 23:32:23 -0800 (PST) Received: by sf.home (Postfix, from userid 1000) id 638435A220DD; Fri, 5 Feb 2021 07:32:20 +0000 (GMT) To: libc-alpha@sourceware.org, Carlos O'Donell , DJ Delorie Subject: [PATCH] nsswitch: actually return the result when nss database is being locked Date: Fri, 5 Feb 2021 07:32:18 +0000 Message-Id: <20210205073218.1687522-1-slyich@gmail.com> X-Mailer: git-send-email 2.30.0 MIME-Version: 1.0 X-Spam-Status: No, score=-8.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: slyich--- via Libc-alpha From: develop--- via Libc-alpha Reply-To: slyich@gmail.com Cc: Sergei Trofimovich Errors-To: libc-alpha-bounces@sourceware.org Sender: "Libc-alpha" From: Sergei Trofimovich https://sourceware.org/bugzilla/show_bug.cgi?id=27343 Before the change nss_database_check_reload_and_get() did not populate the '*result' value when it returned success in a case of chroot detection. This caused initgroups() to use garage pointer in the following test (extracted from unbound): ``` int main() { // load some NSS modules struct passwd * pw = getpwnam("root"); chdir("/tmp"); chroot("/tmp"); chdir("/"); // access nsswitch.conf in a chroot initgroups("root", 0); } ``` Reviewed-by: DJ Delorie --- nss/nss_database.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nss/nss_database.c b/nss/nss_database.c index cf0306adc4..e1bef6bd75 100644 --- a/nss/nss_database.c +++ b/nss/nss_database.c @@ -398,8 +398,9 @@ nss_database_check_reload_and_get (struct nss_database_state *local, && (str.st_ino != local->root_ino || str.st_dev != local->root_dev))) { - /* Change detected; disable reloading. */ + /* Change detected; disable reloading and return current state. */ atomic_store_release (&local->data.reload_disabled, 1); + *result = local->data.services[database_index]; __libc_lock_unlock (local->lock); __nss_module_disable_loading (); return true;