[PATCH] erofs-utils: mkfs: tar: fix SIGSEGV on `/` entry
Gao Xiang
hsiangkao at linux.alibaba.com
Sat Sep 27 15:29:28 AEST 2025
Add a `\0` placeholder before `path`.
Fixes: 95d315fd7958 ("erofs-utils: introduce tarerofs")
Reported-by: Nikolay Gorbatov <spraitt at gmail.com>
Closes: https://github.com/erofs/erofs-utils/issues/29
Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
---
lib/tar.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/lib/tar.c b/lib/tar.c
index c93f2c6..139d1c5 100644
--- a/lib/tar.c
+++ b/lib/tar.c
@@ -694,7 +694,7 @@ int tarerofs_parse_tar(struct erofs_importer *im, struct erofs_tarfile *tar)
struct erofs_sb_info *sbi = im->sbi;
struct erofs_inode *root = im->root;
bool whout, opq, e = false;
- char path[PATH_MAX];
+ char _path[PATH_MAX + 1], *path = _path + 1;
struct stat st;
mode_t mode;
erofs_off_t tar_offset, dataoff;
@@ -702,8 +702,8 @@ int tarerofs_parse_tar(struct erofs_importer *im, struct erofs_tarfile *tar)
struct tar_header *th;
struct erofs_dentry *d;
struct erofs_inode *inode;
- unsigned int j, csum, cksum;
- int ckksum, ret, rem;
+ unsigned int csum, cksum;
+ int ckksum, ret, rem, j;
root->dev = tar->dev;
if (eh.path)
@@ -817,6 +817,7 @@ out_eot:
path[0] = '.';
path[1] = '\0';
} else {
+ *_path = '\0';
while (path[j - 1] == '/')
path[--j] = '\0';
}
--
2.43.5
More information about the Linux-erofs
mailing list