From patchwork Thu Aug 18 17:32:08 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jarod Wilson X-Patchwork-Id: 9288787 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 60687608A1 for ; Fri, 19 Aug 2016 01:02:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5225C2927A for ; Fri, 19 Aug 2016 01:02:27 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 472B72929C; Fri, 19 Aug 2016 01:02:27 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CD9DC29281 for ; Fri, 19 Aug 2016 01:02:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754345AbcHSBCM (ORCPT ); Thu, 18 Aug 2016 21:02:12 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59460 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754374AbcHSBCJ (ORCPT ); Thu, 18 Aug 2016 21:02:09 -0400 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 9EC1E8122E; Thu, 18 Aug 2016 17:32:37 +0000 (UTC) Received: from hp-dl360pgen8-07.khw.lab.eng.bos.redhat.com (hp-dl360pgen8-07.khw.lab.eng.bos.redhat.com [10.16.184.47]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u7IHWUAF018884; Thu, 18 Aug 2016 13:32:37 -0400 From: Jarod Wilson To: linux-rdma@vger.kernel.org Cc: Jarod Wilson , Gil Rockah Subject: [PATCH perftest 13/23] perftest_communication: don't leak addrinfo Date: Thu, 18 Aug 2016 13:32:08 -0400 Message-Id: <1471541538-20270-14-git-send-email-jarod@redhat.com> In-Reply-To: <1471541538-20270-1-git-send-email-jarod@redhat.com> References: <1471541538-20270-1-git-send-email-jarod@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.26 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.25]); Thu, 18 Aug 2016 17:32:37 +0000 (UTC) Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Error: RESOURCE_LEAK (CWE-772): [#def7] perftest-3.0/src/perftest_communication.c:873: alloc_arg: "check_add_port" allocates memory that is stored into "res". perftest-3.0/src/perftest_resources.c:554:2: alloc_arg: "getaddrinfo" allocates memory that is stored into "*res". perftest-3.0/src/perftest_communication.c:879: leaked_storage: Variable "res" going out of scope leaks the storage it points to. # 877| # 878| if (res->ai_family != PF_INET) { # 879|-> return FAILURE; # 880| } # 881| Error: RESOURCE_LEAK (CWE-772): [#def8] perftest-3.0/src/perftest_communication.c:873: alloc_arg: "check_add_port" allocates memory that is stored into "res". perftest-3.0/src/perftest_resources.c:554:2: alloc_arg: "getaddrinfo" allocates memory that is stored into "*res". perftest-3.0/src/perftest_communication.c:889: leaked_storage: Variable "res" going out of scope leaks the storage it points to. # 887| if (num_of_retry == 0) { # 888| fprintf(stderr, "Received %d times ADDR_ERROR\n",NUM_OF_RETRIES); # 889|-> return FAILURE; # 890| } # 891| (and more!) This var is only accessed by the above referenced conditional, and to copy sin, just add two freeaddrinfo(res) calls and we should plug several possible leaks on error paths. CC: Gil Rockah Signed-off-by: Jarod Wilson --- src/perftest_communication.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/perftest_communication.c b/src/perftest_communication.c index d46d21e..bec973a 100755 --- a/src/perftest_communication.c +++ b/src/perftest_communication.c @@ -876,11 +876,13 @@ int rdma_client_connect(struct pingpong_context *ctx,struct perftest_parameters } if (res->ai_family != PF_INET) { + freeaddrinfo(res); return FAILURE; } memcpy(&sin, res->ai_addr, sizeof(sin)); sin.sin_port = htons((unsigned short)user_param->port); + freeaddrinfo(res); while (1) { @@ -1074,10 +1076,12 @@ int rdma_server_connect(struct pingpong_context *ctx, } if (res->ai_family != PF_INET) { + freeaddrinfo(res); return FAILURE; } memcpy(&sin, res->ai_addr, sizeof(sin)); sin.sin_port = htons((unsigned short)user_param->port); + freeaddrinfo(res); if (rdma_bind_addr(ctx->cm_id_control,(struct sockaddr *)&sin)) { fprintf(stderr," rdma_bind_addr failed\n"); @@ -1160,7 +1164,6 @@ int rdma_server_connect(struct pingpong_context *ctx, rdma_ack_cm_event(event); rdma_destroy_id(ctx->cm_id_control); - freeaddrinfo(res); return 0; }