aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTheodore Ts'o <tytso@mit.edu>2021-07-30 12:29:44 -0400
committerTheodore Ts'o <tytso@mit.edu>2021-07-30 12:29:44 -0400
commit7a97083d4350b93f4055bdd8465667cecbb36438 (patch)
tree0b0fa4e6e5c5b1aa0ef65defcf26a5e7e2dafc4c
parent654be045a8e4e5f1e1d4387b987c036439809059 (diff)
downloade2fsprogs-7a97083d4350b93f4055bdd8465667cecbb36438.tar.gz
libext2fs: fix translation of Posix ACL's on big-endian systems
The ACL returned by the kernel in lgetxattr(2) is returned in Little Endian, even on Big Endian systems. Fix the functions convert_posix_acl_to_disk_buffer() and convert_disk_buffer_to_posix_acl() to work correctly on Big Endian systems. This fixes a failure of the test m_rootdir_acl. Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r--lib/ext2fs/ext_attr.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/lib/ext2fs/ext_attr.c b/lib/ext2fs/ext_attr.c
index 148fae5b5..4f6371deb 100644
--- a/lib/ext2fs/ext_attr.c
+++ b/lib/ext2fs/ext_attr.c
@@ -556,10 +556,10 @@ static errcode_t convert_posix_acl_to_disk_buffer(const void *value, size_t size
s = sizeof(ext4_acl_header);
for (end = entry + count; entry != end;entry++) {
ext4_acl_entry *disk_entry = (ext4_acl_entry*) e;
- disk_entry->e_tag = ext2fs_cpu_to_le16(entry->e_tag);
- disk_entry->e_perm = ext2fs_cpu_to_le16(entry->e_perm);
+ disk_entry->e_tag = entry->e_tag;
+ disk_entry->e_perm = entry->e_perm;
- switch(entry->e_tag) {
+ switch(ext2fs_le16_to_cpu(entry->e_tag)) {
case ACL_USER_OBJ:
case ACL_GROUP_OBJ:
case ACL_MASK:
@@ -569,7 +569,7 @@ static errcode_t convert_posix_acl_to_disk_buffer(const void *value, size_t size
break;
case ACL_USER:
case ACL_GROUP:
- disk_entry->e_id = ext2fs_cpu_to_le32(entry->e_id);
+ disk_entry->e_id = entry->e_id;
e += sizeof(ext4_acl_entry);
s += sizeof(ext4_acl_entry);
break;
@@ -608,10 +608,10 @@ static errcode_t convert_disk_buffer_to_posix_acl(const void *value, size_t size
while (size > 0) {
const ext4_acl_entry *disk_entry = (const ext4_acl_entry *) cp;
- entry->e_tag = ext2fs_le16_to_cpu(disk_entry->e_tag);
- entry->e_perm = ext2fs_le16_to_cpu(disk_entry->e_perm);
+ entry->e_tag = disk_entry->e_tag;
+ entry->e_perm = disk_entry->e_perm;
- switch(entry->e_tag) {
+ switch(ext2fs_le16_to_cpu(entry->e_tag)) {
case ACL_USER_OBJ:
case ACL_GROUP_OBJ:
case ACL_MASK:
@@ -622,7 +622,7 @@ static errcode_t convert_disk_buffer_to_posix_acl(const void *value, size_t size
break;
case ACL_USER:
case ACL_GROUP:
- entry->e_id = ext2fs_le32_to_cpu(disk_entry->e_id);
+ entry->e_id = disk_entry->e_id;
cp += sizeof(ext4_acl_entry);
size -= sizeof(ext4_acl_entry);
break;