From patchwork Tue Dec 3 12:11:34 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zheng Liu X-Patchwork-Id: 296161 Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id A98962C00A1 for ; Tue, 3 Dec 2013 23:09:26 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753420Ab3LCMJZ (ORCPT ); Tue, 3 Dec 2013 07:09:25 -0500 Received: from mail-pd0-f170.google.com ([209.85.192.170]:60267 "EHLO mail-pd0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753329Ab3LCMJX (ORCPT ); Tue, 3 Dec 2013 07:09:23 -0500 Received: by mail-pd0-f170.google.com with SMTP id g10so20088906pdj.1 for ; Tue, 03 Dec 2013 04:09:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=LGl2RGTENnvwS2EIvkDTtgoGquXBGxHyZ/FnfHmx55I=; b=AuaIkdvHwvLbRmOBryNAJrH2cWyrSQBz64Y1xqMpWlhQZn1iDUmsTBTk306C+gqPaP 2kiKEoUm38YYQ8qMNHLXJUiUAOMuTOkEeSzGSFjC7WqBPrxvVqV7bfh/T5W+LBYk8pC5 ywWoJVKeo1iaI3hGTOUY8FgL0KobnpJf0Nv3I/zJ7MNVpe+ZX6P/E+bEELOZlDhWyOZZ nJOU00nOH9+K61yAz6lbZrq+R/QZ8kPxLbglIOeIk0HotE6Q/emUK+joerfKTjJQvOKn sPzL/fPmbrG4CxKzAf66FG42bb7wssgICNyBtQwnlXCdsj7yO9oNq1XQtko/wlD3ztMS 9Avg== X-Received: by 10.68.232.196 with SMTP id tq4mr10240286pbc.166.1386072563033; Tue, 03 Dec 2013 04:09:23 -0800 (PST) Received: from alpha.taobao.ali.com ([182.92.247.2]) by mx.google.com with ESMTPSA id xv2sm129628866pbb.39.2013.12.03.04.09.21 for (version=TLSv1 cipher=RC4-SHA bits=128/128); Tue, 03 Dec 2013 04:09:22 -0800 (PST) From: Zheng Liu To: linux-ext4@vger.kernel.org Cc: Theodore Ts'o , "Darrick J. Wong" Subject: [PATCH v2 07/28] libext2fs: free key/value pairs before reading Date: Tue, 3 Dec 2013 20:11:34 +0800 Message-Id: <1386072715-9869-8-git-send-email-wenqing.lz@taobao.com> X-Mailer: git-send-email 1.7.9.7 In-Reply-To: <1386072715-9869-1-git-send-email-wenqing.lz@taobao.com> References: <1386072715-9869-1-git-send-email-wenqing.lz@taobao.com> Sender: linux-ext4-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ext4@vger.kernel.org From: "Darrick J. Wong" Before loading extended attributes, free any key/value pairs that might already be associated with the file. Signed-off-by: Darrick J. Wong --- lib/ext2fs/ext_attr.c | 26 +++++++++++++++++--------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/lib/ext2fs/ext_attr.c b/lib/ext2fs/ext_attr.c index 934ad6f..0e9a9ab 100644 --- a/lib/ext2fs/ext_attr.c +++ b/lib/ext2fs/ext_attr.c @@ -654,6 +654,20 @@ static errcode_t read_xattrs_from_buffer(struct ext2_xattr_handle *handle, return 0; } +static void xattrs_free_keys(struct ext2_xattr_handle *h) +{ + struct ext2_xattr *a = h->attrs; + size_t i; + + for (i = 0; i < h->length; i++) { + if (a[i].name) + ext2fs_free_mem(&a[i].name); + if (a[i].value) + ext2fs_free_mem(&a[i].value); + } + h->count = 0; +} + errcode_t ext2fs_xattrs_read(struct ext2_xattr_handle *handle) { struct ext2_xattr *attrs = NULL, *x; @@ -679,6 +693,8 @@ errcode_t ext2fs_xattrs_read(struct ext2_xattr_handle *handle) if (err) goto out; + xattrs_free_keys(handle); + /* Does the inode have size for EA? */ if (EXT2_INODE_SIZE(handle->fs->super) <= EXT2_GOOD_OLD_INODE_SIZE + inode->i_extra_isize + @@ -919,9 +935,7 @@ errcode_t ext2fs_xattrs_open(ext2_filsys fs, ext2_ino_t ino, errcode_t ext2fs_xattrs_close(struct ext2_xattr_handle **handle) { - unsigned int i; struct ext2_xattr_handle *h = *handle; - struct ext2_xattr *a = h->attrs; errcode_t err; if (h->dirty) { @@ -930,13 +944,7 @@ errcode_t ext2fs_xattrs_close(struct ext2_xattr_handle **handle) return err; } - for (i = 0; i < h->length; i++) { - if (a[i].name) - ext2fs_free_mem(&a[i].name); - if (a[i].value) - ext2fs_free_mem(&a[i].value); - } - + xattrs_free_keys(h); ext2fs_free_mem(&h->attrs); ext2fs_free_mem(handle); return 0;