]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
rxrpc: Improve setsockopt() handling of malformed user input
authorMichal Luczaj <mhal@rbox.co>
Tue, 19 Nov 2024 13:31:42 +0000 (14:31 +0100)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 28 Nov 2024 07:57:42 +0000 (08:57 +0100)
copy_from_sockptr() does not return negative value on error; instead, it
reports the number of bytes that failed to copy. Since it's deprecated,
switch to copy_safe_from_sockptr().

Note: Keeping the `optlen != sizeof(unsigned int)` check as
copy_safe_from_sockptr() by itself would also accept
optlen > sizeof(unsigned int). Which would allow a more lenient handling
of inputs.

Fixes: 17926a79320a ("[AF_RXRPC]: Provide secure RxRPC sockets for use by userspace and kernel both")
Signed-off-by: Michal Luczaj <mhal@rbox.co>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
net/rxrpc/af_rxrpc.c

index f4844683e12039d636253cb06f622468593487eb..9d8bd0b37e41da9f99e2661ae4a29569f5eab650 100644 (file)
@@ -707,9 +707,10 @@ static int rxrpc_setsockopt(struct socket *sock, int level, int optname,
                        ret = -EISCONN;
                        if (rx->sk.sk_state != RXRPC_UNBOUND)
                                goto error;
-                       ret = copy_from_sockptr(&min_sec_level, optval,
-                                      sizeof(unsigned int));
-                       if (ret < 0)
+                       ret = copy_safe_from_sockptr(&min_sec_level,
+                                                    sizeof(min_sec_level),
+                                                    optval, optlen);
+                       if (ret)
                                goto error;
                        ret = -EINVAL;
                        if (min_sec_level > RXRPC_SECURITY_MAX)