[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 6/7] 9pfs: fix removing non-existent POSIX ACL xattr on macOS host
From: |
Christian Schoenebeck |
Subject: |
[PULL 6/7] 9pfs: fix removing non-existent POSIX ACL xattr on macOS host |
Date: |
Sat, 30 Apr 2022 13:44:42 +0200 |
When mapped POSIX ACL is used, we are ignoring errors when trying
to remove a POSIX ACL xattr that does not exist. On Linux hosts we
would get ENODATA in such cases, on macOS hosts however we get
ENOATTR instead.
As we can be sure that ENOATTR is defined as being identical on Linux
hosts (at least by qemu/xattr.h), it is safe to fix this issue by
simply comparing against ENOATTR instead of ENODATA.
This patch fixes e.g. a command on Linux guest like:
cp --preserve=mode old new
Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com>
Link: https://lore.kernel.org/qemu-devel/2866993.yOYK24bMf6@silver/
Reviewed-by: Greg Kurz <groug@kaod.org>
Reviewed-by: Akihiko Odaki <akihiko.odaki@gmail.com>
Message-Id:
<34f81e9bffd7a3e65fb7aab5b56c107bd0aac960.1651228001.git.qemu_oss@crudebyte.com>
---
hw/9pfs/9p-posix-acl.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/hw/9pfs/9p-posix-acl.c b/hw/9pfs/9p-posix-acl.c
index eadae270dd..4b2cb3c66c 100644
--- a/hw/9pfs/9p-posix-acl.c
+++ b/hw/9pfs/9p-posix-acl.c
@@ -65,7 +65,11 @@ static int mp_pacl_removexattr(FsContext *ctx,
int ret;
ret = local_removexattr_nofollow(ctx, path, MAP_ACL_ACCESS);
- if (ret == -1 && errno == ENODATA) {
+ /*
+ * macOS returns ENOATTR (!=ENODATA on macOS), whereas Linux returns
+ * ENODATA (==ENOATTR on Linux), so checking for ENOATTR is fine
+ */
+ if (ret == -1 && errno == ENOATTR) {
/*
* We don't get ENODATA error when trying to remove a
* posix acl that is not present. So don't throw the error
@@ -115,7 +119,11 @@ static int mp_dacl_removexattr(FsContext *ctx,
int ret;
ret = local_removexattr_nofollow(ctx, path, MAP_ACL_DEFAULT);
- if (ret == -1 && errno == ENODATA) {
+ /*
+ * macOS returns ENOATTR (!=ENODATA on macOS), whereas Linux returns
+ * ENODATA (==ENOATTR on Linux), so checking for ENOATTR is fine
+ */
+ if (ret == -1 && errno == ENOATTR) {
/*
* We don't get ENODATA error when trying to remove a
* posix acl that is not present. So don't throw the error
--
2.30.2
- [PULL 0/7] 9p queue 2022-04-30, Christian Schoenebeck, 2022/04/30
- [PULL 1/7] 9pfs: fix inode sequencing in 'synth' driver, Christian Schoenebeck, 2022/04/30
- [PULL 2/7] 9pfs: fix qemu_mknodat(S_IFREG) on macOS, Christian Schoenebeck, 2022/04/30
- [PULL 3/7] 9pfs: fix qemu_mknodat(S_IFSOCK) on macOS, Christian Schoenebeck, 2022/04/30
- [PULL 4/7] 9pfs: fix wrong encoding of rdev field in Rgetattr on macOS, Christian Schoenebeck, 2022/04/30
- [PULL 5/7] 9pfs: fix wrong errno being sent to Linux client on macOS host, Christian Schoenebeck, 2022/04/30
- [PULL 6/7] 9pfs: fix removing non-existent POSIX ACL xattr on macOS host,
Christian Schoenebeck <=
- [PULL 7/7] 9pfs: fix qemu_mknodat() to always return -1 on error on macOS host, Christian Schoenebeck, 2022/04/30
- Re: [PULL 0/7] 9p queue 2022-04-30, Richard Henderson, 2022/04/30