3.16.62-rc1 review patch. If anyone has any objections, please let me know. ------------------ From: Theodore Ts'o <tytso@xxxxxxx> commit b50282f3241acee880514212d88b6049fb5039c8 upstream. If the destination of the rename(2) system call exists, the inode's link count (i_nlinks) must be non-zero. If it is, the inode can end up on the orphan list prematurely, leading to all sorts of hilarity, including a use-after-free. https://bugzilla.kernel.org/show_bug.cgi?id=200931 Signed-off-by: Theodore Ts'o <tytso@xxxxxxx> Reported-by: Wen Xu <wen.xu@xxxxxxxxxx> [bwh: Backported to 3.16: - Return -EIO on error - Adjust context] Signed-off-by: Ben Hutchings <ben@xxxxxxxxxxxxxxx> --- fs/ext4/namei.c | 6 ++++++ 1 file changed, 6 insertions(+) --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c @@ -3211,6 +3211,12 @@ static int ext4_rename(struct inode *old int force_reread; int retval; + if (new.inode && new.inode->i_nlink == 0) { + EXT4_ERROR_INODE(new.inode, + "target of rename is already freed"); + return -EIO; + } + dquot_initialize(old.dir); dquot_initialize(new.dir);