* Re: [PATCH] binder: make sure fd closes complete [not found] ` <CAB0TPYFmUgPTONABLTJAdonK7fY7oqURKCpLp1-WqHLtyen7Zw@mail.gmail.com> @ 2021-09-02 15:35 ` Todd Kjos 2021-09-02 16:11 ` Greg KH 2021-09-03 8:06 ` Dan Carpenter 0 siblings, 2 replies; 5+ messages in thread From: Todd Kjos @ 2021-09-02 15:35 UTC (permalink / raw) To: Martijn Coenen Cc: Greg KH, Christian Brauner, Arve Hjønnevåg, open list:ANDROID DRIVERS, LKML, Martijn Coenen, Joel Fernandes, kernel-team, stable On Tue, Aug 31, 2021 at 12:24 AM Martijn Coenen <maco@android.com> wrote: > > On Mon, Aug 30, 2021 at 9:51 PM 'Todd Kjos' via kernel-team > <kernel-team@android.com> wrote: > > > > During BC_FREE_BUFFER processing, the BINDER_TYPE_FDA object > > cleanup may close 1 or more fds. The close operations are > > completed using the task work mechanism -- which means the thread > > needs to return to userspace or the file object may never be > > dereferenced -- which can lead to hung processes. > > > > Force the binder thread back to userspace if an fd is closed during > > BC_FREE_BUFFER handling. > > > > Signed-off-by: Todd Kjos <tkjos@google.com> > Reviewed-by: Martijn Coenen <maco@android.com> Please also add to stable releases 5.4 and later. > > > --- > > drivers/android/binder.c | 23 +++++++++++++++++------ > > 1 file changed, 17 insertions(+), 6 deletions(-) > > > > diff --git a/drivers/android/binder.c b/drivers/android/binder.c > > index bcec598b89f2..c2823f0d588f 100644 > > --- a/drivers/android/binder.c > > +++ b/drivers/android/binder.c > > @@ -1852,6 +1852,7 @@ static void binder_deferred_fd_close(int fd) > > } > > > > static void binder_transaction_buffer_release(struct binder_proc *proc, > > + struct binder_thread *thread, > > struct binder_buffer *buffer, > > binder_size_t failed_at, > > bool is_failure) > > @@ -2011,8 +2012,16 @@ static void binder_transaction_buffer_release(struct binder_proc *proc, > > &proc->alloc, &fd, buffer, > > offset, sizeof(fd)); > > WARN_ON(err); > > - if (!err) > > + if (!err) { > > binder_deferred_fd_close(fd); > > + /* > > + * Need to make sure the thread goes > > + * back to userspace to complete the > > + * deferred close > > + */ > > + if (thread) > > + thread->looper_need_return = true; > > + } > > } > > } break; > > default: > > @@ -3105,7 +3114,7 @@ static void binder_transaction(struct binder_proc *proc, > > err_copy_data_failed: > > binder_free_txn_fixups(t); > > trace_binder_transaction_failed_buffer_release(t->buffer); > > - binder_transaction_buffer_release(target_proc, t->buffer, > > + binder_transaction_buffer_release(target_proc, NULL, t->buffer, > > buffer_offset, true); > > if (target_node) > > binder_dec_node_tmpref(target_node); > > @@ -3184,7 +3193,9 @@ static void binder_transaction(struct binder_proc *proc, > > * Cleanup buffer and free it. > > */ > > static void > > -binder_free_buf(struct binder_proc *proc, struct binder_buffer *buffer) > > +binder_free_buf(struct binder_proc *proc, > > + struct binder_thread *thread, > > + struct binder_buffer *buffer) > > { > > binder_inner_proc_lock(proc); > > if (buffer->transaction) { > > @@ -3212,7 +3223,7 @@ binder_free_buf(struct binder_proc *proc, struct binder_buffer *buffer) > > binder_node_inner_unlock(buf_node); > > } > > trace_binder_transaction_buffer_release(buffer); > > - binder_transaction_buffer_release(proc, buffer, 0, false); > > + binder_transaction_buffer_release(proc, thread, buffer, 0, false); > > binder_alloc_free_buf(&proc->alloc, buffer); > > } > > > > @@ -3414,7 +3425,7 @@ static int binder_thread_write(struct binder_proc *proc, > > proc->pid, thread->pid, (u64)data_ptr, > > buffer->debug_id, > > buffer->transaction ? "active" : "finished"); > > - binder_free_buf(proc, buffer); > > + binder_free_buf(proc, thread, buffer); > > break; > > } > > > > @@ -4107,7 +4118,7 @@ static int binder_thread_read(struct binder_proc *proc, > > buffer->transaction = NULL; > > binder_cleanup_transaction(t, "fd fixups failed", > > BR_FAILED_REPLY); > > - binder_free_buf(proc, buffer); > > + binder_free_buf(proc, thread, buffer); > > binder_debug(BINDER_DEBUG_FAILED_TRANSACTION, > > "%d:%d %stransaction %d fd fixups failed %d/%d, line %d\n", > > proc->pid, thread->pid, > > -- > > 2.33.0.259.gc128427fd7-goog > > > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] binder: make sure fd closes complete 2021-09-02 15:35 ` [PATCH] binder: make sure fd closes complete Todd Kjos @ 2021-09-02 16:11 ` Greg KH 2021-09-03 8:06 ` Dan Carpenter 1 sibling, 0 replies; 5+ messages in thread From: Greg KH @ 2021-09-02 16:11 UTC (permalink / raw) To: Todd Kjos Cc: Martijn Coenen, Christian Brauner, Arve Hjønnevåg, open list:ANDROID DRIVERS, LKML, Martijn Coenen, Joel Fernandes, kernel-team, stable On Thu, Sep 02, 2021 at 08:35:35AM -0700, Todd Kjos wrote: > On Tue, Aug 31, 2021 at 12:24 AM Martijn Coenen <maco@android.com> wrote: > > > > On Mon, Aug 30, 2021 at 9:51 PM 'Todd Kjos' via kernel-team > > <kernel-team@android.com> wrote: > > > > > > During BC_FREE_BUFFER processing, the BINDER_TYPE_FDA object > > > cleanup may close 1 or more fds. The close operations are > > > completed using the task work mechanism -- which means the thread > > > needs to return to userspace or the file object may never be > > > dereferenced -- which can lead to hung processes. > > > > > > Force the binder thread back to userspace if an fd is closed during > > > BC_FREE_BUFFER handling. > > > > > > Signed-off-by: Todd Kjos <tkjos@google.com> > > Reviewed-by: Martijn Coenen <maco@android.com> > > Please also add to stable releases 5.4 and later. I'll try to remember to tag this as-such after 5.15-rc1 is out and I can apply it to my tree. But in the future, it's best if you add the cc: stable to the patch yourself so I don't have to do it "by hand" after the fact. thanks, greg k-h ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] binder: make sure fd closes complete 2021-09-02 15:35 ` [PATCH] binder: make sure fd closes complete Todd Kjos 2021-09-02 16:11 ` Greg KH @ 2021-09-03 8:06 ` Dan Carpenter 2021-09-03 19:38 ` Todd Kjos 1 sibling, 1 reply; 5+ messages in thread From: Dan Carpenter @ 2021-09-03 8:06 UTC (permalink / raw) To: Todd Kjos Cc: Martijn Coenen, open list:ANDROID DRIVERS, Greg KH, LKML, stable, Arve Hjønnevåg, Martijn Coenen, Joel Fernandes, kernel-team, Christian Brauner On Thu, Sep 02, 2021 at 08:35:35AM -0700, Todd Kjos wrote: > On Tue, Aug 31, 2021 at 12:24 AM Martijn Coenen <maco@android.com> wrote: > > > > On Mon, Aug 30, 2021 at 9:51 PM 'Todd Kjos' via kernel-team > > <kernel-team@android.com> wrote: > > > > > > During BC_FREE_BUFFER processing, the BINDER_TYPE_FDA object > > > cleanup may close 1 or more fds. The close operations are > > > completed using the task work mechanism -- which means the thread > > > needs to return to userspace or the file object may never be > > > dereferenced -- which can lead to hung processes. > > > > > > Force the binder thread back to userspace if an fd is closed during > > > BC_FREE_BUFFER handling. > > > > > > Signed-off-by: Todd Kjos <tkjos@google.com> > > Reviewed-by: Martijn Coenen <maco@android.com> > > Please also add to stable releases 5.4 and later. It would be better if this had a fixes tag so we knew which is the first buggy commit. There was a long Project Zero article about the Bad Binder exploit because commit f5cb779ba163 ("ANDROID: binder: remove waitqueue when thread exits.") was marked as # 4.14 but it didn't have a Fixes tag and the actual buggy commit was in 4.9. regards, dan carpenter ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] binder: make sure fd closes complete 2021-09-03 8:06 ` Dan Carpenter @ 2021-09-03 19:38 ` Todd Kjos 2021-09-14 7:01 ` Greg KH 0 siblings, 1 reply; 5+ messages in thread From: Todd Kjos @ 2021-09-03 19:38 UTC (permalink / raw) To: Dan Carpenter Cc: Martijn Coenen, open list:ANDROID DRIVERS, Greg KH, LKML, stable, Arve Hjønnevåg, Martijn Coenen, Joel Fernandes, kernel-team, Christian Brauner On Fri, Sep 3, 2021 at 1:06 AM Dan Carpenter <dan.carpenter@oracle.com> wrote: > > On Thu, Sep 02, 2021 at 08:35:35AM -0700, Todd Kjos wrote: > > On Tue, Aug 31, 2021 at 12:24 AM Martijn Coenen <maco@android.com> wrote: > > > > > > On Mon, Aug 30, 2021 at 9:51 PM 'Todd Kjos' via kernel-team > > > <kernel-team@android.com> wrote: > > > > > > > > During BC_FREE_BUFFER processing, the BINDER_TYPE_FDA object > > > > cleanup may close 1 or more fds. The close operations are > > > > completed using the task work mechanism -- which means the thread > > > > needs to return to userspace or the file object may never be > > > > dereferenced -- which can lead to hung processes. > > > > > > > > Force the binder thread back to userspace if an fd is closed during > > > > BC_FREE_BUFFER handling. > > > > > > > > Signed-off-by: Todd Kjos <tkjos@google.com> > > > Reviewed-by: Martijn Coenen <maco@android.com> > > > > Please also add to stable releases 5.4 and later. > > It would be better if this had a fixes tag so we knew which is the first > buggy commit. > > There was a long Project Zero article about the Bad Binder exploit > because commit f5cb779ba163 ("ANDROID: binder: remove waitqueue when > thread exits.") was marked as # 4.14 but it didn't have a Fixes tag and > the actual buggy commit was in 4.9. Good point Dan. I should have included a Fixes tag. Here is the tag (issue introduced in 4.20): Fixes: 80cd795630d6 ("binder: fix use-after-free due to ksys_close() during fdget()") Greg- would you like me to send a v2 with the Fixes tag and CC'ing stable appropriately? > > regards, > dan carpenter > > -- > To unsubscribe from this group and stop receiving emails from it, send an email to kernel-team+unsubscribe@android.com. > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] binder: make sure fd closes complete 2021-09-03 19:38 ` Todd Kjos @ 2021-09-14 7:01 ` Greg KH 0 siblings, 0 replies; 5+ messages in thread From: Greg KH @ 2021-09-14 7:01 UTC (permalink / raw) To: Todd Kjos Cc: Dan Carpenter, Martijn Coenen, open list:ANDROID DRIVERS, LKML, stable, Arve Hjønnevåg, Martijn Coenen, Joel Fernandes, kernel-team, Christian Brauner On Fri, Sep 03, 2021 at 12:38:26PM -0700, Todd Kjos wrote: > On Fri, Sep 3, 2021 at 1:06 AM Dan Carpenter <dan.carpenter@oracle.com> wrote: > > > > On Thu, Sep 02, 2021 at 08:35:35AM -0700, Todd Kjos wrote: > > > On Tue, Aug 31, 2021 at 12:24 AM Martijn Coenen <maco@android.com> wrote: > > > > > > > > On Mon, Aug 30, 2021 at 9:51 PM 'Todd Kjos' via kernel-team > > > > <kernel-team@android.com> wrote: > > > > > > > > > > During BC_FREE_BUFFER processing, the BINDER_TYPE_FDA object > > > > > cleanup may close 1 or more fds. The close operations are > > > > > completed using the task work mechanism -- which means the thread > > > > > needs to return to userspace or the file object may never be > > > > > dereferenced -- which can lead to hung processes. > > > > > > > > > > Force the binder thread back to userspace if an fd is closed during > > > > > BC_FREE_BUFFER handling. > > > > > > > > > > Signed-off-by: Todd Kjos <tkjos@google.com> > > > > Reviewed-by: Martijn Coenen <maco@android.com> > > > > > > Please also add to stable releases 5.4 and later. > > > > It would be better if this had a fixes tag so we knew which is the first > > buggy commit. > > > > There was a long Project Zero article about the Bad Binder exploit > > because commit f5cb779ba163 ("ANDROID: binder: remove waitqueue when > > thread exits.") was marked as # 4.14 but it didn't have a Fixes tag and > > the actual buggy commit was in 4.9. > > Good point Dan. I should have included a Fixes tag. Here is the tag > (issue introduced in 4.20): > > Fixes: 80cd795630d6 ("binder: fix use-after-free due to ksys_close() > during fdget()") > > Greg- would you like me to send a v2 with the Fixes tag and CC'ing > stable appropriately? I've added it to the commit when I added it to my tree, no need to resend. thanks, greg k-h ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-09-14 7:01 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20210830195146.587206-1-tkjos@google.com>
[not found] ` <CAB0TPYFmUgPTONABLTJAdonK7fY7oqURKCpLp1-WqHLtyen7Zw@mail.gmail.com>
2021-09-02 15:35 ` [PATCH] binder: make sure fd closes complete Todd Kjos
2021-09-02 16:11 ` Greg KH
2021-09-03 8:06 ` Dan Carpenter
2021-09-03 19:38 ` Todd Kjos
2021-09-14 7:01 ` Greg KH
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox