diff mbox series

SUNRPC: stop printk reading past end of string

Message ID 20200905140326.GA26625@fieldses.org (mailing list archive)
State New, archived
Headers show
Series SUNRPC: stop printk reading past end of string | expand

Commit Message

J. Bruce Fields Sept. 5, 2020, 2:03 p.m. UTC
From: "J. Bruce Fields" <bfields@redhat.com>

Since p points at raw xdr data, there's no guarantee that it's NULL
terminated, so we should give a length.  And probably escape any special
characters too.

Reported-by: Zhi Li <yieli@redhat.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
---
 net/sunrpc/rpcb_clnt.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Chuck Lever Sept. 5, 2020, 4:55 p.m. UTC | #1
> On Sep 5, 2020, at 10:03 AM, bfields@fieldses.org wrote:
> 
> From: "J. Bruce Fields" <bfields@redhat.com>
> 
> Since p points at raw xdr data, there's no guarantee that it's NULL
> terminated, so we should give a length.  And probably escape any special
> characters too.
> 
> Reported-by: Zhi Li <yieli@redhat.com>
> Signed-off-by: J. Bruce Fields <bfields@redhat.com>

I sent a patch a couple months ago to remove this dprintk:

https://lore.kernel.org/linux-nfs/20200708201029.22129.31971.stgit@manet.1015granger.net/T/#u

However you might want to apply Bruce's patch first, so it can
be backported to stable.


> ---
> net/sunrpc/rpcb_clnt.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
> index c27123e6ba80..4a67685c83eb 100644
> --- a/net/sunrpc/rpcb_clnt.c
> +++ b/net/sunrpc/rpcb_clnt.c
> @@ -982,8 +982,8 @@ static int rpcb_dec_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr,
> 	p = xdr_inline_decode(xdr, len);
> 	if (unlikely(p == NULL))
> 		goto out_fail;
> -	dprintk("RPC: %5u RPCB_%s reply: %s\n", req->rq_task->tk_pid,
> -			req->rq_task->tk_msg.rpc_proc->p_name, (char *)p);
> +	dprintk("RPC: %5u RPCB_%s reply: %*pE\n", req->rq_task->tk_pid,
> +			req->rq_task->tk_msg.rpc_proc->p_name, len, (char *)p);
> 
> 	if (rpc_uaddr2sockaddr(req->rq_xprt->xprt_net, (char *)p, len,
> 				sap, sizeof(address)) == 0)
> -- 
> 2.26.2
> 

--
Chuck Lever
diff mbox series

Patch

diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
index c27123e6ba80..4a67685c83eb 100644
--- a/net/sunrpc/rpcb_clnt.c
+++ b/net/sunrpc/rpcb_clnt.c
@@ -982,8 +982,8 @@  static int rpcb_dec_getaddr(struct rpc_rqst *req, struct xdr_stream *xdr,
 	p = xdr_inline_decode(xdr, len);
 	if (unlikely(p == NULL))
 		goto out_fail;
-	dprintk("RPC: %5u RPCB_%s reply: %s\n", req->rq_task->tk_pid,
-			req->rq_task->tk_msg.rpc_proc->p_name, (char *)p);
+	dprintk("RPC: %5u RPCB_%s reply: %*pE\n", req->rq_task->tk_pid,
+			req->rq_task->tk_msg.rpc_proc->p_name, len, (char *)p);
 
 	if (rpc_uaddr2sockaddr(req->rq_xprt->xprt_net, (char *)p, len,
 				sap, sizeof(address)) == 0)