From patchwork Tue Nov 12 11:32:35 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Damijan Skvarc X-Patchwork-Id: 1193469 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=openvswitch.org (client-ip=140.211.169.12; helo=mail.linuxfoundation.org; envelope-from=ovs-dev-bounces@openvswitch.org; receiver=) Authentication-Results: ozlabs.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="IOHTaNTX"; dkim-atps=neutral Received: from mail.linuxfoundation.org (mail.linuxfoundation.org [140.211.169.12]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 47C5Fq1tdnz9sP3 for ; Tue, 12 Nov 2019 22:32:47 +1100 (AEDT) Received: from mail.linux-foundation.org (localhost [127.0.0.1]) by mail.linuxfoundation.org (Postfix) with ESMTP id 67D54C52; Tue, 12 Nov 2019 11:32:44 +0000 (UTC) X-Original-To: dev@openvswitch.org Delivered-To: ovs-dev@mail.linuxfoundation.org Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id B6D008FF for ; Tue, 12 Nov 2019 11:32:42 +0000 (UTC) X-Greylist: whitelisted by SQLgrey-1.7.6 Received: from mail-wm1-f65.google.com (mail-wm1-f65.google.com [209.85.128.65]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 5C94D12F for ; Tue, 12 Nov 2019 11:32:40 +0000 (UTC) Received: by mail-wm1-f65.google.com with SMTP id l17so2763973wmh.0 for ; Tue, 12 Nov 2019 03:32:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=8gK8EYemeGowyDpb4Mr4jAT7Iauh5jHWMX/uu2nNrYI=; b=IOHTaNTXZJ4jWW17cEo8c4B3YxuKkd9WVXYkOwf9R3dZzbw+mul1xf1KagRXvzWxyS uSJMpR6Ov2AEUMz8Wo6RMs9yZsAuaTh48rdKLYc5m/f6GAxteCFuFIgHfwAeWfCUMTdO o80m24fqtxZmH9EiiOsMRspfZZiQ4XmAp9r/b4gJorUGnvlBW86k7a09NyXLTHqXDTz1 mndRhUJ//BQrxN38PBa4oiQ76nRY7LCTBQZNvV7xlQS3CvAOw+yUu0/dC5VnMwsHsaXT 9OTeajgVSZeMqonj8renyvEfewNyI2voSf/oviOVQVrlq2XuOAN7D+aUoB4v6tbeNRSq x8kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=8gK8EYemeGowyDpb4Mr4jAT7Iauh5jHWMX/uu2nNrYI=; b=KaaJa57zOGVeNfUs/NkUNJV0d0HUIILfby723+7bIClB3GU5p00ofY3JYYES2xEUH5 72zkFpEXqMEke7CMXKmp+UwM0rauyGU/QlbfZVNeYr816JbJV2Wh5YtKK47kfL/0chAt uekrCqH/ciYmNRtt668AVOrX/Aoe5EWeiEXn2BG5Pb2yA2xpA8a0MPs+fbbVo1mu9ovO z+cxusz8aGw+HwE2ciIHv/SRUBhpUan5/oFdix6sDjfNGA+vycfc4kXXpWin1CM/AKcN Z84SiHyfDgQddFaqYybxa+oSkpLf+5pA8IXIo3YOjlSaNaaVHrEiz8qNg08ZJ2qXpvHG J63A== X-Gm-Message-State: APjAAAUAM3GSy339B08uSiw3f9uu2WEAspceusyJUkvmeO9o5xBDSXQ5 sWbaY/7O+hdyk/w119vBEijwG7mL X-Google-Smtp-Source: APXvYqxI23TqIhpJjzzXSz9D5ZMcJIVnHw1Mj3hg6EcGXSjHpy+XPBJiXM829BuSHuJYx0eEyHAtEA== X-Received: by 2002:a1c:a556:: with SMTP id o83mr3332619wme.165.1573558358426; Tue, 12 Nov 2019 03:32:38 -0800 (PST) Received: from damijan-PC.i-tech.local (mail.i-tech.si. [89.212.78.105]) by smtp.gmail.com with ESMTPSA id b15sm11290080wrx.77.2019.11.12.03.32.37 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 12 Nov 2019 03:32:37 -0800 (PST) From: Damijan Skvarc To: dev@openvswitch.org Date: Tue, 12 Nov 2019 12:32:35 +0100 Message-Id: <1573558355-19248-1-git-send-email-damjan.skvarc@gmail.com> X-Mailer: git-send-email 2.7.4 X-Spam-Status: No, score=-2.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org Subject: [ovs-dev] [PATCH 1/1] ovsdb-server: fix memory leak while deleting zone X-BeenThere: ovs-dev@openvswitch.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: ovs-dev-bounces@openvswitch.org Errors-To: ovs-dev-bounces@openvswitch.org memory leak was detected by valgrind during execution of "database commands -- positive checks" test. leaked memory was allocated in ovsdb_execute_mutate() function while parsing mutations from the apparent json entity: ==19563== at 0x4C2DB8F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) ==19563== by 0x4652D0: xmalloc (util.c:138) ==19563== by 0x46539E: xmemdup0 (util.c:168) ==19563== by 0x4653F7: xstrdup (util.c:177) ==19563== by 0x450379: ovsdb_base_type_clone (ovsdb-types.c:208) ==19563== by 0x450F8D: ovsdb_type_clone (ovsdb-types.c:550) ==19563== by 0x428C3F: ovsdb_mutation_from_json (mutation.c:108) ==19563== by 0x428F6B: ovsdb_mutation_set_from_json (mutation.c:187) ==19563== by 0x42578D: ovsdb_execute_mutate (execution.c:573) ==19563== by 0x4246B0: ovsdb_execute_compose (execution.c:171) ==19563== by 0x41CDE5: ovsdb_trigger_try (trigger.c:204) ==19563== by 0x41C8DF: ovsdb_trigger_init (trigger.c:61) ==19563== by 0x40E93C: ovsdb_jsonrpc_trigger_create (jsonrpc-server.c:1135) ==19563== by 0x40E20C: ovsdb_jsonrpc_session_got_request (jsonrpc-server.c:1002) ==19563== by 0x40D1C2: ovsdb_jsonrpc_session_run (jsonrpc-server.c:561) ==19563== by 0x40D31E: ovsdb_jsonrpc_session_run_all (jsonrpc-server.c:591) ==19563== by 0x40CD6E: ovsdb_jsonrpc_server_run (jsonrpc-server.c:406) ==19563== by 0x40627E: main_loop (ovsdb-server.c:209) ==19563== by 0x406E66: main (ovsdb-server.c:460) This memory is usually freed at the end of ovsdb_execute_mutate() however in the aforementioned test case this does not happen. Namely in case of delete mutator and in case of error while calling ovsdb_datum_from_json() apparent mutation was marked as invalid, what prevents freeing problematic memory. Memory leak can be reproduced quickly with the following command sequence: ovs-vsctl --no-wait -vreconnect:emer add-zone-tp netdev zone=1 icmp_first=1 icmp_reply=2 ovs-vsctl --no-wait -vreconnect:emer del-zone-tp netdev zone=1 Signed-off-by: Damijan Skvarc --- ovsdb/mutation.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ovsdb/mutation.c b/ovsdb/mutation.c index cd20bdb..56edc5f 100644 --- a/ovsdb/mutation.c +++ b/ovsdb/mutation.c @@ -147,6 +147,8 @@ ovsdb_mutation_from_json(const struct ovsdb_table_schema *ts, if (error && ovsdb_type_is_map(&m->type) && m->mutator == OVSDB_M_DELETE) { ovsdb_error_destroy(error); + ovsdb_base_type_destroy(&m->type.value); + m->type.value.enum_ = NULL; m->type.value.type = OVSDB_TYPE_VOID; error = ovsdb_datum_from_json(&m->arg, &m->type, array->elems[2], symtab);