* [PATCH v2 01/28] binder: use EPOLLERR from eventpoll.h
[not found] <20231201172212.1813387-1-cmllamas@google.com>
@ 2023-12-01 17:21 ` Carlos Llamas
2023-12-01 17:21 ` [PATCH v2 02/28] binder: fix use-after-free in shinker's callback Carlos Llamas
` (5 subsequent siblings)
6 siblings, 0 replies; 21+ messages in thread
From: Carlos Llamas @ 2023-12-01 17:21 UTC (permalink / raw)
To: Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Martijn Coenen, Joel Fernandes, Christian Brauner, Carlos Llamas,
Suren Baghdasaryan, Eric Biggers
Cc: linux-kernel, kernel-team, stable, Alice Ryhl
Use EPOLLERR instead of POLLERR to make sure it is cast to the correct
__poll_t type. This fixes the following sparse issue:
drivers/android/binder.c:5030:24: warning: incorrect type in return expression (different base types)
drivers/android/binder.c:5030:24: expected restricted __poll_t
drivers/android/binder.c:5030:24: got int
Fixes: f88982679f54 ("binder: check for binder_thread allocation failure in binder_poll()")
Cc: stable@vger.kernel.org
Cc: Eric Biggers <ebiggers@google.com>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Signed-off-by: Carlos Llamas <cmllamas@google.com>
---
drivers/android/binder.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/android/binder.c b/drivers/android/binder.c
index 92128aae2d06..71a40a4c546f 100644
--- a/drivers/android/binder.c
+++ b/drivers/android/binder.c
@@ -5030,7 +5030,7 @@ static __poll_t binder_poll(struct file *filp,
thread = binder_get_thread(proc);
if (!thread)
- return POLLERR;
+ return EPOLLERR;
binder_inner_proc_lock(thread->proc);
thread->looper |= BINDER_LOOPER_STATE_POLL;
--
2.43.0.rc2.451.g8631bc7472-goog
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 02/28] binder: fix use-after-free in shinker's callback
[not found] <20231201172212.1813387-1-cmllamas@google.com>
2023-12-01 17:21 ` [PATCH v2 01/28] binder: use EPOLLERR from eventpoll.h Carlos Llamas
@ 2023-12-01 17:21 ` Carlos Llamas
2023-12-01 17:21 ` [PATCH v2 06/28] binder: fix trivial typo of binder_free_buf_locked() Carlos Llamas
` (4 subsequent siblings)
6 siblings, 0 replies; 21+ messages in thread
From: Carlos Llamas @ 2023-12-01 17:21 UTC (permalink / raw)
To: Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Martijn Coenen, Joel Fernandes, Christian Brauner, Carlos Llamas,
Suren Baghdasaryan, Michal Hocko, Andrew Morton, Matthew Wilcox,
Vlastimil Babka, Kirill A. Shutemov
Cc: linux-kernel, kernel-team, stable, Liam Howlett, Minchan Kim,
Alice Ryhl
The mmap read lock is used during the shrinker's callback, which means
that using alloc->vma pointer isn't safe as it can race with munmap().
As of commit dd2283f2605e ("mm: mmap: zap pages with read mmap_sem in
munmap") the mmap lock is downgraded after the vma has been isolated.
I was able to reproduce this issue by manually adding some delays and
triggering page reclaiming through the shrinker's debug sysfs. The
following KASAN report confirms the UAF:
==================================================================
BUG: KASAN: slab-use-after-free in zap_page_range_single+0x470/0x4b8
Read of size 8 at addr ffff356ed50e50f0 by task bash/478
CPU: 1 PID: 478 Comm: bash Not tainted 6.6.0-rc5-00055-g1c8b86a3799f-dirty #70
Hardware name: linux,dummy-virt (DT)
Call trace:
zap_page_range_single+0x470/0x4b8
binder_alloc_free_page+0x608/0xadc
__list_lru_walk_one+0x130/0x3b0
list_lru_walk_node+0xc4/0x22c
binder_shrink_scan+0x108/0x1dc
shrinker_debugfs_scan_write+0x2b4/0x500
full_proxy_write+0xd4/0x140
vfs_write+0x1ac/0x758
ksys_write+0xf0/0x1dc
__arm64_sys_write+0x6c/0x9c
Allocated by task 492:
kmem_cache_alloc+0x130/0x368
vm_area_alloc+0x2c/0x190
mmap_region+0x258/0x18bc
do_mmap+0x694/0xa60
vm_mmap_pgoff+0x170/0x29c
ksys_mmap_pgoff+0x290/0x3a0
__arm64_sys_mmap+0xcc/0x144
Freed by task 491:
kmem_cache_free+0x17c/0x3c8
vm_area_free_rcu_cb+0x74/0x98
rcu_core+0xa38/0x26d4
rcu_core_si+0x10/0x1c
__do_softirq+0x2fc/0xd24
Last potentially related work creation:
__call_rcu_common.constprop.0+0x6c/0xba0
call_rcu+0x10/0x1c
vm_area_free+0x18/0x24
remove_vma+0xe4/0x118
do_vmi_align_munmap.isra.0+0x718/0xb5c
do_vmi_munmap+0xdc/0x1fc
__vm_munmap+0x10c/0x278
__arm64_sys_munmap+0x58/0x7c
Fix this issue by performing instead a vma_lookup() which will fail to
find the vma that was isolated before the mmap lock downgrade. Note that
this option has better performance than upgrading to a mmap write lock
which would increase contention. Plus, mmap_write_trylock() has been
recently removed anyway.
Fixes: dd2283f2605e ("mm: mmap: zap pages with read mmap_sem in munmap")
Cc: stable@vger.kernel.org
Cc: Liam Howlett <liam.howlett@oracle.com>
Cc: Minchan Kim <minchan@kernel.org>
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Signed-off-by: Carlos Llamas <cmllamas@google.com>
---
drivers/android/binder_alloc.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c
index 138f6d43d13b..9d2eff70c3ba 100644
--- a/drivers/android/binder_alloc.c
+++ b/drivers/android/binder_alloc.c
@@ -1005,7 +1005,9 @@ enum lru_status binder_alloc_free_page(struct list_head *item,
goto err_mmget;
if (!mmap_read_trylock(mm))
goto err_mmap_read_lock_failed;
- vma = binder_alloc_get_vma(alloc);
+ vma = vma_lookup(mm, page_addr);
+ if (vma && vma != binder_alloc_get_vma(alloc))
+ goto err_invalid_vma;
list_lru_isolate(lru, item);
spin_unlock(lock);
@@ -1031,6 +1033,8 @@ enum lru_status binder_alloc_free_page(struct list_head *item,
mutex_unlock(&alloc->mutex);
return LRU_REMOVED_RETRY;
+err_invalid_vma:
+ mmap_read_unlock(mm);
err_mmap_read_lock_failed:
mmput_async(mm);
err_mmget:
--
2.43.0.rc2.451.g8631bc7472-goog
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 06/28] binder: fix trivial typo of binder_free_buf_locked()
[not found] <20231201172212.1813387-1-cmllamas@google.com>
2023-12-01 17:21 ` [PATCH v2 01/28] binder: use EPOLLERR from eventpoll.h Carlos Llamas
2023-12-01 17:21 ` [PATCH v2 02/28] binder: fix use-after-free in shinker's callback Carlos Llamas
@ 2023-12-01 17:21 ` Carlos Llamas
2023-12-01 17:21 ` [PATCH v2 07/28] binder: fix comment on binder_alloc_new_buf() return value Carlos Llamas
` (3 subsequent siblings)
6 siblings, 0 replies; 21+ messages in thread
From: Carlos Llamas @ 2023-12-01 17:21 UTC (permalink / raw)
To: Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Martijn Coenen, Joel Fernandes, Christian Brauner, Carlos Llamas,
Suren Baghdasaryan
Cc: linux-kernel, kernel-team, stable, Alice Ryhl, Todd Kjos
Fix minor misspelling of the function in the comment section.
No functional changes in this patch.
Cc: stable@vger.kernel.org
Fixes: 0f966cba95c7 ("binder: add flag to clear buffer on txn complete")
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Signed-off-by: Carlos Llamas <cmllamas@google.com>
---
drivers/android/binder_alloc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c
index 9b5c4d446efa..a124d2743c69 100644
--- a/drivers/android/binder_alloc.c
+++ b/drivers/android/binder_alloc.c
@@ -704,7 +704,7 @@ void binder_alloc_free_buf(struct binder_alloc *alloc,
/*
* We could eliminate the call to binder_alloc_clear_buf()
* from binder_alloc_deferred_release() by moving this to
- * binder_alloc_free_buf_locked(). However, that could
+ * binder_free_buf_locked(). However, that could
* increase contention for the alloc mutex if clear_on_free
* is used frequently for large buffers. The mutex is not
* needed for correctness here.
--
2.43.0.rc2.451.g8631bc7472-goog
^ permalink raw reply related [flat|nested] 21+ messages in thread
* [PATCH v2 07/28] binder: fix comment on binder_alloc_new_buf() return value
[not found] <20231201172212.1813387-1-cmllamas@google.com>
` (2 preceding siblings ...)
2023-12-01 17:21 ` [PATCH v2 06/28] binder: fix trivial typo of binder_free_buf_locked() Carlos Llamas
@ 2023-12-01 17:21 ` Carlos Llamas
[not found] ` <20231201172212.1813387-4-cmllamas@google.com>
` (2 subsequent siblings)
6 siblings, 0 replies; 21+ messages in thread
From: Carlos Llamas @ 2023-12-01 17:21 UTC (permalink / raw)
To: Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Martijn Coenen, Joel Fernandes, Christian Brauner, Carlos Llamas,
Suren Baghdasaryan
Cc: linux-kernel, kernel-team, stable, Alice Ryhl
Update the comments of binder_alloc_new_buf() to reflect that the return
value of the function is now ERR_PTR(-errno) on failure.
No functional changes in this patch.
Cc: stable@vger.kernel.org
Fixes: 57ada2fb2250 ("binder: add log information for binder transaction failures")
Reviewed-by: Alice Ryhl <aliceryhl@google.com>
Signed-off-by: Carlos Llamas <cmllamas@google.com>
---
drivers/android/binder_alloc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/android/binder_alloc.c b/drivers/android/binder_alloc.c
index a124d2743c69..a56cbfd9ba44 100644
--- a/drivers/android/binder_alloc.c
+++ b/drivers/android/binder_alloc.c
@@ -556,7 +556,7 @@ static struct binder_buffer *binder_alloc_new_buf_locked(
* is the sum of the three given sizes (each rounded up to
* pointer-sized boundary)
*
- * Return: The allocated buffer or %NULL if error
+ * Return: The allocated buffer or %ERR_PTR(-errno) if error
*/
struct binder_buffer *binder_alloc_new_buf(struct binder_alloc *alloc,
size_t data_size,
--
2.43.0.rc2.451.g8631bc7472-goog
^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH v2 03/28] binder: fix race between mmput() and do_exit()
[not found] ` <20231201172212.1813387-4-cmllamas@google.com>
@ 2024-01-18 19:29 ` Carlos Llamas
2024-01-19 5:48 ` Greg Kroah-Hartman
0 siblings, 1 reply; 21+ messages in thread
From: Carlos Llamas @ 2024-01-18 19:29 UTC (permalink / raw)
To: Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Martijn Coenen, Joel Fernandes, Christian Brauner,
Suren Baghdasaryan, Brian Swetland
Cc: linux-kernel, kernel-team, Alice Ryhl, Greg Kroah-Hartman, stable
On Fri, Dec 01, 2023 at 05:21:32PM +0000, Carlos Llamas wrote:
> Task A calls binder_update_page_range() to allocate and insert pages on
> a remote address space from Task B. For this, Task A pins the remote mm
> via mmget_not_zero() first. This can race with Task B do_exit() and the
> final mmput() refcount decrement will come from Task A.
>
> Task A | Task B
> ------------------+------------------
> mmget_not_zero() |
> | do_exit()
> | exit_mm()
> | mmput()
> mmput() |
> exit_mmap() |
> remove_vma() |
> fput() |
>
> In this case, the work of ____fput() from Task B is queued up in Task A
> as TWA_RESUME. So in theory, Task A returns to userspace and the cleanup
> work gets executed. However, Task A instead sleep, waiting for a reply
> from Task B that never comes (it's dead).
>
> This means the binder_deferred_release() is blocked until an unrelated
> binder event forces Task A to go back to userspace. All the associated
> death notifications will also be delayed until then.
>
> In order to fix this use mmput_async() that will schedule the work in
> the corresponding mm->async_put_work WQ instead of Task A.
>
> Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
> Reviewed-by: Alice Ryhl <aliceryhl@google.com>
> Signed-off-by: Carlos Llamas <cmllamas@google.com>
> ---
Sorry, I forgot to Cc: stable@vger.kernel.org.
--
Carlos Llamas
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 04/28] binder: fix async space check for 0-sized buffers
[not found] ` <20231201172212.1813387-5-cmllamas@google.com>
@ 2024-01-18 19:32 ` Carlos Llamas
2024-01-19 5:48 ` Greg Kroah-Hartman
0 siblings, 1 reply; 21+ messages in thread
From: Carlos Llamas @ 2024-01-18 19:32 UTC (permalink / raw)
To: Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Martijn Coenen, Joel Fernandes, Christian Brauner,
Suren Baghdasaryan, Sherry Yang
Cc: linux-kernel, kernel-team, Alice Ryhl, stable
On Fri, Dec 01, 2023 at 05:21:33PM +0000, Carlos Llamas wrote:
> Move the padding of 0-sized buffers to an earlier stage to account for
> this round up during the alloc->free_async_space check.
>
> Fixes: 74310e06be4d ("android: binder: Move buffer out of area shared with user space")
> Reviewed-by: Alice Ryhl <aliceryhl@google.com>
> Signed-off-by: Carlos Llamas <cmllamas@google.com>
> ---
Sorry, I forgot to Cc: stable@vger.kernel.org.
--
Carlos Llamas
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 05/28] binder: fix unused alloc->free_async_space
[not found] ` <20231201172212.1813387-6-cmllamas@google.com>
@ 2024-01-18 19:33 ` Carlos Llamas
2024-01-19 5:49 ` Greg Kroah-Hartman
0 siblings, 1 reply; 21+ messages in thread
From: Carlos Llamas @ 2024-01-18 19:33 UTC (permalink / raw)
To: Greg Kroah-Hartman, Arve Hjønnevåg, Todd Kjos,
Martijn Coenen, Joel Fernandes, Christian Brauner,
Suren Baghdasaryan, Sherry Yang
Cc: linux-kernel, kernel-team, stable
On Fri, Dec 01, 2023 at 05:21:34PM +0000, Carlos Llamas wrote:
> Each transaction is associated with a 'struct binder_buffer' that stores
> the metadata about its buffer area. Since commit 74310e06be4d ("android:
> binder: Move buffer out of area shared with user space") this struct is
> no longer embedded within the buffer itself but is instead allocated on
> the heap to prevent userspace access to this driver-exclusive info.
>
> Unfortunately, the space of this struct is still being accounted for in
> the total buffer size calculation, specifically for async transactions.
> This results in an additional 104 bytes added to every async buffer
> request, and this area is never used.
>
> This wasted space can be substantial. If we consider the maximum mmap
> buffer space of SZ_4M, the driver will reserve half of it for async
> transactions, or 0x200000. This area should, in theory, accommodate up
> to 262,144 buffers of the minimum 8-byte size. However, after adding
> the extra 'sizeof(struct binder_buffer)', the total number of buffers
> drops to only 18,724, which is a sad 7.14% of the actual capacity.
>
> This patch fixes the buffer size calculation to enable the utilization
> of the entire async buffer space. This is expected to reduce the number
> of -ENOSPC errors that are seen on the field.
>
> Fixes: 74310e06be4d ("android: binder: Move buffer out of area shared with user space")
> Signed-off-by: Carlos Llamas <cmllamas@google.com>
> ---
Sorry, I forgot to Cc: stable@vger.kernel.org.
--
Carlos Llamas
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 03/28] binder: fix race between mmput() and do_exit()
2024-01-18 19:29 ` [PATCH v2 03/28] binder: fix race between mmput() and do_exit() Carlos Llamas
@ 2024-01-19 5:48 ` Greg Kroah-Hartman
2024-01-19 17:06 ` Carlos Llamas
0 siblings, 1 reply; 21+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-19 5:48 UTC (permalink / raw)
To: Carlos Llamas
Cc: Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
Joel Fernandes, Christian Brauner, Suren Baghdasaryan,
Brian Swetland, linux-kernel, kernel-team, Alice Ryhl,
Greg Kroah-Hartman, stable
On Thu, Jan 18, 2024 at 07:29:07PM +0000, Carlos Llamas wrote:
> On Fri, Dec 01, 2023 at 05:21:32PM +0000, Carlos Llamas wrote:
> > Task A calls binder_update_page_range() to allocate and insert pages on
> > a remote address space from Task B. For this, Task A pins the remote mm
> > via mmget_not_zero() first. This can race with Task B do_exit() and the
> > final mmput() refcount decrement will come from Task A.
> >
> > Task A | Task B
> > ------------------+------------------
> > mmget_not_zero() |
> > | do_exit()
> > | exit_mm()
> > | mmput()
> > mmput() |
> > exit_mmap() |
> > remove_vma() |
> > fput() |
> >
> > In this case, the work of ____fput() from Task B is queued up in Task A
> > as TWA_RESUME. So in theory, Task A returns to userspace and the cleanup
> > work gets executed. However, Task A instead sleep, waiting for a reply
> > from Task B that never comes (it's dead).
> >
> > This means the binder_deferred_release() is blocked until an unrelated
> > binder event forces Task A to go back to userspace. All the associated
> > death notifications will also be delayed until then.
> >
> > In order to fix this use mmput_async() that will schedule the work in
> > the corresponding mm->async_put_work WQ instead of Task A.
> >
> > Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
> > Reviewed-by: Alice Ryhl <aliceryhl@google.com>
> > Signed-off-by: Carlos Llamas <cmllamas@google.com>
> > ---
>
> Sorry, I forgot to Cc: stable@vger.kernel.org.
<formletter>
This is not the correct way to submit patches for inclusion in the
stable kernel tree. Please read:
https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
for how to do this properly.
</formletter>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 04/28] binder: fix async space check for 0-sized buffers
2024-01-18 19:32 ` [PATCH v2 04/28] binder: fix async space check for 0-sized buffers Carlos Llamas
@ 2024-01-19 5:48 ` Greg Kroah-Hartman
2024-01-19 17:11 ` Carlos Llamas
0 siblings, 1 reply; 21+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-19 5:48 UTC (permalink / raw)
To: Carlos Llamas
Cc: Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
Joel Fernandes, Christian Brauner, Suren Baghdasaryan,
Sherry Yang, linux-kernel, kernel-team, Alice Ryhl, stable
On Thu, Jan 18, 2024 at 07:32:08PM +0000, Carlos Llamas wrote:
> On Fri, Dec 01, 2023 at 05:21:33PM +0000, Carlos Llamas wrote:
> > Move the padding of 0-sized buffers to an earlier stage to account for
> > this round up during the alloc->free_async_space check.
> >
> > Fixes: 74310e06be4d ("android: binder: Move buffer out of area shared with user space")
> > Reviewed-by: Alice Ryhl <aliceryhl@google.com>
> > Signed-off-by: Carlos Llamas <cmllamas@google.com>
> > ---
>
> Sorry, I forgot to Cc: stable@vger.kernel.org.
<formletter>
This is not the correct way to submit patches for inclusion in the
stable kernel tree. Please read:
https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
for how to do this properly.
</formletter>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 05/28] binder: fix unused alloc->free_async_space
2024-01-18 19:33 ` [PATCH v2 05/28] binder: fix unused alloc->free_async_space Carlos Llamas
@ 2024-01-19 5:49 ` Greg Kroah-Hartman
2024-01-19 17:27 ` Carlos Llamas
0 siblings, 1 reply; 21+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-19 5:49 UTC (permalink / raw)
To: Carlos Llamas
Cc: Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
Joel Fernandes, Christian Brauner, Suren Baghdasaryan,
Sherry Yang, linux-kernel, kernel-team, stable
On Thu, Jan 18, 2024 at 07:33:48PM +0000, Carlos Llamas wrote:
> On Fri, Dec 01, 2023 at 05:21:34PM +0000, Carlos Llamas wrote:
> > Each transaction is associated with a 'struct binder_buffer' that stores
> > the metadata about its buffer area. Since commit 74310e06be4d ("android:
> > binder: Move buffer out of area shared with user space") this struct is
> > no longer embedded within the buffer itself but is instead allocated on
> > the heap to prevent userspace access to this driver-exclusive info.
> >
> > Unfortunately, the space of this struct is still being accounted for in
> > the total buffer size calculation, specifically for async transactions.
> > This results in an additional 104 bytes added to every async buffer
> > request, and this area is never used.
> >
> > This wasted space can be substantial. If we consider the maximum mmap
> > buffer space of SZ_4M, the driver will reserve half of it for async
> > transactions, or 0x200000. This area should, in theory, accommodate up
> > to 262,144 buffers of the minimum 8-byte size. However, after adding
> > the extra 'sizeof(struct binder_buffer)', the total number of buffers
> > drops to only 18,724, which is a sad 7.14% of the actual capacity.
> >
> > This patch fixes the buffer size calculation to enable the utilization
> > of the entire async buffer space. This is expected to reduce the number
> > of -ENOSPC errors that are seen on the field.
> >
> > Fixes: 74310e06be4d ("android: binder: Move buffer out of area shared with user space")
> > Signed-off-by: Carlos Llamas <cmllamas@google.com>
> > ---
>
> Sorry, I forgot to Cc: stable@vger.kernel.org.
<formletter>
This is not the correct way to submit patches for inclusion in the
stable kernel tree. Please read:
https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
for how to do this properly.
</formletter>
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 03/28] binder: fix race between mmput() and do_exit()
2024-01-19 5:48 ` Greg Kroah-Hartman
@ 2024-01-19 17:06 ` Carlos Llamas
2024-01-19 17:37 ` Carlos Llamas
0 siblings, 1 reply; 21+ messages in thread
From: Carlos Llamas @ 2024-01-19 17:06 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
Joel Fernandes, Christian Brauner, Suren Baghdasaryan,
Brian Swetland, linux-kernel, kernel-team, Alice Ryhl,
Greg Kroah-Hartman, stable
On Fri, Jan 19, 2024 at 06:48:43AM +0100, Greg Kroah-Hartman wrote:
> On Thu, Jan 18, 2024 at 07:29:07PM +0000, Carlos Llamas wrote:
> > On Fri, Dec 01, 2023 at 05:21:32PM +0000, Carlos Llamas wrote:
> > > Task A calls binder_update_page_range() to allocate and insert pages on
> > > a remote address space from Task B. For this, Task A pins the remote mm
> > > via mmget_not_zero() first. This can race with Task B do_exit() and the
> > > final mmput() refcount decrement will come from Task A.
> > >
> > > Task A | Task B
> > > ------------------+------------------
> > > mmget_not_zero() |
> > > | do_exit()
> > > | exit_mm()
> > > | mmput()
> > > mmput() |
> > > exit_mmap() |
> > > remove_vma() |
> > > fput() |
> > >
> > > In this case, the work of ____fput() from Task B is queued up in Task A
> > > as TWA_RESUME. So in theory, Task A returns to userspace and the cleanup
> > > work gets executed. However, Task A instead sleep, waiting for a reply
> > > from Task B that never comes (it's dead).
> > >
> > > This means the binder_deferred_release() is blocked until an unrelated
> > > binder event forces Task A to go back to userspace. All the associated
> > > death notifications will also be delayed until then.
> > >
> > > In order to fix this use mmput_async() that will schedule the work in
> > > the corresponding mm->async_put_work WQ instead of Task A.
> > >
> > > Fixes: 457b9a6f09f0 ("Staging: android: add binder driver")
> > > Reviewed-by: Alice Ryhl <aliceryhl@google.com>
> > > Signed-off-by: Carlos Llamas <cmllamas@google.com>
> > > ---
> >
> > Sorry, I forgot to Cc: stable@vger.kernel.org.
>
> <formletter>
>
> This is not the correct way to submit patches for inclusion in the
> stable kernel tree. Please read:
> https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
> for how to do this properly.
>
> </formletter>
Oops, here is the complete info:
Commit ID: 9a9ab0d963621d9d12199df9817e66982582d5a5
Subject: "binder: fix race between mmput() and do_exit()"
Reason: Fixes a race condition in binder.
Versions: v4.19+
Note this will have a trivial conflict in v4.19 and v5.10 kernels as
commit d8ed45c5dcd4 is not there. Please let me know if I should send
those patches separately.
Thanks,
--
Carlos Llamas
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 04/28] binder: fix async space check for 0-sized buffers
2024-01-19 5:48 ` Greg Kroah-Hartman
@ 2024-01-19 17:11 ` Carlos Llamas
2024-01-22 15:05 ` Greg Kroah-Hartman
0 siblings, 1 reply; 21+ messages in thread
From: Carlos Llamas @ 2024-01-19 17:11 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
Joel Fernandes, Christian Brauner, Suren Baghdasaryan,
Sherry Yang, linux-kernel, kernel-team, Alice Ryhl, stable
On Fri, Jan 19, 2024 at 06:48:53AM +0100, Greg Kroah-Hartman wrote:
> On Thu, Jan 18, 2024 at 07:32:08PM +0000, Carlos Llamas wrote:
> > On Fri, Dec 01, 2023 at 05:21:33PM +0000, Carlos Llamas wrote:
> > > Move the padding of 0-sized buffers to an earlier stage to account for
> > > this round up during the alloc->free_async_space check.
> > >
> > > Fixes: 74310e06be4d ("android: binder: Move buffer out of area shared with user space")
> > > Reviewed-by: Alice Ryhl <aliceryhl@google.com>
> > > Signed-off-by: Carlos Llamas <cmllamas@google.com>
> > > ---
> >
> > Sorry, I forgot to Cc: stable@vger.kernel.org.
>
>
> <formletter>
>
> This is not the correct way to submit patches for inclusion in the
> stable kernel tree. Please read:
> https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
> for how to do this properly.
>
> </formletter>
Oops, here is the complete info:
Commit ID: 3091c21d3e9322428691ce0b7a0cfa9c0b239eeb
Subject: "binder: fix async space check for 0-sized buffers"
Reason: Fixes an incorrect calculation of available space.
Versions: v4.19+
Thanks,
--
Carlos Llamas
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 05/28] binder: fix unused alloc->free_async_space
2024-01-19 5:49 ` Greg Kroah-Hartman
@ 2024-01-19 17:27 ` Carlos Llamas
2024-01-22 15:04 ` Greg Kroah-Hartman
0 siblings, 1 reply; 21+ messages in thread
From: Carlos Llamas @ 2024-01-19 17:27 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
Joel Fernandes, Christian Brauner, Suren Baghdasaryan,
Sherry Yang, linux-kernel, kernel-team, stable
On Fri, Jan 19, 2024 at 06:49:00AM +0100, Greg Kroah-Hartman wrote:
> On Thu, Jan 18, 2024 at 07:33:48PM +0000, Carlos Llamas wrote:
> > On Fri, Dec 01, 2023 at 05:21:34PM +0000, Carlos Llamas wrote:
> > > Each transaction is associated with a 'struct binder_buffer' that stores
> > > the metadata about its buffer area. Since commit 74310e06be4d ("android:
> > > binder: Move buffer out of area shared with user space") this struct is
> > > no longer embedded within the buffer itself but is instead allocated on
> > > the heap to prevent userspace access to this driver-exclusive info.
> > >
> > > Unfortunately, the space of this struct is still being accounted for in
> > > the total buffer size calculation, specifically for async transactions.
> > > This results in an additional 104 bytes added to every async buffer
> > > request, and this area is never used.
> > >
> > > This wasted space can be substantial. If we consider the maximum mmap
> > > buffer space of SZ_4M, the driver will reserve half of it for async
> > > transactions, or 0x200000. This area should, in theory, accommodate up
> > > to 262,144 buffers of the minimum 8-byte size. However, after adding
> > > the extra 'sizeof(struct binder_buffer)', the total number of buffers
> > > drops to only 18,724, which is a sad 7.14% of the actual capacity.
> > >
> > > This patch fixes the buffer size calculation to enable the utilization
> > > of the entire async buffer space. This is expected to reduce the number
> > > of -ENOSPC errors that are seen on the field.
> > >
> > > Fixes: 74310e06be4d ("android: binder: Move buffer out of area shared with user space")
> > > Signed-off-by: Carlos Llamas <cmllamas@google.com>
> > > ---
> >
> > Sorry, I forgot to Cc: stable@vger.kernel.org.
>
>
> <formletter>
>
> This is not the correct way to submit patches for inclusion in the
> stable kernel tree. Please read:
> https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
> for how to do this properly.
>
> </formletter>
Oops, here is the complete info:
Commit ID: c6d05e0762ab276102246d24affd1e116a46aa0c
Subject: "binder: fix unused alloc->free_async_space"
Reason: Fixes an incorrect calculation of available space.
Versions: v4.19+
Note this patch will also have trivial conflicts in v4.19 and v5.4
kernels as commit 261e7818f06e is missing there. Please let me know and
I can send the corresponding patches separately.
Thanks,
--
Carlos Llamas
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 03/28] binder: fix race between mmput() and do_exit()
2024-01-19 17:06 ` Carlos Llamas
@ 2024-01-19 17:37 ` Carlos Llamas
2024-01-20 6:37 ` Greg Kroah-Hartman
0 siblings, 1 reply; 21+ messages in thread
From: Carlos Llamas @ 2024-01-19 17:37 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
Joel Fernandes, Christian Brauner, Suren Baghdasaryan,
linux-kernel, kernel-team, Alice Ryhl, stable
On Fri, Jan 19, 2024 at 05:06:13PM +0000, Carlos Llamas wrote:
>
> Oops, here is the complete info:
>
> Commit ID: 9a9ab0d963621d9d12199df9817e66982582d5a5
> Subject: "binder: fix race between mmput() and do_exit()"
> Reason: Fixes a race condition in binder.
> Versions: v4.19+
>
> Note this will have a trivial conflict in v4.19 and v5.10 kernels as
> commit d8ed45c5dcd4 is not there. Please let me know if I should send
> those patches separately.
>
> Thanks,
> --
> Carlos Llamas
Sigh, I meant to type "conflict in v4.19 and v5.4". The patch applies
cleanly in v5.10+.
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 03/28] binder: fix race between mmput() and do_exit()
2024-01-19 17:37 ` Carlos Llamas
@ 2024-01-20 6:37 ` Greg Kroah-Hartman
2024-01-22 18:05 ` Carlos Llamas
0 siblings, 1 reply; 21+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-20 6:37 UTC (permalink / raw)
To: Carlos Llamas
Cc: Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
Joel Fernandes, Christian Brauner, Suren Baghdasaryan,
linux-kernel, kernel-team, Alice Ryhl, stable
On Fri, Jan 19, 2024 at 05:37:22PM +0000, Carlos Llamas wrote:
> On Fri, Jan 19, 2024 at 05:06:13PM +0000, Carlos Llamas wrote:
> >
> > Oops, here is the complete info:
> >
> > Commit ID: 9a9ab0d963621d9d12199df9817e66982582d5a5
> > Subject: "binder: fix race between mmput() and do_exit()"
> > Reason: Fixes a race condition in binder.
> > Versions: v4.19+
> >
> > Note this will have a trivial conflict in v4.19 and v5.10 kernels as
> > commit d8ed45c5dcd4 is not there. Please let me know if I should send
> > those patches separately.
> >
> > Thanks,
> > --
> > Carlos Llamas
>
> Sigh, I meant to type "conflict in v4.19 and v5.4". The patch applies
> cleanly in v5.10+.
Yes, I need backported patches please.
thanks,
greg k-h
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 05/28] binder: fix unused alloc->free_async_space
2024-01-19 17:27 ` Carlos Llamas
@ 2024-01-22 15:04 ` Greg Kroah-Hartman
2024-01-22 15:05 ` Greg Kroah-Hartman
0 siblings, 1 reply; 21+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-22 15:04 UTC (permalink / raw)
To: Carlos Llamas
Cc: Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
Joel Fernandes, Christian Brauner, Suren Baghdasaryan,
Sherry Yang, linux-kernel, kernel-team, stable
On Fri, Jan 19, 2024 at 05:27:18PM +0000, Carlos Llamas wrote:
> On Fri, Jan 19, 2024 at 06:49:00AM +0100, Greg Kroah-Hartman wrote:
> > On Thu, Jan 18, 2024 at 07:33:48PM +0000, Carlos Llamas wrote:
> > > On Fri, Dec 01, 2023 at 05:21:34PM +0000, Carlos Llamas wrote:
> > > > Each transaction is associated with a 'struct binder_buffer' that stores
> > > > the metadata about its buffer area. Since commit 74310e06be4d ("android:
> > > > binder: Move buffer out of area shared with user space") this struct is
> > > > no longer embedded within the buffer itself but is instead allocated on
> > > > the heap to prevent userspace access to this driver-exclusive info.
> > > >
> > > > Unfortunately, the space of this struct is still being accounted for in
> > > > the total buffer size calculation, specifically for async transactions.
> > > > This results in an additional 104 bytes added to every async buffer
> > > > request, and this area is never used.
> > > >
> > > > This wasted space can be substantial. If we consider the maximum mmap
> > > > buffer space of SZ_4M, the driver will reserve half of it for async
> > > > transactions, or 0x200000. This area should, in theory, accommodate up
> > > > to 262,144 buffers of the minimum 8-byte size. However, after adding
> > > > the extra 'sizeof(struct binder_buffer)', the total number of buffers
> > > > drops to only 18,724, which is a sad 7.14% of the actual capacity.
> > > >
> > > > This patch fixes the buffer size calculation to enable the utilization
> > > > of the entire async buffer space. This is expected to reduce the number
> > > > of -ENOSPC errors that are seen on the field.
> > > >
> > > > Fixes: 74310e06be4d ("android: binder: Move buffer out of area shared with user space")
> > > > Signed-off-by: Carlos Llamas <cmllamas@google.com>
> > > > ---
> > >
> > > Sorry, I forgot to Cc: stable@vger.kernel.org.
> >
> >
> > <formletter>
> >
> > This is not the correct way to submit patches for inclusion in the
> > stable kernel tree. Please read:
> > https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
> > for how to do this properly.
> >
> > </formletter>
>
> Oops, here is the complete info:
>
> Commit ID: c6d05e0762ab276102246d24affd1e116a46aa0c
> Subject: "binder: fix unused alloc->free_async_space"
> Reason: Fixes an incorrect calculation of available space.
> Versions: v4.19+
>
> Note this patch will also have trivial conflicts in v4.19 and v5.4
> kernels as commit 261e7818f06e is missing there. Please let me know and
> I can send the corresponding patches separately.
It doesn't even apply to 6.7.y either, so we need backports for all
affected trees, thanks.
greg k-h
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 04/28] binder: fix async space check for 0-sized buffers
2024-01-19 17:11 ` Carlos Llamas
@ 2024-01-22 15:05 ` Greg Kroah-Hartman
0 siblings, 0 replies; 21+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-22 15:05 UTC (permalink / raw)
To: Carlos Llamas
Cc: Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
Joel Fernandes, Christian Brauner, Suren Baghdasaryan,
Sherry Yang, linux-kernel, kernel-team, Alice Ryhl, stable
On Fri, Jan 19, 2024 at 05:11:26PM +0000, Carlos Llamas wrote:
> On Fri, Jan 19, 2024 at 06:48:53AM +0100, Greg Kroah-Hartman wrote:
> > On Thu, Jan 18, 2024 at 07:32:08PM +0000, Carlos Llamas wrote:
> > > On Fri, Dec 01, 2023 at 05:21:33PM +0000, Carlos Llamas wrote:
> > > > Move the padding of 0-sized buffers to an earlier stage to account for
> > > > this round up during the alloc->free_async_space check.
> > > >
> > > > Fixes: 74310e06be4d ("android: binder: Move buffer out of area shared with user space")
> > > > Reviewed-by: Alice Ryhl <aliceryhl@google.com>
> > > > Signed-off-by: Carlos Llamas <cmllamas@google.com>
> > > > ---
> > >
> > > Sorry, I forgot to Cc: stable@vger.kernel.org.
> >
> >
> > <formletter>
> >
> > This is not the correct way to submit patches for inclusion in the
> > stable kernel tree. Please read:
> > https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
> > for how to do this properly.
> >
> > </formletter>
>
> Oops, here is the complete info:
>
> Commit ID: 3091c21d3e9322428691ce0b7a0cfa9c0b239eeb
> Subject: "binder: fix async space check for 0-sized buffers"
> Reason: Fixes an incorrect calculation of available space.
> Versions: v4.19+
Now queued up, thanks.
greg k-h
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 05/28] binder: fix unused alloc->free_async_space
2024-01-22 15:04 ` Greg Kroah-Hartman
@ 2024-01-22 15:05 ` Greg Kroah-Hartman
2024-01-22 18:08 ` Carlos Llamas
0 siblings, 1 reply; 21+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-22 15:05 UTC (permalink / raw)
To: Carlos Llamas
Cc: Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
Joel Fernandes, Christian Brauner, Suren Baghdasaryan,
Sherry Yang, linux-kernel, kernel-team, stable
On Mon, Jan 22, 2024 at 07:04:20AM -0800, Greg Kroah-Hartman wrote:
> On Fri, Jan 19, 2024 at 05:27:18PM +0000, Carlos Llamas wrote:
> > On Fri, Jan 19, 2024 at 06:49:00AM +0100, Greg Kroah-Hartman wrote:
> > > On Thu, Jan 18, 2024 at 07:33:48PM +0000, Carlos Llamas wrote:
> > > > On Fri, Dec 01, 2023 at 05:21:34PM +0000, Carlos Llamas wrote:
> > > > > Each transaction is associated with a 'struct binder_buffer' that stores
> > > > > the metadata about its buffer area. Since commit 74310e06be4d ("android:
> > > > > binder: Move buffer out of area shared with user space") this struct is
> > > > > no longer embedded within the buffer itself but is instead allocated on
> > > > > the heap to prevent userspace access to this driver-exclusive info.
> > > > >
> > > > > Unfortunately, the space of this struct is still being accounted for in
> > > > > the total buffer size calculation, specifically for async transactions.
> > > > > This results in an additional 104 bytes added to every async buffer
> > > > > request, and this area is never used.
> > > > >
> > > > > This wasted space can be substantial. If we consider the maximum mmap
> > > > > buffer space of SZ_4M, the driver will reserve half of it for async
> > > > > transactions, or 0x200000. This area should, in theory, accommodate up
> > > > > to 262,144 buffers of the minimum 8-byte size. However, after adding
> > > > > the extra 'sizeof(struct binder_buffer)', the total number of buffers
> > > > > drops to only 18,724, which is a sad 7.14% of the actual capacity.
> > > > >
> > > > > This patch fixes the buffer size calculation to enable the utilization
> > > > > of the entire async buffer space. This is expected to reduce the number
> > > > > of -ENOSPC errors that are seen on the field.
> > > > >
> > > > > Fixes: 74310e06be4d ("android: binder: Move buffer out of area shared with user space")
> > > > > Signed-off-by: Carlos Llamas <cmllamas@google.com>
> > > > > ---
> > > >
> > > > Sorry, I forgot to Cc: stable@vger.kernel.org.
> > >
> > >
> > > <formletter>
> > >
> > > This is not the correct way to submit patches for inclusion in the
> > > stable kernel tree. Please read:
> > > https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
> > > for how to do this properly.
> > >
> > > </formletter>
> >
> > Oops, here is the complete info:
> >
> > Commit ID: c6d05e0762ab276102246d24affd1e116a46aa0c
> > Subject: "binder: fix unused alloc->free_async_space"
> > Reason: Fixes an incorrect calculation of available space.
> > Versions: v4.19+
> >
> > Note this patch will also have trivial conflicts in v4.19 and v5.4
> > kernels as commit 261e7818f06e is missing there. Please let me know and
> > I can send the corresponding patches separately.
>
> It doesn't even apply to 6.7.y either, so we need backports for all
> affected trees, thanks.
Now I got it to apply, but we need backports for 5.4.y and 4.19.y,
thanks.
greg k-h
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 03/28] binder: fix race between mmput() and do_exit()
2024-01-20 6:37 ` Greg Kroah-Hartman
@ 2024-01-22 18:05 ` Carlos Llamas
0 siblings, 0 replies; 21+ messages in thread
From: Carlos Llamas @ 2024-01-22 18:05 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
Joel Fernandes, Christian Brauner, Suren Baghdasaryan,
linux-kernel, kernel-team, Alice Ryhl, stable
On Sat, Jan 20, 2024 at 07:37:25AM +0100, Greg Kroah-Hartman wrote:
> On Fri, Jan 19, 2024 at 05:37:22PM +0000, Carlos Llamas wrote:
> > On Fri, Jan 19, 2024 at 05:06:13PM +0000, Carlos Llamas wrote:
> > >
> > > Oops, here is the complete info:
> > >
> > > Commit ID: 9a9ab0d963621d9d12199df9817e66982582d5a5
> > > Subject: "binder: fix race between mmput() and do_exit()"
> > > Reason: Fixes a race condition in binder.
> > > Versions: v4.19+
> > >
> > > Note this will have a trivial conflict in v4.19 and v5.10 kernels as
> > > commit d8ed45c5dcd4 is not there. Please let me know if I should send
> > > those patches separately.
> > >
> > > Thanks,
> > > --
> > > Carlos Llamas
> >
> > Sigh, I meant to type "conflict in v4.19 and v5.4". The patch applies
> > cleanly in v5.10+.
>
> Yes, I need backported patches please.
>
> thanks,
>
> greg k-h
Backports have been sent.
linux-4.19.y:
https://lore.kernel.org/all/20240122174250.2123854-1-cmllamas@google.com/
linux-5.4.y:
https://lore.kernel.org/all/20240122175751.2214176-1-cmllamas@google.com/
The patch should apply cleanly in remaining stable branches.
Thanks,
--
Carlos Llamas
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 05/28] binder: fix unused alloc->free_async_space
2024-01-22 15:05 ` Greg Kroah-Hartman
@ 2024-01-22 18:08 ` Carlos Llamas
2024-01-22 18:35 ` Greg Kroah-Hartman
0 siblings, 1 reply; 21+ messages in thread
From: Carlos Llamas @ 2024-01-22 18:08 UTC (permalink / raw)
To: Greg Kroah-Hartman
Cc: Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
Joel Fernandes, Christian Brauner, Suren Baghdasaryan,
Sherry Yang, linux-kernel, kernel-team, stable
On Mon, Jan 22, 2024 at 07:05:29AM -0800, Greg Kroah-Hartman wrote:
> On Mon, Jan 22, 2024 at 07:04:20AM -0800, Greg Kroah-Hartman wrote:
> > On Fri, Jan 19, 2024 at 05:27:18PM +0000, Carlos Llamas wrote:
> > > On Fri, Jan 19, 2024 at 06:49:00AM +0100, Greg Kroah-Hartman wrote:
> > > > On Thu, Jan 18, 2024 at 07:33:48PM +0000, Carlos Llamas wrote:
> > > > > On Fri, Dec 01, 2023 at 05:21:34PM +0000, Carlos Llamas wrote:
> > > > > > Each transaction is associated with a 'struct binder_buffer' that stores
> > > > > > the metadata about its buffer area. Since commit 74310e06be4d ("android:
> > > > > > binder: Move buffer out of area shared with user space") this struct is
> > > > > > no longer embedded within the buffer itself but is instead allocated on
> > > > > > the heap to prevent userspace access to this driver-exclusive info.
> > > > > >
> > > > > > Unfortunately, the space of this struct is still being accounted for in
> > > > > > the total buffer size calculation, specifically for async transactions.
> > > > > > This results in an additional 104 bytes added to every async buffer
> > > > > > request, and this area is never used.
> > > > > >
> > > > > > This wasted space can be substantial. If we consider the maximum mmap
> > > > > > buffer space of SZ_4M, the driver will reserve half of it for async
> > > > > > transactions, or 0x200000. This area should, in theory, accommodate up
> > > > > > to 262,144 buffers of the minimum 8-byte size. However, after adding
> > > > > > the extra 'sizeof(struct binder_buffer)', the total number of buffers
> > > > > > drops to only 18,724, which is a sad 7.14% of the actual capacity.
> > > > > >
> > > > > > This patch fixes the buffer size calculation to enable the utilization
> > > > > > of the entire async buffer space. This is expected to reduce the number
> > > > > > of -ENOSPC errors that are seen on the field.
> > > > > >
> > > > > > Fixes: 74310e06be4d ("android: binder: Move buffer out of area shared with user space")
> > > > > > Signed-off-by: Carlos Llamas <cmllamas@google.com>
> > > > > > ---
> > > > >
> > > > > Sorry, I forgot to Cc: stable@vger.kernel.org.
> > > >
> > > >
> > > > <formletter>
> > > >
> > > > This is not the correct way to submit patches for inclusion in the
> > > > stable kernel tree. Please read:
> > > > https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
> > > > for how to do this properly.
> > > >
> > > > </formletter>
> > >
> > > Oops, here is the complete info:
> > >
> > > Commit ID: c6d05e0762ab276102246d24affd1e116a46aa0c
> > > Subject: "binder: fix unused alloc->free_async_space"
> > > Reason: Fixes an incorrect calculation of available space.
> > > Versions: v4.19+
> > >
> > > Note this patch will also have trivial conflicts in v4.19 and v5.4
> > > kernels as commit 261e7818f06e is missing there. Please let me know and
> > > I can send the corresponding patches separately.
> >
> > It doesn't even apply to 6.7.y either, so we need backports for all
> > affected trees, thanks.
>
> Now I got it to apply, but we need backports for 5.4.y and 4.19.y,
> thanks.
>
> greg k-h
Backports sent.
linux-4.19.y:
https://lore.kernel.org/all/20240122174250.2123854-2-cmllamas@google.com/
linux-5.4.y:
https://lore.kernel.org/all/20240122175751.2214176-2-cmllamas@google.com/
Thanks,
Carlos Llamas
^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2 05/28] binder: fix unused alloc->free_async_space
2024-01-22 18:08 ` Carlos Llamas
@ 2024-01-22 18:35 ` Greg Kroah-Hartman
0 siblings, 0 replies; 21+ messages in thread
From: Greg Kroah-Hartman @ 2024-01-22 18:35 UTC (permalink / raw)
To: Carlos Llamas
Cc: Arve Hjønnevåg, Todd Kjos, Martijn Coenen,
Joel Fernandes, Christian Brauner, Suren Baghdasaryan,
Sherry Yang, linux-kernel, kernel-team, stable
On Mon, Jan 22, 2024 at 06:08:36PM +0000, Carlos Llamas wrote:
> On Mon, Jan 22, 2024 at 07:05:29AM -0800, Greg Kroah-Hartman wrote:
> > On Mon, Jan 22, 2024 at 07:04:20AM -0800, Greg Kroah-Hartman wrote:
> > > On Fri, Jan 19, 2024 at 05:27:18PM +0000, Carlos Llamas wrote:
> > > > On Fri, Jan 19, 2024 at 06:49:00AM +0100, Greg Kroah-Hartman wrote:
> > > > > On Thu, Jan 18, 2024 at 07:33:48PM +0000, Carlos Llamas wrote:
> > > > > > On Fri, Dec 01, 2023 at 05:21:34PM +0000, Carlos Llamas wrote:
> > > > > > > Each transaction is associated with a 'struct binder_buffer' that stores
> > > > > > > the metadata about its buffer area. Since commit 74310e06be4d ("android:
> > > > > > > binder: Move buffer out of area shared with user space") this struct is
> > > > > > > no longer embedded within the buffer itself but is instead allocated on
> > > > > > > the heap to prevent userspace access to this driver-exclusive info.
> > > > > > >
> > > > > > > Unfortunately, the space of this struct is still being accounted for in
> > > > > > > the total buffer size calculation, specifically for async transactions.
> > > > > > > This results in an additional 104 bytes added to every async buffer
> > > > > > > request, and this area is never used.
> > > > > > >
> > > > > > > This wasted space can be substantial. If we consider the maximum mmap
> > > > > > > buffer space of SZ_4M, the driver will reserve half of it for async
> > > > > > > transactions, or 0x200000. This area should, in theory, accommodate up
> > > > > > > to 262,144 buffers of the minimum 8-byte size. However, after adding
> > > > > > > the extra 'sizeof(struct binder_buffer)', the total number of buffers
> > > > > > > drops to only 18,724, which is a sad 7.14% of the actual capacity.
> > > > > > >
> > > > > > > This patch fixes the buffer size calculation to enable the utilization
> > > > > > > of the entire async buffer space. This is expected to reduce the number
> > > > > > > of -ENOSPC errors that are seen on the field.
> > > > > > >
> > > > > > > Fixes: 74310e06be4d ("android: binder: Move buffer out of area shared with user space")
> > > > > > > Signed-off-by: Carlos Llamas <cmllamas@google.com>
> > > > > > > ---
> > > > > >
> > > > > > Sorry, I forgot to Cc: stable@vger.kernel.org.
> > > > >
> > > > >
> > > > > <formletter>
> > > > >
> > > > > This is not the correct way to submit patches for inclusion in the
> > > > > stable kernel tree. Please read:
> > > > > https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html
> > > > > for how to do this properly.
> > > > >
> > > > > </formletter>
> > > >
> > > > Oops, here is the complete info:
> > > >
> > > > Commit ID: c6d05e0762ab276102246d24affd1e116a46aa0c
> > > > Subject: "binder: fix unused alloc->free_async_space"
> > > > Reason: Fixes an incorrect calculation of available space.
> > > > Versions: v4.19+
> > > >
> > > > Note this patch will also have trivial conflicts in v4.19 and v5.4
> > > > kernels as commit 261e7818f06e is missing there. Please let me know and
> > > > I can send the corresponding patches separately.
> > >
> > > It doesn't even apply to 6.7.y either, so we need backports for all
> > > affected trees, thanks.
> >
> > Now I got it to apply, but we need backports for 5.4.y and 4.19.y,
> > thanks.
> >
> > greg k-h
>
> Backports sent.
>
> linux-4.19.y:
> https://lore.kernel.org/all/20240122174250.2123854-2-cmllamas@google.com/
>
> linux-5.4.y:
> https://lore.kernel.org/all/20240122175751.2214176-2-cmllamas@google.com/
All now queued up, thanks!
greg k-h
^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2024-01-22 18:35 UTC | newest]
Thread overview: 21+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20231201172212.1813387-1-cmllamas@google.com>
2023-12-01 17:21 ` [PATCH v2 01/28] binder: use EPOLLERR from eventpoll.h Carlos Llamas
2023-12-01 17:21 ` [PATCH v2 02/28] binder: fix use-after-free in shinker's callback Carlos Llamas
2023-12-01 17:21 ` [PATCH v2 06/28] binder: fix trivial typo of binder_free_buf_locked() Carlos Llamas
2023-12-01 17:21 ` [PATCH v2 07/28] binder: fix comment on binder_alloc_new_buf() return value Carlos Llamas
[not found] ` <20231201172212.1813387-4-cmllamas@google.com>
2024-01-18 19:29 ` [PATCH v2 03/28] binder: fix race between mmput() and do_exit() Carlos Llamas
2024-01-19 5:48 ` Greg Kroah-Hartman
2024-01-19 17:06 ` Carlos Llamas
2024-01-19 17:37 ` Carlos Llamas
2024-01-20 6:37 ` Greg Kroah-Hartman
2024-01-22 18:05 ` Carlos Llamas
[not found] ` <20231201172212.1813387-5-cmllamas@google.com>
2024-01-18 19:32 ` [PATCH v2 04/28] binder: fix async space check for 0-sized buffers Carlos Llamas
2024-01-19 5:48 ` Greg Kroah-Hartman
2024-01-19 17:11 ` Carlos Llamas
2024-01-22 15:05 ` Greg Kroah-Hartman
[not found] ` <20231201172212.1813387-6-cmllamas@google.com>
2024-01-18 19:33 ` [PATCH v2 05/28] binder: fix unused alloc->free_async_space Carlos Llamas
2024-01-19 5:49 ` Greg Kroah-Hartman
2024-01-19 17:27 ` Carlos Llamas
2024-01-22 15:04 ` Greg Kroah-Hartman
2024-01-22 15:05 ` Greg Kroah-Hartman
2024-01-22 18:08 ` Carlos Llamas
2024-01-22 18:35 ` Greg Kroah-Hartman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).