From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 82402 invoked by alias); 4 May 2017 16:39:59 -0000 Mailing-List: contact elfutils-devel-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Post: List-Help: List-Subscribe: Sender: elfutils-devel-owner@sourceware.org Received: (qmail 82382 invoked by uid 89); 4 May 2017 16:39:58 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.99.2 on sourceware.org X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 spammy= X-Spam-Status: No, score=-25.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_HELO_PASS,SPF_PASS autolearn=ham version=3.3.2 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on sourceware.org X-Spam-Level: X-HELO: EUR01-HE1-obe.outbound.protection.outlook.com Received: from mail-he1eur01on0117.outbound.protection.outlook.com (HELO EUR01-HE1-obe.outbound.protection.outlook.com) (104.47.0.117) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 04 May 2017 16:39:56 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qtcompany.onmicrosoft.com; s=selector1-qt-io; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=MlifEzjIwD/08vC+pBqblJGEA8pn7qbJMij6jBRPofI=; b=D8YBc3S/NdvCp92QeEzkip3jzVKeVTDIvywgD66wMq4wJZ3pysFh08KTWCWmTXlg86njJZKjSwMhC3cvigqAzGvS3m+5Z38RRWknVUTfBKYl2irqTyJug4dGsoH9DmXMk4O0sQO8rCIpFKUi5XIvgGBvmMo/yji/+Tzxkk1/REY= Authentication-Results: sourceware.org; dkim=none (message not signed) header.d=none;sourceware.org; dmarc=none action=none header.from=qt.io; Received: from [10.9.78.56] (62.220.2.194) by DB3PR02MB236.eurprd02.prod.outlook.com (2a01:111:e400:9410::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1075.11; Thu, 4 May 2017 16:39:56 +0000 From: Ulf Hermann Subject: [PATCH v2] Close files before renaming or unlinking them To: Message-ID: <0341e9c2-f481-f375-0c95-7d2d89a3bb12@qt.io> Date: Fri, 05 May 2017 09:24:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Originating-IP: [62.220.2.194] X-ClientProxiedBy: DB5PR04CA0008.eurprd04.prod.outlook.com (2a01:111:e400:598c::18) To DB3PR02MB236.eurprd02.prod.outlook.com (2a01:111:e400:9410::24) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 0cf27201-7790-4374-dacb-08d4930c3276 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(201703131423075);SRVR:DB3PR02MB236; X-Microsoft-Exchange-Diagnostics: 1;DB3PR02MB236;3:C167jpb8y9XueLNgGuInU0qOCr5zBtX62a/MySOr13KyqDa2cwQpoCpT1SbIdu08YdZGrI8kC8RD86IUrHVakN2W/KW6YNDnIWXMczAh2r/RJDnQh7ggXjU9I11OG100UpsGprZMnutK+1SrkHIsUhHAO6rbNh6ieMp/DruG1b8E7b7iM9LBX/1VB00VVQH95CnusYo12WMAOgtbKCn1jejApK02Fp1puyo54d7wfFgietVVCn5/2EPcTzTEz4GoS9TfomMUsKlAVoQw7BnNUdsIa+dfcU+kBLOoYC4PzIaiZXVZ5kIAaR/irAUGhzTg;25:kP/690xz4KHbCWiTQBD+8Du/tOZvv1BvRcItaq6f7RKkkz5sfKN7UFGSY/QLU5PRd2uzEFL78O2vbbLamXKrzJDXCZ6u/lwVm4b35tWtwPjJW+d29AEsKmHyEN/l31uqfDLTEi7hZzTIfPLo1fHjZWv/v5789moLZxeH5CWccxoUEjcNvl0VuD64gHrqGDnkAv3zGa25YA63sNHr9t7PiMPTDSvSD1vevhUqewZ4wtA5uQIbiPrSho8sTqfQC5D0DJHxFpVt5p8kYYDIi/AN3eboKp2DctSRSAbBeZ25AWL4IgmffX/eXh5uvy8hEM6aEyTrI2NjREBIRZ2UYc5V4ND6Xlb0xGUVZk5HjgekH2K32KP8YiItoInwEHaKesSaJ1FQcQrNYqgoP1R17alOysXHZsG4wLt4kEdkK0NSoIK9jIjjhQ9uneI/JRJEbJLveSUBsnOYWcvIurSkQAWahGtZ6jB4sbnupk+9WEUdFUo= X-Microsoft-Exchange-Diagnostics: 1;DB3PR02MB236;31:KeOpb48Vj0VXMhKZAnQOOmHJmYWbyQTNFtK0Dtb9ZIkhS6qgdc8f33TWiQGK+r+vdJ4hnOBVK3fFiG+6XUo+iOZSnpyR6XX82prSS0rwbPj5clTz3Jo5ZoTUJWdeI4+uGzHPpKqlnHB69K/uwRA/1VU+uv4Vvyjp+wqm+tQ4XnCukoa5nGn0dOFFCReYPuIrNNlUrd5y5CEk78uZ7RepE0JSYCYT29VDrkfQ9XObCghB6rz7Rpls4S6c1xIbG2XH;20:bwc5zoixL47pHeOjActllzbtIp5D56n40ff9ku5uIZ1x+3OGjXvFPTSLaifsKWIp12fvb3hGIlW3nOsENjQFfZTOwktNK5K0e30pZYVw/VFkP7qpScw2Gdsu8D2qRFyJiZqvXHalUvbvjq65Pv128BPMoi6xtmW4h86NqyDQGugPRuabyJGYmJDq/grngshq9hZfmUm+PqpNKNMm+Ht6oysqOos2b/y0PNWmcQTpG+c2XKDQxjXK3MUxQ03Xx1UR X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(6040450)(601004)(2401047)(8121501046)(5005006)(93006095)(93001095)(3002001)(10201501046)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(2016111802025)(20161123558100)(20161123562025)(20161123564025)(20161123560025)(20161123555025)(6072148)(6043046);SRVR:DB3PR02MB236;BCL:0;PCL:0;RULEID:;SRVR:DB3PR02MB236; X-Microsoft-Exchange-Diagnostics: 1;DB3PR02MB236;4:50701QSSwV4KEhWfFx2azdBTYB5fMYJx2WpXy0dUjpntBJpeqccH9YEM8RQCzaaGLUYeiVJE1voM84skfeTurNjcXd7nZu1sLwD8mULIx+UVhxSsMDM2chxyUJGE2gaUoEBBqc8COC3boTPMaig+OOM37Lp8niLPfNtROL4jk6j9iSerm48gbIOHXV6sUhHh9d+8oKysClEA6xF8ThwNMOoO3AaUjdcmpVFCsMp3NSXebY9cyDllQW8qzmu8J+soiNsS3j1eYG3m76mE8gnoaFKSZ+M53G0EF+6FY+pjp1a7JVpz4aQEHHa2YSvnFa0k9teGww5sEy3A+Jv+HO5TJxxpWgstrt6IW/QSAuscO7mLAgjiftR/5EiBA+RrIvKeqOO8AeVGREKNY6mZVQhMPKm2H+X2BlBV406ZIIusWvwryAJyAIGTtvo7Su6an4zj7LHGC2IyEHW4aG6EGLoP2wLCIPdvcarz9p4+CX77hBO5E2bFk2XUcPoSM5+gAnPkNPsl5ZvcqjB0M35ItoD58OCr4LBG++3j+Hy7bx/TmdnqJxQ+oO4luBBmy7LccttFuyWNvFknCvigbPpfXhmL/cDTdodegnU6kdivwppz4ZRzGAcx2Difp45xjXcnT+2TIgJSiAz760Fe49m9tAAj7h0jpqCuGZ7WBXY6iDppiNTTUDbEtasZ3dPyTRbsn1bydRtzMsz255piNYUvMmBiK7EOyeIdT9CfG41dnwxvn6h81LUWn/PNcjcINBGprrq3knu6juL3UXDB19d00IpOu+vkG4TdHug6xyfZGtZdvUxjKrJv+CVcUWc8A/sggp3tqnpv82hp7AVNm189fK37Eg== X-Forefront-PRVS: 02973C87BC X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(4630300001)(6009001)(6049001)(39410400002)(39450400003)(39840400002)(39400400002)(377424004)(66066001)(50466002)(47776003)(53936002)(36756003)(38730400002)(478600001)(110136004)(305945005)(31686004)(42186005)(6916009)(7736002)(74482002)(4001350100001)(83506001)(65806001)(65956001)(25786009)(189998001)(6666003)(2906002)(3846002)(31696002)(33646002)(86362001)(575784001)(5660300001)(81166006)(65826007)(8676002)(54356999)(230700001)(2351001)(23676002)(77096006)(6486002)(6116002)(50986999);DIR:OUT;SFP:1102;SCL:1;SRVR:DB3PR02MB236;H:[10.9.78.56];FPR:;SPF:None;MLV:sfv;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtEQjNQUjAyTUIyMzY7MjM6Zzd4dDNjRThqcWNWUm00OEhWMi9iai9zUU5P?= =?utf-8?B?ZFBqeU1ScEdEU0svb2ExWDVnazFubTU4R3YyMnRaMUV2TWVMakx3eDdTUFRh?= =?utf-8?B?a29FMzN3WERPNzBoSTkxc1hxU0Y2cmduTG1sQVd1dzEwNGg1S1NsUHZmcVFa?= =?utf-8?B?WHp3aTdkcHRUWUZhdXMvYkxKcHc1MmprSlp4MlpNVVdTVzlUK3JsVlVxRXlp?= =?utf-8?B?d2NDTXR4VHFxY3Y0RHdHK0RXQ2haYzltYStJeHJlVnpiYTF3OGhKTHJnWG1z?= =?utf-8?B?cjh4SFdYVnlKWTA5TFI2UENHYm1vb2FBalpySDRLSGRReDBxend5eCtpWSt6?= =?utf-8?B?VlZaY2hSQnZ4bjUyMzVDdTZsUkoyRjBBTGlZRUNlekFFZ0Z6WGZNbiszc3NB?= =?utf-8?B?UHplNjZrMTdmb3huNmdEQWNxdVZvc1NQdklNbkJNWWN5S3cxZnFrM3lFTDM1?= =?utf-8?B?TzgyQTBWSkl5dU5Ha3FtVVJQZFdWaFVHOTBSRVlIWGVOejcrb3REVUcvZ1k4?= =?utf-8?B?SzNuZ3BtZk9ESWlTUmRrbnB1Tzg3eEk2ZHhsTG42T05zQkdUK2VocU9kU212?= =?utf-8?B?R2FrOVR2YnNyYWt3UXVzZDlnMzQ1MTRaMEc0RFNuMC9RR2hWbHlVVm9vRnk3?= =?utf-8?B?TEtKTW44NkNHemxqZXZIZWpWWmNqTDU1dTVQcTVxck1kNkNHWEZndEZsSmNt?= =?utf-8?B?dnVITjFtM2xnd2RPd3ByUElaaGFEVmtEWUlJMFBBa09Id2E4UDFDNkpXVEZr?= =?utf-8?B?QitHbVc5eDAxN3dWVFJJeUk5a3dWbVlCQXF3T3N4OXo1bXp6UHhlUDZQMCs3?= =?utf-8?B?NytRS01vZk4yWWZvV0pYRDUvb21GZ1hCR3BpK0IyWkRqME9pQzFGMlFBSDFR?= =?utf-8?B?QWJKamZQREZEa1RObkhSNit0bkkwRk1TOFJQV3hTSzBzRThiSU9mRjZlZmp2?= =?utf-8?B?cndXcXUwMlgwdHM5MVZaRHI4WnIwaTQxeUltbVdjdlpUZSsxOXNuOGRYT0VS?= =?utf-8?B?eU1xS1ZwUlUyTTBteUwvTzVtdmVXcFIyMGdWQVdIT1JTK1QzeXgrODJOTWRu?= =?utf-8?B?cXptdDBtZUxFWGM2cWc0TXBBbXlMSVFhTFFCREo4ZTlwN0NqaUJvMU9TNktn?= =?utf-8?B?TGNuNXJhcWlXSG9zamNlSXZmc0p3ZTE0dWYrZlRxTkJEdDhITDc3YktNcS9F?= =?utf-8?B?TmRsYzJHRHBDejM3RlFVclJvdlI4SWZ2ZXpaNzhwNUhOdDZ3WnhhYW5ueUtB?= =?utf-8?B?NSswOXhIclZBZ1lKZTdaMy9maTFJQTd0UVBibVRvQ2Flem1rM216VTBHR3Nx?= =?utf-8?B?UHNEZHBGT2NnNmJwdVEyaFlkN2hVV2VVRlNTV0FvbXBDZTUyZGsxeDlveEpa?= =?utf-8?B?eFRpV1hvRldDczZKT0hBT0pQd21pU2QzeDV5MU1BUjN1SGJjL3JCS1MzdTBZ?= =?utf-8?B?QjNTY1p6V1lhaVczU2VwVTViWjRpKy9UNmZDODdzZUpFM3Uwa2V0VHc0N0Ra?= =?utf-8?B?TWRUc09nUE9WRDBsdVRWeDJ3OU94dGJiVGZ0anV4RDBScnpncGxBU2MwR2NR?= =?utf-8?Q?YAFF1XtxB0hbbst+s7h8/W+twCUFKDjgCuxfUvHDLXs=3D?= X-Microsoft-Exchange-Diagnostics: 1;DB3PR02MB236;6:aNVVG4D35hp6faTj0Y+qVEpEtkh+LxzPeKvFyx6n3kVzBIWFLwva9kagX5jWA5QEZd3i6nKf+Zz66gB7TQXl1e9F0nezIm2tS9j2p3VI5Ye7B2E8fnjXkZoqaLC4qSD+oBan9XuFBj7HuRBJMuTTaRb+SE8OFkjfzZeTZ7Wq7qjN5zWJinz08ViMh7CEUyXgVzzzcPVEqYXgo2AVYnQc8LGzvecz7vn8+TtJXNZQ/YmSAFx/OBK3lNLTJYvsZ2O2qceM7V8nvk2Zl/dEeLuYY7YL/Oe5Xj5nfFucPZv8k4VhtPrS4kRC126zqwLFTTEC992h9whlKLmwe1q0jepOVTLHXhPk3NZS82KEgCCUAzDDxio7vb9nSkAL/9gTA8+l4xE8VBFDN1/IlkiiwFGBysZKDFmWQwTOOdOhc7lE3gorh0/Zah8jhsaOhcruFmBi5FaUpxD8J0imavKogyVfoVYP2RPa5bROOSo5QzalZMr7I7G/9bicUODpIjnvuZJr4s9Vr2ODM7IaugBRAJWDaw==;5:3nS4lsqfcCYuaLm5G7YKNXCA8PQ7dI1CgzyAd9L4ibU2CQCUV8kY0ZU1nZUlWd5eZ8aQ2pQq7cyumdAxc4NPuq1YMNs5mUhvVSP2L7OEHUtyCTJREsuJN5R2y2eQ8iGz81hLG0MC526n4Gvpl5KCxA==;24:LLKyWLpQ++I1XqhaSzcEsC9UPD3ySiO9GY6KGDreDcLMKHXJgviSu33AI4zKFu18yENFTbE5mfkrImB3PSun02QxwnQNo0FQsiPd1Avv1Ck= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;DB3PR02MB236;7:s7Fh82icQtBjn+AHRnM94BCWe6cDWzPBU9zvzH87aA/5pVT2kiyH+G0/DVRh5Qm+ueBKmtwVJzYDbDnEbI/r9KHHLITW56zuzl9yoTOPgz+dYIptsrF29YHaHO6fUWo5U+xoFG25sB45FbghLBM+84fJVHalaGfJaAzIOOJfFMBVgk/55r2x+f96wJgFxO5KoQxgx4ICQOfScIWE495A0GCAAvmHDVNZVe7ue1ODnuiQpxlLPWIhnZPFz2CM5DV5JfIlq9UmDVkAQlE7haKtI6oApwt0//zqIoL42yWclVVfnWdP4WAAILF8lXLkAwfheke2PyuiIULxBFY5OUfr0w== X-OriginatorOrg: qt.io X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 May 2017 16:39:56.0602 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB3PR02MB236 X-IsSubscribed: yes X-SW-Source: 2017-q2/txt/msg00185.txt.bz2 On windows we cannot rename or unlink open files. (strip.c was missing) Signed-off-by: Ulf Hermann --- libasm/ChangeLog | 4 ++++ libasm/asm_end.c | 15 +++++++++++---- src/ChangeLog | 4 ++++ src/strip.c | 5 ++++- tests/ChangeLog | 9 +++++++++ tests/newfile.c | 7 +++++-- tests/newscn.c | 3 ++- tests/update1.c | 1 + tests/update2.c | 1 + tests/update3.c | 1 + tests/update4.c | 1 + 11 files changed, 43 insertions(+), 8 deletions(-) diff --git a/libasm/ChangeLog b/libasm/ChangeLog index 2b499c7..0e67657 100644 --- a/libasm/ChangeLog +++ b/libasm/ChangeLog @@ -1,5 +1,9 @@ 2017-05-04 Ulf Hermann + * asm_end.c: Rename the output file only after freeing resources. + +2017-05-04 Ulf Hermann + * asm_end.c: Don't fchmod the new file if fchmod is unavailable. 2017-02-28 Ulf Hermann diff --git a/libasm/asm_end.c b/libasm/asm_end.c index 7fabe94..7891fbb 100644 --- a/libasm/asm_end.c +++ b/libasm/asm_end.c @@ -521,16 +521,23 @@ asm_end (AsmCtx_t *ctx) } #endif + char *tmp_fname = strdup (ctx->tmp_fname); + char *fname = strdup (ctx->fname); + + /* Free the resources. */ + __libasm_finictx (ctx); + /* Rename output file. */ - if (rename (ctx->tmp_fname, ctx->fname) != 0) + result = rename (tmp_fname, fname); + free (tmp_fname); + free (fname); + + if (result != 0) { __libasm_seterrno (ASM_E_CANNOT_RENAME); return -1; } - /* Free the resources. */ - __libasm_finictx (ctx); - return 0; } diff --git a/src/ChangeLog b/src/ChangeLog index 0d1e57d..a474331 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,9 @@ 2017-05-04 Ulf Hermann + * strip.c: Close and reopen file when renaming. + +2017-05-04 Ulf Hermann + * addr2line.c: Don't assume unix file system conventions. * size.c: Likewise. * strip.c: Likewise. diff --git a/src/strip.c b/src/strip.c index 60f6700..99d7dd1 100644 --- a/src/strip.c +++ b/src/strip.c @@ -2006,7 +2006,10 @@ handle_elf (int fd, Elf *elf, const char *prefix, const char *fname, /* Create the real output file. First rename, then change the mode. */ - if (rename (tmp_debug_fname, debug_fname) != 0 + close (debug_fd); + int rename_result = rename (tmp_debug_fname, debug_fname); + debug_fd = open (debug_fname, O_RDONLY | O_BINARY); + if (rename_result != 0 || debug_fd == -1 #if HAVE_DECL_FCHMOD || fchmod (debug_fd, mode) != 0 #endif diff --git a/tests/ChangeLog b/tests/ChangeLog index 5e29f82..b8de138 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,5 +1,14 @@ 2017-05-04 Ulf Hermann + * newfile.c: Close the file when we're done and unlink it afterwards. + * newscn.c: Likewise. + * update1.c: Likewise. + * update2.c: Likewise. + * update3.c: Likewise. + * update4.c: Likewise. + +2017-05-04 Ulf Hermann + * asm-tst4.c: Don't assume unix file system conventions. * asm-tst5.c: Likewise. * asm-tst6.c: Likewise. diff --git a/tests/newfile.c b/tests/newfile.c index 5eabdcb..a279317 100644 --- a/tests/newfile.c +++ b/tests/newfile.c @@ -63,8 +63,6 @@ main (int argc, char *argv[] __attribute__ ((unused))) printf ("cannot create temporary file: %m\n"); exit (1); } - /* Remove the file when we exit. */ - unlink (fname); elf_version (EV_CURRENT); elf = elf_begin (fd, ELF_C_WRITE, NULL); @@ -166,5 +164,10 @@ main (int argc, char *argv[] __attribute__ ((unused))) (void) elf_end (elf); } + close (fd); + + /* Remove the file when we exit. */ + unlink (fname); + return result; } diff --git a/tests/newscn.c b/tests/newscn.c index 466f2f6..de8951d 100644 --- a/tests/newscn.c +++ b/tests/newscn.c @@ -46,7 +46,6 @@ main (void) fprintf (stderr, "Failed to open fdput file: %s\n", name); exit (1); } - unlink (name); elf = elf_begin (fd, ELF_C_WRITE, NULL); if (elf == NULL) @@ -62,5 +61,7 @@ main (void) elf_end (elf); close (fd); + unlink (name); + return 0; } diff --git a/tests/update1.c b/tests/update1.c index a571618..548c6d8 100644 --- a/tests/update1.c +++ b/tests/update1.c @@ -121,6 +121,7 @@ main (int argc, char *argv[] __attribute__ ((unused))) exit (1); } + close (fd); unlink (fname); return 0; diff --git a/tests/update2.c b/tests/update2.c index 3e22879..1dcff3f 100644 --- a/tests/update2.c +++ b/tests/update2.c @@ -144,6 +144,7 @@ main (int argc, char *argv[] __attribute__ ((unused))) exit (1); } + close (fd); unlink (fname); return 0; diff --git a/tests/update3.c b/tests/update3.c index d619bed..9d4f880 100644 --- a/tests/update3.c +++ b/tests/update3.c @@ -199,6 +199,7 @@ main (int argc, char *argv[] __attribute__ ((unused))) exit (1); } + close (fd); unlink (fname); return 0; diff --git a/tests/update4.c b/tests/update4.c index 8196b8c..a762e0a 100644 --- a/tests/update4.c +++ b/tests/update4.c @@ -351,6 +351,7 @@ main (int argc, char *argv[] __attribute__ ((unused))) exit (1); } + close (fd); unlink (fname); return 0; -- 2.1.4