summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Llamas <cmllamas@google.com>2024-03-30 19:01:14 +0000
committerLee Jones <joneslee@google.com>2024-04-18 15:40:20 +0100
commitd6cb479ae3b23260a138d8c6522060be94270394 (patch)
tree1604637674d78ad2e877cc75878a32c74cf4475a
parent8a96092804e08fb265d4d7a88c6967dd1a985248 (diff)
downloadcommon-deprecated/android13-5.15-2023-07.tar.gz
FROMLIST: binder: check offset alignment in binder_get_object()deprecated/android13-5.15-2023-07android13-5.15-2023-07
Commit 6d98eb95b450 ("binder: avoid potential data leakage when copying txn") introduced changes to how binder objects are copied. In doing so, it unintentionally removed an offset alignment check done through calls to binder_alloc_copy_from_buffer() -> check_buffer(). These calls were replaced in binder_get_object() with copy_from_user(), so now an explicit offset alignment check is needed here. This avoids later complications when unwinding the objects gets harder. It is worth noting this check existed prior to commit 7a67a39320df ("binder: add function to copy binder object from buffer"), likely removed due to redundancy at the time. Fixes: 6d98eb95b450 ("binder: avoid potential data leakage when copying txn") Cc: <stable@vger.kernel.org> Acked-by: Todd Kjos <tkjos@google.com> Signed-off-by: Carlos Llamas <cmllamas@google.com> Bug: 334156990 Bug: 320661088 Link: https://lore.kernel.org/all/20240330190115.1877819-1-cmllamas@google.com/ Signed-off-by: Carlos Llamas <cmllamas@google.com> (cherry picked from https://android-review.googlesource.com/q/commit:d76a750f6ffe72431a2c467e85a5ac69366287d1) Merged-In: Iaddabaa28de7ba7b7d35dbb639d38ca79dbc5077 Change-Id: Iaddabaa28de7ba7b7d35dbb639d38ca79dbc5077 (cherry picked from commit 0379ec545054248181a798ef46bb2acc3b71d570) Signed-off-by: Lee Jones <joneslee@google.com>
-rw-r--r--drivers/android/binder.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index 158330e0a1d8..c62561ffff3f 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -1859,8 +1859,10 @@ static size_t binder_get_object(struct binder_proc *proc,
size_t object_size = 0;
read_size = min_t(size_t, sizeof(*object), buffer->data_size - offset);
- if (offset > buffer->data_size || read_size < sizeof(*hdr))
+ if (offset > buffer->data_size || read_size < sizeof(*hdr) ||
+ !IS_ALIGNED(offset, sizeof(u32)))
return 0;
+
if (u) {
if (copy_from_user(object, u + offset, read_size))
return 0;