diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2007-09-11 18:00:20 -0400 |
---|---|---|
committer | Trond Myklebust <Trond.Myklebust@netapp.com> | 2007-10-09 17:16:42 -0400 |
commit | 06b8d2552d50f802a3277137a565febcd59ef037 (patch) | |
tree | 7b3b5d92e4a7a1bd8eff9e994a4c1899a8c35670 | |
parent | 6d0aa06afd62a868d83c6021335622a316469527 (diff) | |
download | linux-06b8d2552d50f802a3277137a565febcd59ef037.tar.gz linux-06b8d2552d50f802a3277137a565febcd59ef037.tar.bz2 linux-06b8d2552d50f802a3277137a565febcd59ef037.zip |
SUNRPC: Make sure server name is reasonable before trying to print it
Check the length of the passed-in server name before trying to print it in
the log.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
-rw-r--r-- | net/sunrpc/clnt.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/net/sunrpc/clnt.c b/net/sunrpc/clnt.c index c3d571abcded..0357819ffdb0 100644 --- a/net/sunrpc/clnt.c +++ b/net/sunrpc/clnt.c @@ -127,7 +127,14 @@ static struct rpc_clnt * rpc_new_client(struct rpc_xprt *xprt, char *servname, s struct rpc_clnt *clnt = NULL; struct rpc_auth *auth; int err; - int len; + size_t len; + + /* sanity check the name before trying to print it */ + err = -EINVAL; + len = strlen(servname); + if (len > RPC_MAXNETNAMELEN) + goto out_no_rpciod; + len++; dprintk("RPC: creating %s client for %s (xprt %p)\n", program->name, servname, xprt); @@ -148,7 +155,6 @@ static struct rpc_clnt * rpc_new_client(struct rpc_xprt *xprt, char *servname, s clnt->cl_parent = clnt; clnt->cl_server = clnt->cl_inline_name; - len = strlen(servname) + 1; if (len > sizeof(clnt->cl_inline_name)) { char *buf = kmalloc(len, GFP_KERNEL); if (buf != 0) |