Reported by Marcus Meissner to the Kernel Bugzilla:
The dvd_read_bca() function in drivers/cdrom/cdrom.c shows a potential buffer
The variable buf[4+188] is allocated on the stack, however cgc.cmd and
cgc.buflen are set to 255:
cgc.cmd = cgc.buflen = 0xff;
This can be exploited by a custom made USB Storage device and used for local
privilege escalation (aka plug-in this USB device to get root).
This function has been introduced in 2.2.16 (back in 2000) and as of today it
hasn't changed. Jens Axboe confirmed that this is a typo and it should read:
cgc.cmd = cgc.buflen & 0xff;
It is to mask high bits of the length. It doesn't use the high 8 bits for
transfer length, since we are always < 256 for this case.
Created attachment 131920 [details]
Proposed patch from Jens Axboe
committed in stream E5 build 42.0.1. A test kernel with this patch is available
An advisory has been issued which should help the problem
described in this bug report. This report is therefore being
closed with a resolution of ERRATA. For more information
on the solution and/or where to find the updated files,
please follow the link below. You may reopen this bug report
if the solution does not work for you.
committed in stream U5 build 42.4. A test kernel with this patch is available