afs: Distinguish mountpoints from symlinks by file mode alone
authorDavid Howells <dhowells@redhat.com>
Thu, 16 Mar 2017 16:27:45 +0000 (16:27 +0000)
committerDavid Howells <dhowells@redhat.com>
Thu, 16 Mar 2017 16:27:45 +0000 (16:27 +0000)
commit944c74f472f926785b1948efa0e73e2f1b3b539b
treea8659f1ecc395bef4f80b3f38bc6bb7dc070e4f0
parent58fed94dfb17e89556b5705f20f90e5b2971b6a1
afs: Distinguish mountpoints from symlinks by file mode alone

In AFS, mountpoints appear as symlinks with mode 0644 and normal symlinks
have mode 0777, so use this to distinguish them rather than reading the
content and parsing it.  In the case of a mountpoint, the symlink body is a
formatted string indicating the location of the target volume.

Note that with this, kAFS no longer 'pre-fetches' the contents of symlinks,
so afs_readpage() may fail with an access-denial because when the VFS calls
d_automount(), it wraps the call in an credentials override that sets the
initial creds - thereby preventing access to the caller's keyrings and the
authentication keys held therein.

To this end, a patch reverting that change to the VFS is required also.

Reported-by: Jeffrey Altman <jaltman@auristor.com>
Signed-off-by: David Howells <dhowells@redhat.com>
fs/afs/inode.c
fs/afs/internal.h
fs/afs/mntpt.c