mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-08 03:40:35 +09:00
UPSTREAM: binder: fix incorrect calculation for num_valid
commit1698174271upstream. For BINDER_TYPE_PTR and BINDER_TYPE_FDA transactions, the num_valid local was calculated incorrectly causing the range check in binder_validate_ptr() to miss out-of-bounds offsets. Fixes:bde4a19fc0("binder: use userspace pointer as base of buffer space") Change-Id: Ida77db13d8e5b726f0b14513f55c2b30277338cd Signed-off-by: Todd Kjos <tkjos@google.com> Cc: stable <stable@vger.kernel.org> Link: https://lore.kernel.org/r/20191213202531.55010-1-tkjos@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Bug: 145988638 Signed-off-by: Todd Kjos <tkjos@google.com>
This commit is contained in:
committed by
Alistair Delva
parent
f16d5ffd1b
commit
64b698c15a
@@ -3403,7 +3403,7 @@ static void binder_transaction(struct binder_proc *proc,
|
||||
binder_size_t parent_offset;
|
||||
struct binder_fd_array_object *fda =
|
||||
to_binder_fd_array_object(hdr);
|
||||
size_t num_valid = (buffer_offset - off_start_offset) *
|
||||
size_t num_valid = (buffer_offset - off_start_offset) /
|
||||
sizeof(binder_size_t);
|
||||
struct binder_buffer_object *parent =
|
||||
binder_validate_ptr(target_proc, t->buffer,
|
||||
@@ -3477,7 +3477,7 @@ static void binder_transaction(struct binder_proc *proc,
|
||||
t->buffer->user_data + sg_buf_offset;
|
||||
sg_buf_offset += ALIGN(bp->length, sizeof(u64));
|
||||
|
||||
num_valid = (buffer_offset - off_start_offset) *
|
||||
num_valid = (buffer_offset - off_start_offset) /
|
||||
sizeof(binder_size_t);
|
||||
ret = binder_fixup_parent(t, thread, bp,
|
||||
off_start_offset,
|
||||
|
||||
Reference in New Issue
Block a user