Commit ce9be3ce authored by Andreas Gruenbacher's avatar Andreas Gruenbacher Committed by Linus Torvalds

[PATCH] ext3: fix ea-in-inode default ACL creation

When a new inode is created, ext3_new_inode sets the EXT3_STATE_NEW flag,
which tells ext3_do_update_inode to zero out the inode before filling in
the inode's data.  When a file is created in a directory with a default
acl, the new inode inherits the directory's default acl; this generates
attributes.  The attributes are created before ext3_do_update_inode is
called to write out the inode.  In case of in-inode attributes, the new
inode's attributes are written, and then zeroed out again by
ext3_do_update_inode.  Bad thing.

Fix this by recognizing the EXT3_STATE_NEW case in ext3_xattr_set_handle,
and zeroing out the inode there already when necessary.
Signed-off-by: default avatarAndreas Gruenbacher <agruen@suse.de>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 3429c5a3
......@@ -954,6 +954,13 @@ ext3_xattr_set_handle(handle_t *handle, struct inode *inode, int name_index,
error = ext3_get_inode_loc(inode, &is.iloc);
if (error)
goto cleanup;
if (EXT3_I(inode)->i_state & EXT3_STATE_NEW) {
struct ext3_inode *raw_inode = ext3_raw_inode(&is.iloc);
memset(raw_inode, 0, EXT3_SB(inode->i_sb)->s_inode_size);
EXT3_I(inode)->i_state &= ~EXT3_STATE_NEW;
}
error = ext3_xattr_ibody_find(inode, &i, &is);
if (error)
goto cleanup;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment