diff options
author | Artur Molchanov <arturmolchanov@gmail.com> | 2020-10-12 00:00:45 +0200 |
---|---|---|
committer | J. Bruce Fields <bfields@redhat.com> | 2020-10-16 21:15:04 +0200 |
commit | c09f56b8f68d4d536bff518227aea323b835b2ce (patch) | |
tree | b05a98a9aa0ce5677adaccaff73eeee9dd7b8960 | |
parent | NFSD: Encode a full READ_PLUS reply (diff) | |
download | linux-c09f56b8f68d4d536bff518227aea323b835b2ce.tar.xz linux-c09f56b8f68d4d536bff518227aea323b835b2ce.zip |
net/sunrpc: Fix return value for sysctl sunrpc.transports
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>
-rw-r--r-- | net/sunrpc/sysctl.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/net/sunrpc/sysctl.c b/net/sunrpc/sysctl.c index 999eee1ed61c..e81a28f30f1d 100644 --- a/net/sunrpc/sysctl.c +++ b/net/sunrpc/sysctl.c @@ -70,7 +70,13 @@ static int proc_do_xprt(struct ctl_table *table, int write, 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 |