|
|
Samsung seiren kernel driver buffer overflow | ||||
| Project Member Reported by hawkes@google.com, Jul 29 2015 | Back to list | ||||
The Exynos Seiren Audio driver has a device endpoint (/dev/seiren) that is accessible by either the system user or the audio group (such as the mediaserver). It was found that the write() implementation for this driver contains a buffer overflow vulnerability that overflow a static global buffer:
static ssize_t esa_write(struct file *file, const char *buffer,
size_t size, loff_t *pos)
{
struct esa_rtd *rtd = file->private_data;
unsigned char *ibuf;
…
ibuf = rtd->ibuf0;
...
/* receive stream data from user */
if (copy_from_user(ibuf, buffer, size)) {
esa_err("%s: failed to copy_from_user\n", __func__);
goto err;
}
Note that the user supplied buffer and size parameters are not adequately bounds checked. The destination buffer is fixed size, so memory corruption can occur. A simple proof-of-concept from a privileged shell can be used to trigger the issue (tested on a Samsung S6 Edge):
# dd if=/dev/zero of=/dev/seiren count=5000000
This bug is subject to a 90 day disclosure deadline. If 90 days elapse
without a broadly available patch, then the bug report will automatically
become visible to the public.
Project Member
Comment 1
by
scvitti@google.com,
Jul 30 2015
,
Oct 23 2015
,
Oct 27 2015
Fixed in October MR.
,
Oct 27 2015
,
Nov 13 2015
I want to ask you a question : How can I triggle the issue as a user without privilege? Is there any API that finally call that ioctl? I tried to find the way but failed . Thank you very much~
,
Nov 13 2015
oh ,not ioctl but this write... |
|||||
| ► Sign in to add a comment | |||||