[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAGXu5jKoEB5AOVqkAnqq9SjGRU+qSgxdk2ZBWkwZxZOkK8Fn1A@mail.gmail.com>
Date: Tue, 31 Jul 2018 16:41:35 -0700
From: Kees Cook <keescook@...omium.org>
To: Mark Salyzyn <salyzyn@...roid.com>
Cc: LKML <linux-kernel@...r.kernel.org>,
Marcel Holtmann <marcel@...tmann.org>,
Johan Hedberg <johan.hedberg@...il.com>,
"David S. Miller" <davem@...emloft.net>,
Benjamin Tissoires <benjamin.tissoires@...hat.com>,
linux-bluetooth@...r.kernel.org,
Network Development <netdev@...r.kernel.org>,
Security Officers <security@...nel.org>,
Android Kernel Team <kernel-team@...roid.com>,
Jiri Kosina <jkosina@...e.cz>
Subject: Re: [PATCH] HID: Bluetooth: hidp: buffer overflow in hidp_process_report
On Tue, Jul 31, 2018 at 3:02 PM, Mark Salyzyn <salyzyn@...roid.com> wrote:
> CVE-2018-9363
>
> The buffer length is unsigned at all layers, but gets cast to int and
> checked in hidp_process_report and can lead to a buffer overflow.
> Switch len parameter to unsigned int to resolve issue.
>
> This affects 3.18 and newer kernels.
>
> Signed-off-by: Mark Salyzyn <salyzyn@...roid.com>
> Fixes: a4b1b5877b514b276f0f31efe02388a9c2836728 ("HID: Bluetooth: hidp: make sure input buffers are big enough")
nit: normally just first 12 of the sha is used.
> Cc: Marcel Holtmann <marcel@...tmann.org>
> Cc: Johan Hedberg <johan.hedberg@...il.com>
> Cc: "David S. Miller" <davem@...emloft.net>
> Cc: Kees Cook <keescook@...omium.org>
> Cc: Benjamin Tissoires <benjamin.tissoires@...hat.com>
> Cc: linux-bluetooth@...r.kernel.org
> Cc: netdev@...r.kernel.org
> Cc: linux-kernel@...r.kernel.org
> Cc: security@...nel.org
> Cc: kernel-team@...roid.com
> ---
> net/bluetooth/hidp/core.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/net/bluetooth/hidp/core.c b/net/bluetooth/hidp/core.c
> index 1036e4fa1ea2..3bba8f4b08a9 100644
> --- a/net/bluetooth/hidp/core.c
> +++ b/net/bluetooth/hidp/core.c
> @@ -431,8 +431,8 @@ static void hidp_del_timer(struct hidp_session *session)
> del_timer(&session->timer);
> }
>
> -static void hidp_process_report(struct hidp_session *session,
> - int type, const u8 *data, int len, int intr)
> +static void hidp_process_report(struct hidp_session *session, int type,
> + const u8 *data, unsigned int len, int intr)
> {
> if (len > HID_MAX_BUFFER_SIZE)
> len = HID_MAX_BUFFER_SIZE;
Acked-by: Kees Cook <keescook@...omium.org>
Thanks!
-Kees
--
Kees Cook
Pixel Security
Powered by blists - more mailing lists