Check bounds in offsetToPtr
Check whether specified offset belongs to mData. Also added a default argument bufferSize to check the end offset. Size of the ashmem descriptor can be modified between ashmem_get_size_region call and mmap. createFromParcel method was updated to check ashmem size again immediately after memory is mapped. Test: manual - using the test app from the bug Bug: 34128677 Change-Id: I3ecd1616a870ce20941ce9b20a1843d2b4295750
This commit is contained in:
@@ -98,9 +98,14 @@ status_t CursorWindow::createFromParcel(Parcel* parcel, CursorWindow** outCursor
|
||||
if (dupAshmemFd < 0) {
|
||||
result = -errno;
|
||||
} else {
|
||||
// the size of the ashmem descriptor can be modified between ashmem_get_size_region
|
||||
// call and mmap, so we'll check again immediately after memory is mapped
|
||||
void* data = ::mmap(NULL, size, PROT_READ, MAP_SHARED, dupAshmemFd, 0);
|
||||
if (data == MAP_FAILED) {
|
||||
result = -errno;
|
||||
} else if (ashmem_get_size_region(dupAshmemFd) != size) {
|
||||
::munmap(data, size);
|
||||
result = BAD_VALUE;
|
||||
} else {
|
||||
CursorWindow* window = new CursorWindow(name, dupAshmemFd,
|
||||
data, size, true /*readOnly*/);
|
||||
|
||||
Reference in New Issue
Block a user