From patchwork Sun Apr 7 10:50:18 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wang Shilong X-Patchwork-Id: 2402881 Return-Path: X-Original-To: patchwork-linux-btrfs@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork1.kernel.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by patchwork1.kernel.org (Postfix) with ESMTP id BBE2E3FC71 for ; Sun, 7 Apr 2013 10:51:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933342Ab3DGKvG (ORCPT ); Sun, 7 Apr 2013 06:51:06 -0400 Received: from mail-pa0-f47.google.com ([209.85.220.47]:57424 "EHLO mail-pa0-f47.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933325Ab3DGKu6 (ORCPT ); Sun, 7 Apr 2013 06:50:58 -0400 Received: by mail-pa0-f47.google.com with SMTP id bj3so2771736pad.20 for ; Sun, 07 Apr 2013 03:50:57 -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:in-reply-to :references; bh=Jk4RJWrVjjOhmUl264xbsnkj2UUtQLLHqESSHHNpFLM=; b=uHqQJwRQe1jc6ji98gW0zJJz0FmxtuoKoRN98IxUZXNA5pEo2PjJb5pL4s535SbmMw voTZnPDmZO8F7ZcmoHw4nUwO2C7igFmJECZ4bieU4Jhojg8n3pACNh8wU/xuqsWqv1SD Iki9Jzq1vGOKmmpth4b3vr94SgE2gf9kIbPg/ExjtK0HmbJoxPVwKZrC4UGN/4WA0zhZ tYtscdCSzaHlrG8d6saJl+OwVkQgXQFInc6ZwHfcX7YvLQsftiFuJNgoY5slAg/nsR8Q fC8LOHkcbF97qHK2mKJKwAyQaSdmO1Ooy74pF8qeO2sdXtsOJbNRsLF0+iGJawNxg3GN wQ4g== X-Received: by 10.66.250.230 with SMTP id zf6mr27694899pac.153.1365331857403; Sun, 07 Apr 2013 03:50:57 -0700 (PDT) Received: from localhost.localdomain.localdomain ([112.2.228.26]) by mx.google.com with ESMTPS id pa2sm27634891pac.9.2013.04.07.03.50.55 (version=TLSv1 cipher=RC4-SHA bits=128/128); Sun, 07 Apr 2013 03:50:56 -0700 (PDT) From: Wang Shilong To: linux-btrfs@vger.kernel.org Cc: wangsl-fnst@cn.fujitsu.com, miaox@cn.fujitsu.com, sensille@gmx.net Subject: [PATCH V3 3/5] Btrfs: fix missing check before creating a qgroup relation Date: Sun, 7 Apr 2013 18:50:18 +0800 Message-Id: <1365331820-973-4-git-send-email-wangshilong1991@gmail.com> X-Mailer: git-send-email 1.7.11.7 In-Reply-To: <1365331820-973-1-git-send-email-wangshilong1991@gmail.com> References: <1365331820-973-1-git-send-email-wangshilong1991@gmail.com> Sender: linux-btrfs-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org From: Wang Shilong Step to reproduce: mkfs.btrfs mount btrfs quota enable btrfs qgroup assign 0/1 1/1 umount btrfs-debug-tree | grep QGROUP If we want to add a qgroup relation, we should gurantee that 'src' and 'dst' exist, otherwise, such qgroup relation should not be allowed to create. Signed-off-by: Wang Shilong Reviewed-by: Miao Xie --- fs/btrfs/qgroup.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 466bcd6..575e7e4 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -956,6 +956,8 @@ int btrfs_add_qgroup_relation(struct btrfs_trans_handle *trans, struct btrfs_fs_info *fs_info, u64 src, u64 dst) { struct btrfs_root *quota_root; + struct btrfs_qgroup *parent; + struct btrfs_qgroup *member; int ret = 0; mutex_lock(&fs_info->qgroup_ioctl_lock); @@ -964,6 +966,12 @@ int btrfs_add_qgroup_relation(struct btrfs_trans_handle *trans, ret = -EINVAL; goto out; } + member = find_qgroup_rb(fs_info, src); + parent = find_qgroup_rb(fs_info, dst); + if (!member || !parent) { + ret = -EINVAL; + goto out; + } ret = add_qgroup_relation_item(trans, quota_root, src, dst); if (ret)