Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

macintosh/adb: fix oob read in do_adb_query() function

In do_adb_query() function of drivers/macintosh/adb.c, req->data is copied
form userland. The parameter "req->data[2]" is missing check, the array
size of adb_handler[] is 16, so adb_handler[req->data[2]].original_address and
adb_handler[req->data[2]].handler_id will lead to oob read.

Cc: stable <stable@kernel.org>
Signed-off-by: Ning Qiang <sohu0106@126.com>
Reviewed-by: Kees Cook <keescook@chromium.org>
Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220713153734.2248-1-sohu0106@126.com

authored by

Ning Qiang and committed by
Michael Ellerman
fd97e4ad 69472ffa

+1 -1
+1 -1
drivers/macintosh/adb.c
··· 647 647 648 648 switch(req->data[1]) { 649 649 case ADB_QUERY_GETDEVINFO: 650 - if (req->nbytes < 3) 650 + if (req->nbytes < 3 || req->data[2] >= 16) 651 651 break; 652 652 mutex_lock(&adb_handler_mutex); 653 653 req->reply[0] = adb_handler[req->data[2]].original_address;