diff options
author | Marc Kleine-Budde <mkl@pengutronix.de> | 2016-12-05 05:44:23 -0500 |
---|---|---|
committer | Marc Kleine-Budde <mkl@pengutronix.de> | 2016-12-07 04:45:57 -0500 |
commit | 332b05ca7a438f857c61a3c21a88489a21532364 (patch) | |
tree | f30e326f3e623c103bc6e9735e7e958a90ecef20 /net/can/raw.c | |
parent | bc3913a5378cd0ddefd1dfec6917cc12eb23a946 (diff) |
can: raw: raw_setsockopt: limit number of can_filter that can be set
This patch adds a check to limit the number of can_filters that can be
set via setsockopt on CAN_RAW sockets. Otherwise allocations > MAX_ORDER
are not prevented resulting in a warning.
Reference: https://lkml.org/lkml/2016/12/2/230
Reported-by: Andrey Konovalov <andreyknvl@google.com>
Tested-by: Andrey Konovalov <andreyknvl@google.com>
Cc: linux-stable <stable@vger.kernel.org>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Diffstat (limited to 'net/can/raw.c')
-rw-r--r-- | net/can/raw.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/can/raw.c b/net/can/raw.c index 972c187d40ab..b075f028d7e2 100644 --- a/net/can/raw.c +++ b/net/can/raw.c | |||
@@ -499,6 +499,9 @@ static int raw_setsockopt(struct socket *sock, int level, int optname, | |||
499 | if (optlen % sizeof(struct can_filter) != 0) | 499 | if (optlen % sizeof(struct can_filter) != 0) |
500 | return -EINVAL; | 500 | return -EINVAL; |
501 | 501 | ||
502 | if (optlen > CAN_RAW_FILTER_MAX * sizeof(struct can_filter)) | ||
503 | return -EINVAL; | ||
504 | |||
502 | count = optlen / sizeof(struct can_filter); | 505 | count = optlen / sizeof(struct can_filter); |
503 | 506 | ||
504 | if (count > 1) { | 507 | if (count > 1) { |