From: Theodore Ts'o Date: Fri, 30 Jul 2021 16:29:44 +0000 (-0400) Subject: libext2fs: fix translation of Posix ACL's on big-endian systems X-Git-Tag: v1.46.4~53 X-Git-Url: https://git.whamcloud.com/?a=commitdiff_plain;h=7a97083d4350b93f4055bdd8465667cecbb36438;p=tools%2Fe2fsprogs.git 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 --- diff --git a/lib/ext2fs/ext_attr.c b/lib/ext2fs/ext_attr.c index 148fae5..4f6371d 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;