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

Commit 5a30d8a2 authored by David Howells's avatar David Howells Committed by Al Viro
Browse files

VFS: Fix automount for negative autofs dentries



Autofs may set the DCACHE_NEED_AUTOMOUNT flag on negative dentries.  These
need attention from the automounter daemon regardless of the LOOKUP_FOLLOW flag.

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Acked-by: default avatarIan Kent <raven@themaw.net>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent b4aff1f8
Loading
Loading
Loading
Loading
+15 −9
Original line number Diff line number Diff line
@@ -716,19 +716,25 @@ static int follow_automount(struct path *path, unsigned flags,
	if ((flags & LOOKUP_NO_AUTOMOUNT) && !(flags & LOOKUP_PARENT))
		return -EISDIR; /* we actually want to stop here */

	/* We want to mount if someone is trying to open/create a file of any
	 * type under the mountpoint, wants to traverse through the mountpoint
	 * or wants to open the mounted directory.
	 *
	/*
	 * We don't want to mount if someone's just doing a stat and they've
	 * set AT_SYMLINK_NOFOLLOW - unless they're stat'ing a directory and
	 * appended a '/' to the name.
	 */
	if (!(flags & LOOKUP_FOLLOW) &&
	    !(flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY |
		       LOOKUP_OPEN | LOOKUP_CREATE)))
	if (!(flags & LOOKUP_FOLLOW)) {
		/* We do, however, want to mount if someone wants to open or
		 * create a file of any type under the mountpoint, wants to
		 * traverse through the mountpoint or wants to open the mounted
		 * directory.
		 * Also, autofs may mark negative dentries as being automount
		 * points.  These will need the attentions of the daemon to
		 * instantiate them before they can be used.
		 */
		if (!(flags & (LOOKUP_PARENT | LOOKUP_DIRECTORY |
			     LOOKUP_OPEN | LOOKUP_CREATE)) &&
		    path->dentry->d_inode)
			return -EISDIR;

	}
	current->total_link_count++;
	if (current->total_link_count >= 40)
		return -ELOOP;