From nobody Sat Nov 15 20:49:00 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1747148709; cv=none; d=zohomail.com; s=zohoarc; b=UOlrVcns7rmQk517gjuy2yRTJm8r2PE+DJQ3h2FbTbAmJOHNOhyaRIP8l3JulQsQaS2Ia0Ga6OOuJuKVcqpfCqVMFKBHC4oeKAFXeiEXKx8ALa7esI7EQSZw6HN5Eku/NxCDF+79u/VKoAEKlethAVK8EWAHGUK2ExIJWlHqtQw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1747148709; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jIgGRdk4wDHR13EIann1hKkSdob6KVG0A8frMh8d7tU=; b=PMfPxWYMcynv4/HSG24NCerg8CxV4P6ggGQXcPztyQo/rBO13uRoF6PoFULe5Km2yywmoED8TVpSXY6/x1jTUuEcqZD6braO5rFIu4X+b7W8Fhg4OfuAfTlGPDrat0tMF73ZmCpvYhIhzsuFJWPoT6yYufwDUitTXDdEbWaI5VE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1747148709376546.4207253603006; Tue, 13 May 2025 08:05:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uErAr-0006qN-Jk; Tue, 13 May 2025 11:04:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uErAo-0006pc-Uy for qemu-devel@nongnu.org; Tue, 13 May 2025 11:04:03 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uErAm-00035L-CJ for qemu-devel@nongnu.org; Tue, 13 May 2025 11:04:02 -0400 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-575-lKbiCQq7M0W36j--oADmRA-1; Tue, 13 May 2025 11:03:55 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 78CE91800374; Tue, 13 May 2025 15:03:54 +0000 (UTC) Received: from toolbx.redhat.com (unknown [10.42.28.110]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id E139618003FC; Tue, 13 May 2025 15:03:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1747148638; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=jIgGRdk4wDHR13EIann1hKkSdob6KVG0A8frMh8d7tU=; b=SMKpK/WFo4EAGObBWUy0dy1Ay0F/7i6cH/JohRXF9hJXdelE2gzksrFS/q0BxFlrVZCe9U uUK95O5hqwIIUpMFQmVZSeEghS6dYQ3zsLzbDkZjn0bImgaGlKAdxWueQpJVJ5DPXrNyv1 V01pn4GChpdb/+RvS+lM6fp2DdOcDv8= X-MC-Unique: lKbiCQq7M0W36j--oADmRA-1 X-Mimecast-MFC-AGG-ID: lKbiCQq7M0W36j--oADmRA_1747148634 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: qemu-devel@nongnu.org Cc: Laurent Vivier , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH v2] linux-user: fix resource leaks in gen-vdso Date: Tue, 13 May 2025 16:03:46 +0100 Message-ID: <20250513150346.1328217-1-berrange@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=berrange@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -35 X-Spam_score: -3.6 X-Spam_bar: --- X-Spam_report: (-3.6 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.549, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1747148710473019000 There are a number of resource leaks in gen-vdso. In theory they are harmless because this is a short lived process, but when building QEMU with --extra-cflags=3D"-fsanitize=3Daddress" problems ensure. The gen-vdso program is run as part of the build, and that aborts due to the sanitizer identifying memory leaks, leaving QEMU unbuildable. FAILED: libqemu-x86_64-linux-user.a.p/vdso.c.inc /var/home/berrange/src/virt/qemu/build/linux-user/gen-vdso -o libqemu-x86_6= 4-linux-user.a.p/vdso.c.inc ../linux-user/x86_64/vdso.so =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D1696332=3D=3DERROR: LeakSanitizer: detected memory leaks Direct leak of 2968 byte(s) in 1 object(s) allocated from: #0 0x56495873f1f3 (/var/home/berrange/src/virt/qemu/build/linux-user/g= en-vdso+0xa11f3) (BuildId: b69e241ad44719b6f3934f3c71dfc6727e8bdb12) #1 0x564958780b90 (/var/home/berrange/src/virt/qemu/build/linux-user/g= en-vdso+0xe2b90) (BuildId: b69e241ad44719b6f3934f3c71dfc6727e8bdb12) This complaint is about the 'buf' variable, however, the FILE objects are also leaked in some error scenarios, so this fix refactors the cleanup paths to fix all leaks. For completeness it also reports an error if fclose() fails on 'inf'. Signed-off-by: Daniel P. Berrang=C3=A9 Tested-by: Arusekk --- Changed in v2: - Add missing braces linux-user/gen-vdso.c | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/linux-user/gen-vdso.c b/linux-user/gen-vdso.c index 721f38d5a3..fce9d5cbc3 100644 --- a/linux-user/gen-vdso.c +++ b/linux-user/gen-vdso.c @@ -56,13 +56,14 @@ static unsigned rt_sigreturn_addr; =20 int main(int argc, char **argv) { - FILE *inf, *outf; + FILE *inf =3D NULL, *outf =3D NULL; long total_len; const char *prefix =3D "vdso"; const char *inf_name; const char *outf_name =3D NULL; - unsigned char *buf; + unsigned char *buf =3D NULL; bool need_bswap; + int ret =3D EXIT_FAILURE; =20 while (1) { int opt =3D getopt(argc, argv, "o:p:r:s:"); @@ -129,7 +130,6 @@ int main(int argc, char **argv) fprintf(stderr, "%s: incomplete read\n", inf_name); return EXIT_FAILURE; } - fclose(inf); =20 /* * Identify which elf flavor we're processing. @@ -205,19 +205,24 @@ int main(int argc, char **argv) fprintf(outf, " .rt_sigreturn_ofs =3D 0x%x,\n", rt_sigreturn_addr); fprintf(outf, "};\n"); =20 - /* - * Everything should have gone well. - */ - if (fclose(outf)) { - goto perror_outf; + ret =3D EXIT_SUCCESS; + + cleanup: + free(buf); + + if (outf && fclose(outf) !=3D 0) { + ret =3D EXIT_FAILURE; + } + if (inf && fclose(inf) !=3D 0) { + ret =3D EXIT_FAILURE; } - return EXIT_SUCCESS; + return ret; =20 perror_inf: perror(inf_name); - return EXIT_FAILURE; + goto cleanup; =20 perror_outf: perror(outf_name); - return EXIT_FAILURE; + goto cleanup; } --=20 2.49.0