| From c09f56b8f68d4d536bff518227aea323b835b2ce Mon Sep 17 00:00:00 2001 |
| From: Artur Molchanov <arturmolchanov@gmail.com> |
| Date: Mon, 12 Oct 2020 01:00:45 +0300 |
| Subject: net/sunrpc: Fix return value for sysctl sunrpc.transports |
| |
| From: Artur Molchanov <arturmolchanov@gmail.com> |
| |
| commit c09f56b8f68d4d536bff518227aea323b835b2ce upstream. |
| |
| Fix returning value for sysctl sunrpc.transports. |
| Return error code from sysctl proc_handler function proc_do_xprt instead of number of the written bytes. |
| Otherwise sysctl returns random garbage for this key. |
| |
| Since v1: |
| - Handle negative returned value from memory_read_from_buffer as an error |
| |
| Signed-off-by: Artur Molchanov <arturmolchanov@gmail.com> |
| Cc: stable@vger.kernel.org |
| Signed-off-by: J. Bruce Fields <bfields@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| net/sunrpc/sysctl.c | 8 +++++++- |
| 1 file changed, 7 insertions(+), 1 deletion(-) |
| |
| --- a/net/sunrpc/sysctl.c |
| +++ b/net/sunrpc/sysctl.c |
| @@ -70,7 +70,13 @@ static int proc_do_xprt(struct ctl_table |
| return 0; |
| } |
| len = svc_print_xprts(tmpbuf, sizeof(tmpbuf)); |
| - return memory_read_from_buffer(buffer, *lenp, ppos, tmpbuf, len); |
| + *lenp = memory_read_from_buffer(buffer, *lenp, ppos, tmpbuf, len); |
| + |
| + if (*lenp < 0) { |
| + *lenp = 0; |
| + return -EINVAL; |
| + } |
| + return 0; |
| } |
| |
| static int |