[PATCH] erofs-utils: lib: ignore xattr_types[0] when matching xattr prefixes
Gao Xiang
hsiangkao at linux.alibaba.com
Tue Jan 13 20:54:46 AEDT 2026
It's not the preferred prefix to target xattr names, at least.
Fixes: 2faeebb47c68 ("erofs-utils: lib: introduce prefix-aware erofs_setxattr()")
Signed-off-by: Gao Xiang <hsiangkao at linux.alibaba.com>
---
lib/xattr.c | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
diff --git a/lib/xattr.c b/lib/xattr.c
index 764aee3..37ce55b 100644
--- a/lib/xattr.c
+++ b/lib/xattr.c
@@ -213,7 +213,8 @@ bool erofs_xattr_prefix_matches(const char *key, unsigned int *index,
*index = 0;
*len = 0;
- for (p = xattr_types; p < xattr_types + ARRAY_SIZE(xattr_types); ++p) {
+ for (p = xattr_types + 1;
+ p < xattr_types + ARRAY_SIZE(xattr_types); ++p) {
if (p->prefix && !strncmp(p->prefix, key, p->prefix_len)) {
*len = p->prefix_len;
*index = p - xattr_types;
@@ -506,10 +507,9 @@ int erofs_setxattr(struct erofs_inode *inode, int index,
{
struct erofs_sb_info *sbi = inode->sbi;
struct erofs_xattritem *item;
- struct erofs_xattr_prefix *prefix = NULL;
+ const struct erofs_xattr_prefix *prefix = NULL;
struct ea_type_node *tnode;
unsigned int len[2];
- int prefix_len;
char *kvbuf;
if (index & EROFS_XATTR_LONG_PREFIX) {
@@ -526,16 +526,16 @@ int erofs_setxattr(struct erofs_inode *inode, int index,
if (!prefix)
return -EINVAL;
- prefix_len = prefix->prefix_len;
- len[0] = prefix_len + strlen(name);
+ len[0] = prefix->prefix_len + strlen(name);
len[1] = size;
kvbuf = malloc(EROFS_XATTR_KVSIZE(len));
if (!kvbuf)
return -ENOMEM;
- memcpy(kvbuf, prefix->prefix, prefix_len);
- memcpy(kvbuf + prefix_len, name, EROFS_XATTR_KSIZE(len) - prefix_len);
+ memcpy(kvbuf, prefix->prefix, prefix->prefix_len);
+ memcpy(kvbuf + prefix->prefix_len, name,
+ EROFS_XATTR_KSIZE(len) - prefix->prefix_len);
memcpy(kvbuf + EROFS_XATTR_KSIZE(len), value, size);
item = get_xattritem(sbi, kvbuf, len);
--
2.43.0
More information about the Linux-erofs
mailing list