Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a7f77542 authored by Al Viro's avatar Al Viro
Browse files

should_follow_link(): validate ->d_seq after having decided to follow



... otherwise d_is_symlink() above might have nothing to do with
the inode value we've got.

Cc: stable@vger.kernel.org # v4.2+
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent d4565649
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -1712,6 +1712,11 @@ static inline int should_follow_link(struct nameidata *nd, struct path *link,
		return 0;
	if (!follow)
		return 0;
	/* make sure that d_is_symlink above matches inode */
	if (nd->flags & LOOKUP_RCU) {
		if (read_seqcount_retry(&link->dentry->d_seq, seq))
			return -ECHILD;
	}
	return pick_link(nd, link, inode, seq);
}