diff options
author | Theodore Ts'o <tytso@mit.edu> | 2021-07-30 12:29:44 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2021-07-30 12:29:44 -0400 |
commit | 7a97083d4350b93f4055bdd8465667cecbb36438 (patch) | |
tree | 0b0fa4e6e5c5b1aa0ef65defcf26a5e7e2dafc4c | |
parent | 654be045a8e4e5f1e1d4387b987c036439809059 (diff) | |
download | e2fsprogs-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.c | 16 |
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; |