[PATCH v17 10/13] namei: LOOKUP_{IN_ROOT,BENEATH}: permit limited ".." resolution
Al Viro
viro at zeniv.linux.org.uk
Mon Nov 25 11:35:01 AEDT 2019
On Sun, Nov 17, 2019 at 12:17:10PM +1100, Aleksa Sarai wrote:
> + if (unlikely(nd->flags & LOOKUP_IS_SCOPED)) {
> + /*
> + * If there was a racing rename or mount along our
> + * path, then we can't be sure that ".." hasn't jumped
> + * above nd->root (and so userspace should retry or use
> + * some fallback).
> + */
> + if (unlikely(read_seqretry(&mount_lock, nd->m_seq)))
> + return -EAGAIN;
> + if (unlikely(read_seqretry(&rename_lock, nd->r_seq)))
> + return -EAGAIN;
> + }
Looks like excessive barriers to me - it's
rmb
check mount_lock.sequence
rmb
check rename_lock.sequence
> @@ -2266,6 +2274,10 @@ static const char *path_init(struct nameidata *nd, unsigned flags)
> nd->last_type = LAST_ROOT; /* if there are only slashes... */
> nd->flags = flags | LOOKUP_JUMPED | LOOKUP_PARENT;
> nd->depth = 0;
> +
> + nd->m_seq = read_seqbegin(&mount_lock);
> + nd->r_seq = read_seqbegin(&rename_lock);
Same here, pretty much (fetch/rmb/fetch/rmb)
More information about the Linuxppc-dev
mailing list