| From 99871fef18073addaf56f522afb3d38810a351ee Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 20 Jun 2021 14:38:42 +0200 |
| Subject: can: j1939: j1939_sk_setsockopt(): prevent allocation of j1939 filter |
| for optlen == 0 |
| |
| From: Norbert Slusarek <nslusarek@gmx.net> |
| |
| [ Upstream commit aaf473d0100f64abc88560e2bea905805bcf2a8e ] |
| |
| If optval != NULL and optlen == 0 are specified for SO_J1939_FILTER in |
| j1939_sk_setsockopt(), memdup_sockptr() will return ZERO_PTR for 0 |
| size allocation. The new filter will be mistakenly assigned ZERO_PTR. |
| This patch checks for optlen != 0 and filter will be assigned NULL in |
| case of optlen == 0. |
| |
| Fixes: 9d71dd0c7009 ("can: add support of SAE J1939 protocol") |
| Link: https://lore.kernel.org/r/20210620123842.117975-1-nslusarek@gmx.net |
| Signed-off-by: Norbert Slusarek <nslusarek@gmx.net> |
| Acked-by: Oleksij Rempel <o.rempel@pengutronix.de> |
| Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/can/j1939/socket.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/net/can/j1939/socket.c b/net/can/j1939/socket.c |
| index fce8bc8afeb7..e1a399821238 100644 |
| --- a/net/can/j1939/socket.c |
| +++ b/net/can/j1939/socket.c |
| @@ -676,7 +676,7 @@ static int j1939_sk_setsockopt(struct socket *sock, int level, int optname, |
| |
| switch (optname) { |
| case SO_J1939_FILTER: |
| - if (!sockptr_is_null(optval)) { |
| + if (!sockptr_is_null(optval) && optlen != 0) { |
| struct j1939_filter *f; |
| int c; |
| |
| -- |
| 2.30.2 |
| |