Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp995938yba; Thu, 4 Apr 2019 02:02:15 -0700 (PDT) X-Google-Smtp-Source: APXvYqwadjrFbkbaZAUttBMctqtEmxoAfmK6KcU1x2u9o/w29jENylnISXzfJg38KqZcn9pkkcK9 X-Received: by 2002:a17:902:e382:: with SMTP id ch2mr5050750plb.94.1554368534854; Thu, 04 Apr 2019 02:02:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1554368534; cv=none; d=google.com; s=arc-20160816; b=lSX3bQttC9sHHe0oATnvnSibUuhDzn2bMl2cvyynUGkmIw/jCWWT9yP0SPvH2BxH7D oYSWXuLMRUUocXUmnHoqEUtIbrHCu/EcLb7HPjxcsecwlQhbiB7eo2ynjTZt7gAopcDq oVwKmKdonMwPj6hBI9oPXGaPWvZo4lR4P2AInMIHrZjkMtPhOtUj++9mU73nz3KnV83Q FRAvpCDh9FEMUrVZAJ2hl990QMOmZvDT84KlJCoFCdGxOIMT7YxCfIM4nAjm9hO09WD1 EQR+UkAGIpDx6TpnfxYWa+KO2JFLmJ/yEkbVqhOUoCbHMECLhl1blW+r7yrBZGl5Mlmx Hidw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=F7wZWpWo3uQHt6AWG+ZZ6+4xap61ybEhvM98tpuZq8Q=; b=QpcmLlBjmPe94KzTJ3nOoHGkRZa8MfUZ2elVFs0YvxDHLoumXicaoDJNA6T4QuCXOq CB/sa21JhJXqEvbipqTtO3BkC91d4srYU/23xWV5a2XnEvRmhusiGk9zCs74qv1EhamZ +9iwmdGvLnU9nsEAfAzHN1P6osYikXfsnhxVa2zzj5YHkzXaPP5E0CtE7ZgE3hj98JU0 JqweDgUimy2drLqiKjYGCREe4XpX/+WECIRJ/sU69+E4rjDC+EkWPSiTr/xXSZUCTIqM AWVgQWPU2nb7+xxqKk4xJKt++wvz4PL9RZf0fnP7F4XEI4L9K4Js+WQPAHLOuZedK9vY QE9w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Hb6BPTTN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q138si16855142pfc.34.2019.04.04.02.01.59; Thu, 04 Apr 2019 02:02:14 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Hb6BPTTN; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730895AbfDDJBW (ORCPT + 99 others); Thu, 4 Apr 2019 05:01:22 -0400 Received: from mail.kernel.org ([198.145.29.99]:38418 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731401AbfDDJBT (ORCPT ); Thu, 4 Apr 2019 05:01:19 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 2EC52218D4; Thu, 4 Apr 2019 09:01:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1554368477; bh=L4m+bvz06mBIlOXEZGS5rutM5Ii89qDIDhLZqA5Ydwg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Hb6BPTTNg677cbq31UOE/ckQuKTKp3a4yp494963nCMVfGrsm6g8+TZe7xGe/h/TT tRn9XPsjB7A7Mb9KFu+O99IeN4R+uCvTUzPmN8n9b5WN8Aanpnpul0SXL8xFsgq61N gfOkvo1jIriGviW/rgSWX2RwTYzv/LosdTzadYWM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Chao Yu , Jaegeuk Kim , Sasha Levin Subject: [PATCH 4.19 038/187] f2fs: fix to check inline_xattr_size boundary correctly Date: Thu, 4 Apr 2019 10:46:15 +0200 Message-Id: <20190404084604.872129191@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190404084603.119654039@linuxfoundation.org> References: <20190404084603.119654039@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review X-Patchwork-Hint: ignore MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.19-stable review patch. If anyone has any objections, please let me know. ------------------ [ Upstream commit 500e0b28ecd3c5aade98f3c3a339d18dcb166bb6 ] We use below condition to check inline_xattr_size boundary: if (!F2FS_OPTION(sbi).inline_xattr_size || F2FS_OPTION(sbi).inline_xattr_size >= DEF_ADDRS_PER_INODE - F2FS_TOTAL_EXTRA_ATTR_SIZE - DEF_INLINE_RESERVED_SIZE - DEF_MIN_INLINE_SIZE) There is there problems in that check: - we should allow inline_xattr_size equaling to min size of inline {data,dentry} area. - F2FS_TOTAL_EXTRA_ATTR_SIZE and inline_xattr_size are based on different size unit, previous one is 4 bytes, latter one is 1 bytes. - DEF_MIN_INLINE_SIZE only indicate min size of inline data area, however, we need to consider min size of inline dentry area as well, minimal inline dentry should at least contain two entries: '.' and '..', so that min inline_dentry size is 40 bytes. .bitmap 1 * 1 = 1 .reserved 1 * 1 = 1 .dentry 11 * 2 = 22 .filename 8 * 2 = 16 total 40 Signed-off-by: Chao Yu Signed-off-by: Jaegeuk Kim Signed-off-by: Sasha Levin --- fs/f2fs/f2fs.h | 1 - fs/f2fs/super.c | 13 +++++++------ include/linux/f2fs_fs.h | 13 +++++++------ 3 files changed, 14 insertions(+), 13 deletions(-) diff --git a/fs/f2fs/f2fs.h b/fs/f2fs/f2fs.h index 42aef5c94927..a3ba20e5946f 100644 --- a/fs/f2fs/f2fs.h +++ b/fs/f2fs/f2fs.h @@ -450,7 +450,6 @@ struct f2fs_flush_device { /* for inline stuff */ #define DEF_INLINE_RESERVED_SIZE 1 -#define DEF_MIN_INLINE_SIZE 1 static inline int get_extra_isize(struct inode *inode); static inline int get_inline_xattr_addrs(struct inode *inode); #define MAX_INLINE_DATA(inode) (sizeof(__le32) * \ diff --git a/fs/f2fs/super.c b/fs/f2fs/super.c index c9639ef0e8d5..79370b7fa9d2 100644 --- a/fs/f2fs/super.c +++ b/fs/f2fs/super.c @@ -822,12 +822,13 @@ static int parse_options(struct super_block *sb, char *options) "set with inline_xattr option"); return -EINVAL; } - if (!F2FS_OPTION(sbi).inline_xattr_size || - F2FS_OPTION(sbi).inline_xattr_size >= - DEF_ADDRS_PER_INODE - - F2FS_TOTAL_EXTRA_ATTR_SIZE - - DEF_INLINE_RESERVED_SIZE - - DEF_MIN_INLINE_SIZE) { + if (F2FS_OPTION(sbi).inline_xattr_size < + sizeof(struct f2fs_xattr_header) / sizeof(__le32) || + F2FS_OPTION(sbi).inline_xattr_size > + DEF_ADDRS_PER_INODE - + F2FS_TOTAL_EXTRA_ATTR_SIZE / sizeof(__le32) - + DEF_INLINE_RESERVED_SIZE - + MIN_INLINE_DENTRY_SIZE / sizeof(__le32)) { f2fs_msg(sb, KERN_ERR, "inline xattr size is out of range"); return -EINVAL; diff --git a/include/linux/f2fs_fs.h b/include/linux/f2fs_fs.h index f70f8ac9c4f4..40fec5f94949 100644 --- a/include/linux/f2fs_fs.h +++ b/include/linux/f2fs_fs.h @@ -489,12 +489,12 @@ typedef __le32 f2fs_hash_t; /* * space utilization of regular dentry and inline dentry (w/o extra reservation) - * regular dentry inline dentry - * bitmap 1 * 27 = 27 1 * 23 = 23 - * reserved 1 * 3 = 3 1 * 7 = 7 - * dentry 11 * 214 = 2354 11 * 182 = 2002 - * filename 8 * 214 = 1712 8 * 182 = 1456 - * total 4096 3488 + * regular dentry inline dentry (def) inline dentry (min) + * bitmap 1 * 27 = 27 1 * 23 = 23 1 * 1 = 1 + * reserved 1 * 3 = 3 1 * 7 = 7 1 * 1 = 1 + * dentry 11 * 214 = 2354 11 * 182 = 2002 11 * 2 = 22 + * filename 8 * 214 = 1712 8 * 182 = 1456 8 * 2 = 16 + * total 4096 3488 40 * * Note: there are more reserved space in inline dentry than in regular * dentry, when converting inline dentry we should handle this carefully. @@ -506,6 +506,7 @@ typedef __le32 f2fs_hash_t; #define SIZE_OF_RESERVED (PAGE_SIZE - ((SIZE_OF_DIR_ENTRY + \ F2FS_SLOT_LEN) * \ NR_DENTRY_IN_BLOCK + SIZE_OF_DENTRY_BITMAP)) +#define MIN_INLINE_DENTRY_SIZE 40 /* just include '.' and '..' entries */ /* One directory entry slot representing F2FS_SLOT_LEN-sized file name */ struct f2fs_dir_entry { -- 2.19.1