Message ID | ME2P282MB2242FEA05E8B873F6CFA60D7B4769@ME2P282MB2242.AUSP282.PROD.OUTLOOK.COM |
---|---|
State | Superseded |
Delegated to: | Carlos O'Donell |
Headers |
Return-Path: <libc-alpha-bounces+patchwork=sourceware.org@sourceware.org> 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 E08573857023 for <patchwork@sourceware.org>; Tue, 9 May 2023 22:58:05 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org E08573857023 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1683673085; bh=ZXHsKP7NW0wr2wVj3jnv0q1I1T1G15wqofHI9lagNTw=; h=To:Cc:Subject:Date:In-Reply-To:References:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=dTYhruXIOeH+IbCLnICUWkLZLhe45/5Gj65qIL078DDRXKqdnXfMxvWgbvsMuaHWG FO+jffDXA4HMVXLll51fkTpER7+T39LrGIJiYs/jWvX2j6OO1R3KqyxPQI7k6zMNyW RDSJmOOysgW2pyX518lOF1LR5WlTW4gxNiOzwBR0= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from AUS01-SY4-obe.outbound.protection.outlook.com (mail-sy4aus01olkn2082e.outbound.protection.outlook.com [IPv6:2a01:111:f403:7005::82e]) by sourceware.org (Postfix) with ESMTPS id AE9CC3858C2B for <libc-alpha@sourceware.org>; Tue, 9 May 2023 22:57:41 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org AE9CC3858C2B ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EbCzNdSyr3K+2ZZyhlOGopg73CVk7EVfWVuLgMrdckLNuDl3QUXEl4cTSqOa9g5LS4GTMrrOjSayJh98BbvLmH0BXRaGab6TB3esrwx24kwn7wKzzTKLfht6hwP6+MJmIQARfYsnEMf/xXZBu+w4d9bGnRm0g6kcYagJKVjPczkS2Cx7SGuNX7Zwx9FL8ymsPdSAz4It4Ds0XTPDgxy/ao3GOZwoPnbPdxPPgwVJKNiji/WKhMY6JqU91RyGIWr09bsqQzsQoKtjUtP0H5bhX1bafcel2qJ/8qfM0AJpn4UiFSKGhIGFMHMTUiz63xGsVLnegCj94iS5anQaURHb1A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ZXHsKP7NW0wr2wVj3jnv0q1I1T1G15wqofHI9lagNTw=; b=Sq8rvccIlaUVsKZn0viZ4SKeZBs5LbMC1LwXarBGosUbBW7MTZTfQj4ueapLrsF9tsV04ylFNPH0tu7gUVsyxqXHpicww1G9M/NYQtXbpJ8JZIFSpdbrHUKmkdv0ICmhXOd9Mq+i094tE8G4U7IuUOLofF2K2XZI8iYSktsHFdyQqq2KKQO/xxkDTTrIYlp0lzvHFbYqQJA4k+e5SJUa4KDMB+fFleojp6oZHyo9Q7K0/9GY9G0n5l8WKQNtwoDy5CI6SAC5f8D2lwu+TuEns96pSG6SJ6WicT6cBH1m84UJmLvq/o0UNgkuBzeHxqjxQ+MboTp/gzjr6ZltVpVTrg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from ME2P282MB2242.AUSP282.PROD.OUTLOOK.COM (2603:10c6:220:eb::14) by SYYP282MB1520.AUSP282.PROD.OUTLOOK.COM (2603:10c6:10:7c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6363.33; Tue, 9 May 2023 22:57:35 +0000 Received: from ME2P282MB2242.AUSP282.PROD.OUTLOOK.COM ([fe80::e7b2:ce6a:695e:ef76]) by ME2P282MB2242.AUSP282.PROD.OUTLOOK.COM ([fe80::e7b2:ce6a:695e:ef76%6]) with mapi id 15.20.6387.018; Tue, 9 May 2023 22:57:35 +0000 To: libc-alpha@sourceware.org, carlos@redhat.com Cc: mooodyhunter@outlook.com, Qixing ksyx Xue <qixingxue@outlook.com> Subject: [PATCH v2 1/2] elf: Fix marking root dir as nonexist in open_path (bug 30435) Date: Tue, 9 May 2023 18:56:13 -0400 Message-ID: <ME2P282MB2242FEA05E8B873F6CFA60D7B4769@ME2P282MB2242.AUSP282.PROD.OUTLOOK.COM> X-Mailer: git-send-email 2.22.0.windows.1 In-Reply-To: <ME3P282MB39685DC6FC209A91F072BA3CD3719@ME3P282MB3968.AUSP282.PROD.OUTLOOK.COM> References: <ME3P282MB39685DC6FC209A91F072BA3CD3719@ME3P282MB3968.AUSP282.PROD.OUTLOOK.COM> Content-Transfer-Encoding: 8bit Content-Type: text/plain X-TMN: [UMWmG3yDxKb42bfciJH4GArwS1rTK526] X-ClientProxiedBy: MN2PR07CA0004.namprd07.prod.outlook.com (2603:10b6:208:1a0::14) To ME2P282MB2242.AUSP282.PROD.OUTLOOK.COM (2603:10c6:220:eb::14) X-Microsoft-Original-Message-ID: <20230509225614.827-1-qixingxue@outlook.com> MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: ME2P282MB2242:EE_|SYYP282MB1520:EE_ X-MS-Office365-Filtering-Correlation-Id: 5ffe3701-3f39-4417-8edc-08db50e0c741 X-MS-Exchange-SLBlob-MailProps: mWtqiNqNgRsEhNT4t6jk2PUDDIoP5Jvuc2t8MMJ+4YnUsHKZ++YOoE9O8uY6SsB034FgdgnasdTDXSNA34c0/8zOfOUwBxWHU5EuAX8Ae3WQUW5MDF0KoMbTB+tL6U0bX+3PNhPOC6b2IyN9HEB8ZamqDZnO1kfjK3eWb7yMyNp6Itqpyg50TINpNlHagaS0lhxyh+TIwSsBmNNwRnUK4hWgaaQd9cKGWMAKyW6+XLeqBrfuq6OfKN4qWq0bf9C3Ec7DaT3V9B3mdiJhJoRRSP5oMrcslGtkFp96arMAWGypbo47Ey2eFu8020zE/8xCPR8C9kq0j4A9nVlV59ZktPF2zP50WGlvoi2C/loaQ3TSusE5jVYHNL19IYsvpX9eO/1PubtHcDCaeYAui+lgaetb2i2ctwqZ7U9MsEJbk8z+c1sppjQ5y/4HKhowBdhkoOIhSb6wMW55MwxSSLE3JjXg4O/9zNRhaCswTlLfOECDp6ziAdJ5XwDLXMKrS3p8HB/se/7JXzJS1cXotmFSO9/BgW55k6WavpCPOP3Hns6GaWSM66Sjd1PU0jef99bZspXVfTKWTn15wOzDrkjBm3qc1VsoDcFYwTW97eRJrC2AXCqNG6xL8po44g67EkQem9EIJiyvcPZEL0kpH9tM+JV6r0r+WqFJPpaO5l+uOJRbtf6czWtpnzmPVcQyPCxRmStxTg8MZ1Mf5F8mMxn2pZJQCr/CaSJyOVezmwr+aw5N/xJ5mtWNcQz5VSsi6AxejzpkcDRwzv2ljS4+x26Zembzd8kZidz3O5dQbptmWnQ= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qkpsjFHN4T6L4DAY6ysaGSvJFADLawhRExf7oqt8RyfzKN0spZY83zftvjNJDVGa8A6yq/1X3+4y/2wfaZqnvh4sxKnafQdScK1fk/FSLH04mM9UZxs7XFYIXqnbcya/lCQUexY0LXt2aImZCo3kJGkWVJjoTb7E8xGsci5ExlZHlYD0WlGPX1VyqtA6HrhZxxldplPJuyp6W5OQX2nZI23M4+EHiGbWo6heKUrFzhPMkKBT84cEnbA0hDDxj0nNg/aGcACyr6DkQ9RrqgExp2L+z5tsWci4MaL1bH/dELs5yRrT1vRg29nPfcX/k1gU+NQV7LrErURKefo2cvc7QiXvdMvKBabFgeiDrc8eVRXVZoXdhHgM6pWmJ/DLjAg7W41PlGuyQTQUNL1pQbGx+dekjo6LlaED/63axBwswqpGh/ZZ+G0IWRA1x171B13B4P9LOasKwK0hBYIUN7lh952gJTDR4TMRSL/XJt+yjDbT/bi//XI9JNzjhuimzvUbr0z29LSFUydX5b9ycPLtppwP6m4jVG9Duigd+Mo9FHJ9jL3n87HIdKKP/2MMQ/Q++Li9yo2nBxCXtaozODGSZRmR63luCDFvo8HzqeFR45rv/ypLm2aZpKmD0EQga0Pj X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: eiw6GbkdeDW5IS7aUZagSGPAXq6VA2R7bSrwlkOLYPfMqic02/gW9OhONJ40DSJtHhLuR8Z4wFLS/vVaPktvhCLmWbd2ThsxAar7ftK0uTS06qP2b/7NSZJtyn3RCKi7VOaFzBblsNjJ1GWRs7BbTainib8h2SFtSFF3+c/wbfYsV2dDIIu7t7goFGEo+iICupiozA1iuBhci3QmQ+iNiyXTpGrS8SFjdOeeoThckL7esyvf05yV9c1uOqNPmxocxWYTwypRouxJ/MQ8VHMDd+oc1q7+SDNp9OSkEGuMP8XF5i60e/HisHzFSc/ehvszQvmLcMrwnbkXXbqHG6TPNCegbiQs9Bz3ENGXIE1MrwMqUp8nSpcSAtqMqRPUjyqF/KeIIwDL+qD4l41ZtJ/pgnx7Zsb+VBAhYQJn6y2Emm7sT2A+PpI8V0ebyFHjOt7bFD7/3o52Uahokw303q8Swa3e+YH/E22iR7d5v2npV3Ey689XGKt2FJfYUn+y7K2OiK7xSmRiu0JpxyQ9hbUtz34hAv2WoclBFHOnisKin+w7CHIMQjt/VcDSlCgw6KzC0GJHzL6ZE2UDuVuB92NYJxsoFhtOL7tlrEMtJC1gMKO2kfHyjfPq7mISsy2k+ZIAWUwR8lpcmSUeUWBHQuWVI8gLCBBUzM7qKnUCB30q1AcFcIoKeOkLd3FyovLhTU7MbbdPYCmxQyEfI7lfdIj99MAgViHBQ7w1XdJsJop+F88OatkTFhVpgoOXQO2043B6Y8BnBRVUFJsbYugIDMLHatKssgnKtsrecVmZn2o3nk/fnu4FyKqbNtjCXmu+5fezna8ODkp6ToUGDnmeXHMPDGZ4O0OLusrqsIONDGWAna8rYiqoAsc3g2WR1UWsA0Hh50FhEWH/1a8IQDsUmot6IkGUhEzIB425OnjRViD79/XbBiTqRNJcOydkdL84Q5wHyPDWPxrYpzavuftDVMwchHjerXrZsnbL5IFJ/p0lc4FG92kqtlDiCcpvpljw7Jr5gSbaIo7SbnwfRqPNCw0/GbbqaTaj60qx0h+XuyKv+qL0Pycy4mGvxSLwvH9GvyxBbS5AD2+JeUijLAmCVrBG1JnV6Kk3irfibroGPXNm+U261ru3e0zYJ9fdzDU01ey+QDwM4oSXrpulVUtM0jRtEBPpebShVEa98v83WmM0FIpN4wbmx4Zkz+9KtUXwtPKDgVE6K+a7XALzN/QPWrrk+yYJ+FA6QIwP3j0esCsvX8g= X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5ffe3701-3f39-4417-8edc-08db50e0c741 X-MS-Exchange-CrossTenant-AuthSource: ME2P282MB2242.AUSP282.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 May 2023 22:57:35.3573 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SYYP282MB1520 X-Spam-Status: No, score=-8.8 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, GIT_PATCH_0, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list <libc-alpha.sourceware.org> List-Unsubscribe: <https://sourceware.org/mailman/options/libc-alpha>, <mailto:libc-alpha-request@sourceware.org?subject=unsubscribe> List-Archive: <https://sourceware.org/pipermail/libc-alpha/> List-Post: <mailto:libc-alpha@sourceware.org> List-Help: <mailto:libc-alpha-request@sourceware.org?subject=help> List-Subscribe: <https://sourceware.org/mailman/listinfo/libc-alpha>, <mailto:libc-alpha-request@sourceware.org?subject=subscribe> From: Qixing ksyx Xue via Libc-alpha <libc-alpha@sourceware.org> Reply-To: Qixing ksyx Xue <qixingxue@outlook.com> Errors-To: libc-alpha-bounces+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" <libc-alpha-bounces+patchwork=sourceware.org@sourceware.org> |
Series |
[v2,1/2] elf: Fix marking root dir as nonexist in open_path (bug 30435)
|
|
Commit Message
Qixing ksyx Xue
May 9, 2023, 10:56 p.m. UTC
From: Moody Liu <mooodyhunter@outlook.com>
When dlopen is being called, efforts have been made to improve
future lookup performance. This includes marking a search path
as non-existent using `stat`. However, if the root directory
is given as a search path, there exists a bug which erroneously
marks it as non-existing.
The bug is reproduced under the following sequence:
1. dlopen is called to open a shared library, with at least:
1) a dependency 'A.so' not directly under the '/' directory
(e.g. /lib/A.so), and
2) another dependency 'B.so' resides in '/'.
2. for this bug to reproduce, 'A.so' should be searched *before* 'B.so'.
3. it first tries to find 'A.so' in /, (e.g. /A.so):
- this will (obviously) fail,
- since it's the first time we have seen the '/' directory,
its 'status' is 'unknown'.
4. `buf[buflen - namelen - 1] = '\0'` is executed:
- it intends to remove the leaf and its final slash,
- because of the speciality of '/', its buflen == namelen + 1,
- it erroneously clears the entire buffer.
6. it then calls 'stat' with the empty buffer:
- which will result in an error.
7. so it marks '/' as 'nonexisting', future lookups will not consider
this path.
8. while /B.so *does* exist, failure to look it up in the '/'
directory leads to a 'cannot open shared object file' error.
This patch fixes the bug by preventing 'buflen', an index to put '\0',
from being set to 0, so that the root '/' is always kept.
Relative search paths are always considered as 'existing' so this
wont be affected.
Suggested-by: Qixing ksyx Xue <qixingxue@outlook.com>
---
elf/dl-load.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/elf/dl-load.c b/elf/dl-load.c index 9a0e40c0e9..36cf635c03 100644 --- a/elf/dl-load.c +++ b/elf/dl-load.c @@ -1855,7 +1855,11 @@ open_path (const char *name, size_t namelen, int mode, test whether there is any directory at all. */ struct __stat64_t64 st; - buf[buflen - namelen - 1] = '\0'; + /* We only have absolute paths go into this branch. + In the rare case where 'this_dir' is only a '/', we + must keep it. */ + buflen = MAX(buflen - namelen - 1, 1); + buf[buflen] = '\0'; if (__stat64_time64 (buf, &st) != 0 || ! S_ISDIR (st.st_mode))