open file, unlink it, then use ioctl(2) to make it immutable or append only. Now close it and watch the blocks *not* freed... Immutable/append-only checks belong in ->setattr(). Note: the bug is old and backport to anything prior to 737f2e93b972 ("ext2: convert to use the new truncate convention") will need these checks lifted into ext2_setattr(). Cc: stable@kernel.org Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> --- diff --git a/fs/ext2/inode.c b/fs/ext2/inode.c index 1e01fabef130..71635909df3b 100644 --- a/fs/ext2/inode.c +++ b/fs/ext2/inode.c @@ -1264,21 +1264,11 @@ static void __ext2_truncate_blocks(struct inode *inode, loff_t offset) static void ext2_truncate_blocks(struct inode *inode, loff_t offset) { - /* - * XXX: it seems like a bug here that we don't allow - * IS_APPEND inode to have blocks-past-i_size trimmed off. - * review and fix this. - * - * Also would be nice to be able to handle IO errors and such, - * but that's probably too much to ask. - */ if (!(S_ISREG(inode->i_mode) || S_ISDIR(inode->i_mode) || S_ISLNK(inode->i_mode))) return; if (ext2_inode_is_fast_symlink(inode)) return; - if (IS_APPEND(inode) || IS_IMMUTABLE(inode)) - return; dax_sem_down_write(EXT2_I(inode)); __ext2_truncate_blocks(inode, offset);
On Fri 18-05-18 01:06:25, Al Viro wrote:
> open file, unlink it, then use ioctl(2) to make it immutable or
> append only. Now close it and watch the blocks *not* freed...
>
> Immutable/append-only checks belong in ->setattr().
> Note: the bug is old and backport to anything prior to 737f2e93b972
> ("ext2: convert to use the new truncate convention") will need
> these checks lifted into ext2_setattr().
>
> Cc: stable@kernel.org
> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Sorry, I've been busy with other stuff after LSF/MM and then forgot about
this. Thanks for the patch! I've added the patch to my tree.
Honza
--
Jan Kara <jack@suse.com>
SUSE Labs, CR
On Wed 23-05-18 13:58:24, Jan Kara wrote:
> On Fri 18-05-18 01:06:25, Al Viro wrote:
> > open file, unlink it, then use ioctl(2) to make it immutable or
> > append only. Now close it and watch the blocks *not* freed...
> >
> > Immutable/append-only checks belong in ->setattr().
> > Note: the bug is old and backport to anything prior to 737f2e93b972
> > ("ext2: convert to use the new truncate convention") will need
> > these checks lifted into ext2_setattr().
> >
> > Cc: stable@kernel.org
> > Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
>
> Sorry, I've been busy with other stuff after LSF/MM and then forgot about
> this. Thanks for the patch! I've added the patch to my tree.
Bah, and now I see (thanks Amir for the notice) you've already pushed it to
Linus. Sorry for the noise.
Honza
--
Jan Kara <jack@suse.com>
SUSE Labs, CR