If caller of bpf_setsockopt() is silly passing a negative optlen
bad things happen.

Fixes: 91b5b21c7c16 ("bpf: Add support for changing congestion control")
Signed-off-by: Eric Dumazet <eduma...@google.com>
Cc: Lawrence Brakmo <bra...@fb.com>
---
 net/core/filter.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/net/core/filter.c b/net/core/filter.c
index 
f7d0004fc16096eb42ece3a6acf645540ee2326b..6a5d89464168f2f35f43986c1dbc0446c9390a3c
 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -4194,8 +4194,9 @@ BPF_CALL_5(bpf_setsockopt, struct bpf_sock_ops_kern *, 
bpf_sock,
                        char name[TCP_CA_NAME_MAX];
                        bool reinit = bpf_sock->op > BPF_SOCK_OPS_NEEDS_ECN;
 
-                       strncpy(name, optval, min_t(long, optlen,
-                                                   TCP_CA_NAME_MAX-1));
+                       if (optlen < 0)
+                               return -EINVAL;
+                       strncpy(name, optval, min(optlen, TCP_CA_NAME_MAX - 1));
                        name[TCP_CA_NAME_MAX-1] = 0;
                        ret = tcp_set_congestion_control(sk, name, false,
                                                         reinit);
-- 
2.21.0.rc0.258.g878e2cd30e-goog

Reply via email to