lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Message-Id: <1293628470-28386-11-git-send-email-kas@openvz.org> Date: Wed, 29 Dec 2010 15:14:28 +0200 From: "Kirill A. Shutemov" <kas@...nvz.org> To: Trond Myklebust <Trond.Myklebust@...app.com>, "J. Bruce Fields" <bfields@...ldses.org>, Neil Brown <neilb@...e.de> Cc: Pavel Emelyanov <xemul@...allels.com>, linux-nfs@...r.kernel.org, "David S. Miller" <davem@...emloft.net>, netdev@...r.kernel.org, linux-kernel@...r.kernel.org, "Kirill A. Shutemov" <kas@...nvz.org> Subject: [PATCH v2 10/12] sunrpc: introduce get_rpc_pipefs() Get rpc_pipefs mount point by path. Signed-off-by: Kirill A. Shutemov <kas@...nvz.org> --- include/linux/sunrpc/rpc_pipe_fs.h | 2 + net/sunrpc/rpc_pipe.c | 38 ++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 0 deletions(-) diff --git a/include/linux/sunrpc/rpc_pipe_fs.h b/include/linux/sunrpc/rpc_pipe_fs.h index b09bfa5..922057c 100644 --- a/include/linux/sunrpc/rpc_pipe_fs.h +++ b/include/linux/sunrpc/rpc_pipe_fs.h @@ -46,6 +46,8 @@ RPC_I(struct inode *inode) extern struct vfsmount *init_rpc_pipefs; +struct vfsmount *get_rpc_pipefs(const char *path); + extern int rpc_queue_upcall(struct inode *, struct rpc_pipe_msg *); struct rpc_clnt; diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c index b1e299b..fec6b2d 100644 --- a/net/sunrpc/rpc_pipe.c +++ b/net/sunrpc/rpc_pipe.c @@ -16,6 +16,7 @@ #include <linux/namei.h> #include <linux/fsnotify.h> #include <linux/kernel.h> +#include <linux/nsproxy.h> #include <asm/ioctls.h> #include <linux/fs.h> @@ -931,6 +932,43 @@ static const struct super_operations s_ops = { #define RPCAUTH_GSSMAGIC 0x67596969 +struct vfsmount *get_rpc_pipefs(const char *p) +{ + int error; + struct vfsmount *rpcmount; + struct path path; + + if (!p) { + /* Try to get with default rpcmount mount point */ + rpcmount = get_rpc_pipefs("/var/lib/nfs/rpc_pipefs"); + + /* + * If nothing was found at default mount point and init's + * mount namespace is in use, use init_rpc_pipefs + */ + if (IS_ERR(rpcmount) && (current->nsproxy->mnt_ns == + init_task.nsproxy->mnt_ns)) + return mntget(init_rpc_pipefs); + + return rpcmount; + } + + error = kern_path(p, LOOKUP_FOLLOW | LOOKUP_DIRECTORY, &path); + if (error) + return ERR_PTR(error); + + if (path.mnt->mnt_sb->s_magic != RPCAUTH_GSSMAGIC) { + path_put(&path); + return ERR_PTR(-EINVAL); + } + + rpcmount = mntget(path.mnt); + path_put(&path); + + return rpcmount; +} +EXPORT_SYMBOL_GPL(get_rpc_pipefs); + /* * We have a single directory with 1 node in it. */ -- 1.7.3.4 -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists