From 871a108bfa8f11ad299a96820f469d386e4cedfa Mon Sep 17 00:00:00 2001 From: AlphaGlider25 <12aa44edsta@gmail.com> Date: Fri, 19 Jun 2026 03:30:48 +0200 Subject: [PATCH 1/2] Fix Solaris xattr retry loop after short write --- lib/sysxattrs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/sysxattrs.c b/lib/sysxattrs.c index 5a6aeaad9..2b9bd38fd 100644 --- a/lib/sysxattrs.c +++ b/lib/sysxattrs.c @@ -227,7 +227,7 @@ int sys_lsetxattr(const char *path, const char *name, const void *value, size_t return -1; for (bufpos = 0; bufpos < size; ) { - ssize_t cnt = write(attrfd, (char*)value + bufpos, size); + ssize_t cnt = write(attrfd, (char*)value + bufpos, size - bufpos); if (cnt <= 0) { if (cnt < 0 && errno == EINTR) continue; From 2a8bbb7792bf741b6c3c08041e33e9fccfffdc7a Mon Sep 17 00:00:00 2001 From: AlphaGlider25 <12aa44edsta@gmail.com> Date: Fri, 19 Jun 2026 12:53:06 +0200 Subject: [PATCH 2/2] Fix Solaris xattr retry handling Use the remaining byte count for retry writes and avoid using a size_t sentinel for write failures. --- lib/sysxattrs.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/sysxattrs.c b/lib/sysxattrs.c index 2b9bd38fd..861af981d 100644 --- a/lib/sysxattrs.c +++ b/lib/sysxattrs.c @@ -231,15 +231,15 @@ int sys_lsetxattr(const char *path, const char *name, const void *value, size_t if (cnt <= 0) { if (cnt < 0 && errno == EINTR) continue; - bufpos = -1; - break; + close(attrfd); + return -1; } bufpos += cnt; } close(attrfd); - return bufpos > 0 ? 0 : -1; + return 0; } int sys_lremovexattr(const char *path, const char *name)