From ee7d3dc1dd95a6f832d96c39fab65407963f1123 Mon Sep 17 00:00:00 2001 From: Hongzhen Luo Date: Wed, 27 Nov 2024 17:28:25 +0800 Subject: [PATCH] erofs-utils: avoid silent corruption caused by `c_root_xattr_isize` When `c_root_xattr_isize` is too large, `i_xattr_icount` will overflow, resulting in silent corruption of the filesystem image. This patch performs checks in advance and reports errors. Fixes: 8f93c2f83962 ("erofs-utils: mkfs: support inline xattr reservation for rootdirs") Signed-off-by: Hongzhen Luo Link: https://lore.kernel.org/r/20241127092825.4105724-1-hongzhen@linux.alibaba.com Signed-off-by: Gao Xiang --- lib/inode.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/inode.c b/lib/inode.c index f553bec..e2888a4 100644 --- a/lib/inode.c +++ b/lib/inode.c @@ -1717,6 +1717,12 @@ static int erofs_mkfs_dump_tree(struct erofs_inode *root, bool rebuild, list_del(&root->i_hash); erofs_insert_ihash(root); } else if (cfg.c_root_xattr_isize) { + if (cfg.c_root_xattr_isize > EROFS_XATTR_ALIGN( + UINT16_MAX - sizeof(struct erofs_xattr_entry))) { + erofs_err("Invalid configuration for c_root_xattr_isize: %u (too large)", + cfg.c_root_xattr_isize); + return -EINVAL; + } root->xattr_isize = cfg.c_root_xattr_isize; } -- 2.34.1