summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorngkaho1234 <ngkaho1234@gmail.com>2016-01-26 06:15:35 +0000
committerngkaho1234 <ngkaho1234@gmail.com>2016-01-26 06:15:35 +0000
commit9293ce9f84d052c9de71b375ba9f93470cdff456 (patch)
tree91a9804bf392c5900da6b56ad96a4eeef134edd8
parentcc2ee3402d4a4de0f7827397313f16f3c1b4fa3f (diff)
ext4: ext4_chmod now only allows modifying the lowest 12bit of i_mode.
-rw-r--r--lwext4/ext4.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/lwext4/ext4.c b/lwext4/ext4.c
index 236cb09..38ec6d4 100644
--- a/lwext4/ext4.c
+++ b/lwext4/ext4.c
@@ -1989,7 +1989,7 @@ uint64_t ext4_fsize(ext4_file *f)
int ext4_chmod(const char *path, uint32_t mode)
{
int r;
- uint32_t ino;
+ uint32_t ino, orig_mode;
ext4_file f;
struct ext4_sblock *sb;
struct ext4_inode_ref inode_ref;
@@ -2017,7 +2017,10 @@ int ext4_chmod(const char *path, uint32_t mode)
return r;
}
- ext4_inode_set_mode(sb, inode_ref.inode, mode);
+ orig_mode = ext4_inode_get_mode(sb, inode_ref.inode);
+ orig_mode &= ~0xFFF;
+ orig_mode |= mode & 0xFFF;
+ ext4_inode_set_mode(sb, inode_ref.inode, orig_mode);
inode_ref.dirty = true;
r = ext4_fs_put_inode_ref(&inode_ref);