diff options
author | David Howells <dhowells@redhat.com> | 2007-04-26 18:57:07 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2007-04-26 18:57:07 -0400 |
commit | 00d3b7a4533e367b0dc2812a706db8f9f071c27f (patch) | |
tree | f0b1ae0266267cb2c54cb11aa61ad0758ce9c0f5 /fs/afs/mntpt.c | |
parent | 436058a49e0fb91c74454dbee9cfee6fb53b4336 (diff) |
[AFS]: Add security support.
Add security support to the AFS filesystem. Kerberos IV tickets are added as
RxRPC keys are added to the session keyring with the klog program. open() and
other VFS operations then find this ticket with request_key() and either use
it immediately (eg: mkdir, unlink) or attach it to a file descriptor (open).
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'fs/afs/mntpt.c')
-rw-r--r-- | fs/afs/mntpt.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/fs/afs/mntpt.c b/fs/afs/mntpt.c index 08c11a0b66bd..b905ae37f912 100644 --- a/fs/afs/mntpt.c +++ b/fs/afs/mntpt.c | |||
@@ -48,8 +48,11 @@ unsigned long afs_mntpt_expiry_timeout = 10 * 60; | |||
48 | * check a symbolic link to see whether it actually encodes a mountpoint | 48 | * check a symbolic link to see whether it actually encodes a mountpoint |
49 | * - sets the AFS_VNODE_MOUNTPOINT flag on the vnode appropriately | 49 | * - sets the AFS_VNODE_MOUNTPOINT flag on the vnode appropriately |
50 | */ | 50 | */ |
51 | int afs_mntpt_check_symlink(struct afs_vnode *vnode) | 51 | int afs_mntpt_check_symlink(struct afs_vnode *vnode, struct key *key) |
52 | { | 52 | { |
53 | struct file file = { | ||
54 | .private_data = key, | ||
55 | }; | ||
53 | struct page *page; | 56 | struct page *page; |
54 | size_t size; | 57 | size_t size; |
55 | char *buf; | 58 | char *buf; |
@@ -58,7 +61,7 @@ int afs_mntpt_check_symlink(struct afs_vnode *vnode) | |||
58 | _enter("{%u,%u}", vnode->fid.vnode, vnode->fid.unique); | 61 | _enter("{%u,%u}", vnode->fid.vnode, vnode->fid.unique); |
59 | 62 | ||
60 | /* read the contents of the symlink into the pagecache */ | 63 | /* read the contents of the symlink into the pagecache */ |
61 | page = read_mapping_page(AFS_VNODE_TO_I(vnode)->i_mapping, 0, NULL); | 64 | page = read_mapping_page(AFS_VNODE_TO_I(vnode)->i_mapping, 0, &file); |
62 | if (IS_ERR(page)) { | 65 | if (IS_ERR(page)) { |
63 | ret = PTR_ERR(page); | 66 | ret = PTR_ERR(page); |
64 | goto out; | 67 | goto out; |
@@ -214,7 +217,7 @@ static void *afs_mntpt_follow_link(struct dentry *dentry, struct nameidata *nd) | |||
214 | struct vfsmount *newmnt; | 217 | struct vfsmount *newmnt; |
215 | int err; | 218 | int err; |
216 | 219 | ||
217 | _enter("%p{%s},{%s:%p{%s}}", | 220 | _enter("%p{%s},{%s:%p{%s},}", |
218 | dentry, | 221 | dentry, |
219 | dentry->d_name.name, | 222 | dentry->d_name.name, |
220 | nd->mnt->mnt_devname, | 223 | nd->mnt->mnt_devname, |
@@ -234,7 +237,8 @@ static void *afs_mntpt_follow_link(struct dentry *dentry, struct nameidata *nd) | |||
234 | err = do_add_mount(newmnt, nd, MNT_SHRINKABLE, &afs_vfsmounts); | 237 | err = do_add_mount(newmnt, nd, MNT_SHRINKABLE, &afs_vfsmounts); |
235 | switch (err) { | 238 | switch (err) { |
236 | case 0: | 239 | case 0: |
237 | path_release(nd); | 240 | mntput(nd->mnt); |
241 | dput(nd->dentry); | ||
238 | nd->mnt = newmnt; | 242 | nd->mnt = newmnt; |
239 | nd->dentry = dget(newmnt->mnt_root); | 243 | nd->dentry = dget(newmnt->mnt_root); |
240 | schedule_delayed_work(&afs_mntpt_expiry_timer, | 244 | schedule_delayed_work(&afs_mntpt_expiry_timer, |