From patchwork Mon Mar 25 11:08:23 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wang Shilong X-Patchwork-Id: 2330481 Return-Path: X-Original-To: patchwork-linux-btrfs@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork2.kernel.org (Postfix) with ESMTP id C9FC7DF24C for ; Mon, 25 Mar 2013 11:08:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756366Ab3CYLIa (ORCPT ); Mon, 25 Mar 2013 07:08:30 -0400 Received: from mail-pa0-f47.google.com ([209.85.220.47]:48401 "EHLO mail-pa0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756351Ab3CYLI3 (ORCPT ); Mon, 25 Mar 2013 07:08:29 -0400 Received: by mail-pa0-f47.google.com with SMTP id bj3so515175pad.20 for ; Mon, 25 Mar 2013 04:08:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=x-received:from:to:cc:subject:date:message-id:x-mailer; bh=a41geHAjG/11qKjyTFBQVX0J0d1/HSHcHWQneFh4dS4=; b=hVD+v+l3llcAAtT+HivmjGeqgy5f+PqWgQ7C4iA1aW2RnMa7vHcYz6LXgwXWfCF41u Wdxbe4JxmLk3GXAF+REe90aSx0Cn0FwHdbF9lpGEfHNNh/q82ya8GbrlerUPXHsoH7W9 JnwIRUVjv+weBt7tC6q78ry9tMBvsue5GSe7+QqKBMcz904VDcnp6nonpBh4G81Q+1ao Q6P6vDBm2aPCKkuHdy7nDWq2uQhGElnpH8OkviLYkZxHRK2zmUTi2fuFpkJAu1TZfk/1 vq77NUrACjPhgel7EKj/qKYdnDQEzP6mOXQ/qTrUCfhbX31/PlIhI4C9kPsE8LEviDW0 9uWw== X-Received: by 10.66.138.101 with SMTP id qp5mr17250491pab.127.1364209708800; Mon, 25 Mar 2013 04:08:28 -0700 (PDT) Received: from localhost.localdomain.localdomain ([112.3.240.11]) by mx.google.com with ESMTPS id bs1sm2284381pbc.8.2013.03.25.04.08.26 (version=TLSv1 cipher=RC4-SHA bits=128/128); Mon, 25 Mar 2013 04:08:28 -0700 (PDT) From: Wang Shilong To: linux-btrfs@vger.kernel.org Cc: wangshilong1991@gmail.com, sensille@gmx.net Subject: [PATCH 1/2] Btrfs: fix double free in the btrfs_qgroup_account_ref() Date: Mon, 25 Mar 2013 19:08:23 +0800 Message-Id: <1364209703-1590-1-git-send-email-wangshilong1991@gmail.com> X-Mailer: git-send-email 1.7.11.7 Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org From: Wang Shilong The function btrfs_find_all_roots is responsible to allocate memory for 'roots' and free it if errors happen,so the caller should not free it again since the work has been done. Besides,'tmp' is allocated after the function btrfs_find_all_roots, so we can return directly if btrfs_find_all_roots() fails. Signed-off-by: Wang Shilong Reviewed-by: Miao Xie Reviewed-by: Jan Schmidt --- fs/btrfs/qgroup.c | 3 +-- 1 files changed, 1 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 1aff3a8..e3598fa 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -1208,7 +1208,7 @@ int btrfs_qgroup_account_ref(struct btrfs_trans_handle *trans, ret = btrfs_find_all_roots(trans, fs_info, node->bytenr, sgn > 0 ? node->seq - 1 : node->seq, &roots); if (ret < 0) - goto out; + return ret; spin_lock(&fs_info->qgroup_lock); quota_root = fs_info->quota_root; @@ -1330,7 +1330,6 @@ int btrfs_qgroup_account_ref(struct btrfs_trans_handle *trans, ret = 0; unlock: spin_unlock(&fs_info->qgroup_lock); -out: ulist_free(roots); ulist_free(tmp);