From patchwork Sun Nov 27 18:25:04 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Philippe Waroquiers X-Patchwork-Id: 61133 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 EF9153858439 for ; Sun, 27 Nov 2022 18:25:42 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org EF9153858439 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1669573543; bh=jty6OIstIwCUlv6Z9+LWlnpDbNHvxbyaBovgwnPsh18=; h=To:Cc:Subject:Date:List-Id:List-Unsubscribe:List-Archive: List-Post:List-Help:List-Subscribe:From:Reply-To:From; b=tSj2W4LRnmXH8v6JobX80+Zfoc5pZG46GzRvvBtp5CiPrSSCXCTFQt96KIoVQWR5s dPbUIOlvm/G8vvFd6gz7F5uqQUpiCufHY88Tp0I3l64yUNhhgocpaXJSpXrh3bmPbM CMmQuLU0HkG6id+n1GzNwHj8iwDKcQ8UjoICxVQo= X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from mailsec211.isp.belgacom.be (mailsec211.isp.belgacom.be [195.238.22.107]) by sourceware.org (Postfix) with ESMTPS id 5866F3858D3C for ; Sun, 27 Nov 2022 18:25:16 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 5866F3858D3C X-ExtLoop: 1 X-IPAS-Result: A2AwBABUqoNj/1uGgG1aHgEBCxIMSYE7C4MxgVinSotWgX4PAQEBAQEBAQEBCTETBAEBhQWFCiY2Bw4BAgQBAQEBAwIDAQEBAQEBAwEBBgEBAQEBAQYEAYEchS85DYI1IoN/KwsBRiiEJgGDIq8HMxoCZYRwmmaBZ4FAi1SFQjeBVUSECIYGhXEEmRQDCQMHBUlAAwsYDRYyChMyG1gOCR8cJQ0FBhIDIGwFBzoPKC9kKxwbB4EMKigVAwQEAwIGEwMiAg0pMRQEKRMNKydvCQIDImoDAwQoLAMJIR8HJyQ8B1Y6BQMCDyA4BgMJAwIiVHIvEhQFAwsVJQgFSwQIOQUGUhICChEDEg8sRQ5IPjkWBidCATAODhMDXUsdgQEEgiYKMS+adYIhgQ6BA4EVkzevYDQHg2yBSQYMiXWUbRoyhUmRUAOKb4cNAS2XCqMnhFGBaAGCDm2DOglJGY44GYMeixF0OwIHCwEBAwmKHwEB IronPort-PHdr: A9a23:91bC1BxUB/9A41fXCzLgylBlVkEcU1XcAAcZ59Idhq5Udez7ptK+Z B2Zva0lpWSKdLuYwsoMs/DRvaHkVD5Iyre6m1dGTqZxUQQYg94dhQ0qDZ3NI0T6KPn3c35yR 5waBxdq8H6hLEdaBtv1aUHMrX2u9z4SHQj0ORZoKujvFYPek8C62/qu95HPfg5FmCezbbRuI Rq5qgncqtMYipZ4JKYrzRvJrHpIe+BIym5tOFmegRXy6Nqu8ZB66yhftO4v+MBGUaXhYqQ3V qdYAyg8M2A0/8Lkqx/ORhaS63QGU2UWlh1IAxXZ7Bz/Q5z8vDf2uvZ71SKHO8D9ULI6Vim47 6pzSBHmljoJOTA6/m/QhcN+g7lWrA6iqhFl34LZep2ZOOZ4c6jAfd0aX21BXsNJWiJbAoO8b o8PD+sZPeZAsYb2ulsBogGkBQmrHePv1z5IiWHs3a0hzu8sFhnG3AwhH9IKsXTUtM31O7kIX eG71qbI1zLDb+pL2Tf89ofIaAshrOqXXbJzccvRz1cgFx/fglqLt4PoJjWY3fkOvWiD9+dsS P6jhmo9pw1svDSixd0ghpTHi48a0FzJ8Th1zYAoLtOiUkF7e8SrEJ5IuiGfMIt5X90tTnlzu CY/1r0GoZm7fDUWyJg/xx7QdfiHc4+Q7xLmSemdOzd4hHVgeL2hnxqy8E6gxfPgVsSszVpGs i5InsPRunwT1BHf8NWLR/Vy80u73TuDyhjf6uReLkA1karbJYQhwrk1lpcLqUTDHi72mEH3j K+ObkUr5PKk6ur9bbX8oZ+cLpJ0igDgPaQ0gcyyGv84MgsOXmid5+u8yKfv8lbnT7lSlP05j rHZsIzGJcQcvqO5DBJa3Z065xanFTimzMgXnXkZI1JeYx+HlI/pO0zUIP/kE/i+jU6jkC11y PzcOb3hGJrNJGDZkLj9ZbZ991JcyA0rwNBH55JUC7UBIPPrWk/pqtPUFBE4PBauw+bgEdV9y 4IeVnyVAq+CK67SqlyI5+IpI+aSeI8Zoi3yJOZ2r8Lp2HA1kxoFdLWi3ZYMQGu/A+5tLlqQe 3eqhc0OQkkQuQ9rdOzrjFyaSTMbWH+oWLsh5zwhE8ryFYfCQoG1mLHHwy6hGYRLZ21cEXiXE mbuepnCUfpaO3HaGdNojjFRDevpcIQmzxz77GfH IronPort-Data: A9a23:hX8yEqLe2Y9HQa55FE+RmpQlxSXFcZb7ZxGr2PjKsXjdYENS1mYAz TAfUWvVMvyDYmTyeNt2O4+x8RgPusXUy4A1S1cd+CA2RRqmiyZl6fd1j6vUF3nPRiEWZBs/t 63yUvGZcIZuCCa0Si6FatDJtWN72byDWo3yAevFPjEZbQJ/QU/Nszo68wICqtMu0IbR7z+l4 4uo+ZSGYgD9glaYD0pNg069gEI31BjNkG5A1rAOTagjlEPTkXATEKUeKcmZR5cvatAJdgISb 7+rIICRpgs1zT90Yj+WuuqTnnkxf1LnFVPmZky69ESVqkMqSiQais7XPReHAKtdo23hc9tZk L2huXEsIOskFvWkpQgTb/VXO35BZasbybXWGEKEoebI/1DDV3Dqz8w7WSnaPaVAkgp2KWRCs /wfLT1lghKr3rrnhuvhGq813ZhlfZCD0IA34xmMyRnBDfciQIjbTuPV7MVfxSoxi9pVNe3dd swUdXxlYXwsZjUUZwZJUs9vzY9EgFHfdW1Ao1WMoZEwyEbJ4RNf+bTfOfTsL4niqcJ92xzwS nj912v1CFQCPcCUyTee2mmrm/XEkDzyQo9UE6e3ntZygFyXx3QLBVsJXEG8uOS4h1Slc8lcO koZ5mwkoMAPGFeDF4GsGUTi8Djd5UJaCoM4//AG1TxhA5H8u26xblXohBYYADD6nKfajgDGG rNEcx0FyNCvXHCopaqhy4qp IronPort-HdrOrdr: A9a23:hwSlqKOSae+8osBcTsqjsMiBIKoaSvp037BZ7TEUdfU1SL36qy nAppomPHPP4wr5HUtNpTniAsm9qBHnlKKdiLN5VYtKHjOKhILCFu5fBP7Zsljd8kPFnNK1rZ 0QEZRDNA== X-IronPort-Anti-Spam-Filtered: true Received: from unknown (HELO md.home) ([109.128.134.91]) by relay.proximus.be with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 27 Nov 2022 19:25:14 +0100 To: gdb-patches@sourceware.org Cc: Philippe Waroquiers Subject: [RFA] fix leak in gdb_environ Date: Sun, 27 Nov 2022 19:25:04 +0100 Message-Id: <20221127182504.867308-1-philippe.waroquiers@skynet.be> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 X-Spam-Status: No, score=-12.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_PASS, TXREP 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: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Philippe Waroquiers via Gdb-patches From: Philippe Waroquiers Reply-To: Philippe Waroquiers Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" valgrind reports a leak when assigning a gdb_environ to another gdb_environ. The memory allocated for the target gdb_environ env variables is not released. The gdb_environ selftest reproduces the leak (see below). Fix the leak by clearing the target gbd_environ before std::move-ing the members. Tested natively and re-running all tests under valgrind. ==3261873== 4,842 bytes in 69 blocks are definitely lost in loss record 6,772 of 6,839 ==3261873== at 0x483979B: malloc (vg_replace_malloc.c:393) ==3261873== by 0x25A454: xmalloc (alloc.c:57) ==3261873== by 0x7D1E4E: xstrdup (xstrdup.c:34) ==3261873== by 0x7E2A51: gdb_environ::from_host_environ() (environ.cc:56) ==3261873== by 0x66F1C8: test_reinit_from_host_environ (environ-selftests.c:78) ==3261873== by 0x66F1C8: selftests::gdb_environ_tests::run_tests() (environ-selftests.c:285) ==3261873== by 0x7EFC43: operator() (std_function.h:622) = --- gdbsupport/environ.cc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gdbsupport/environ.cc b/gdbsupport/environ.cc index f5f6b38e19c..2d8e3ea6e92 100644 --- a/gdbsupport/environ.cc +++ b/gdbsupport/environ.cc @@ -29,6 +29,8 @@ gdb_environ::operator= (gdb_environ &&e) if (&e == this) return *this; + this->clear (); + m_environ_vector = std::move (e.m_environ_vector); m_user_set_env = std::move (e.m_user_set_env); m_user_unset_env = std::move (e.m_user_unset_env);