mbox series

[v4,0/2] char-socket: Fix race condition

Message ID 1565625509-404969-1-git-send-email-andrey.shinkevich@virtuozzo.com (mailing list archive)
Headers show
Series char-socket: Fix race condition | expand

Message

Andrey Shinkevich Aug. 12, 2019, 3:58 p.m. UTC
This fixes a race condition in which the tcp_chr_read() ioc handler
can close a connection that is being written to from another thread.

v4:
    The functions qemu_idle_add() and tcp_chr_be_event_closed() were removed
    because the callback is invoked after the call to object_property_del_all()
    so, the "chardev" object had been deleted and the segmentation fault occurs.
    Let's please apply the Alberto's simplified series to avoid the race condition.

v3:
    See the email thread with the Message ID
    <cover.1550842915.git.berto@igalia.com>

Alberto Garcia (2):
  main-loop: Fix GSource leak in qio_task_thread_worker()
  char-socket: Lock tcp_chr_disconnect()

 chardev/char-socket.c | 16 +++++++++++++---
 io/task.c             |  1 +
 2 files changed, 14 insertions(+), 3 deletions(-)

Comments

Paolo Bonzini Aug. 21, 2019, 8:18 a.m. UTC | #1
On 12/08/19 17:58, Andrey Shinkevich wrote:
> This fixes a race condition in which the tcp_chr_read() ioc handler
> can close a connection that is being written to from another thread.
> 
> v4:
>     The functions qemu_idle_add() and tcp_chr_be_event_closed() were removed
>     because the callback is invoked after the call to object_property_del_all()
>     so, the "chardev" object had been deleted and the segmentation fault occurs.
>     Let's please apply the Alberto's simplified series to avoid the race condition.
> 
> v3:
>     See the email thread with the Message ID
>     <cover.1550842915.git.berto@igalia.com>
> 
> Alberto Garcia (2):
>   main-loop: Fix GSource leak in qio_task_thread_worker()
>   char-socket: Lock tcp_chr_disconnect()
> 
>  chardev/char-socket.c | 16 +++++++++++++---
>  io/task.c             |  1 +
>  2 files changed, 14 insertions(+), 3 deletions(-)
> 

Queued, thanks.

Paolo
Andrey Shinkevich Aug. 21, 2019, 9:51 a.m. UTC | #2
On 21/08/2019 11:18, Paolo Bonzini wrote:
> On 12/08/19 17:58, Andrey Shinkevich wrote:
>> This fixes a race condition in which the tcp_chr_read() ioc handler
>> can close a connection that is being written to from another thread.
>>
>> v4:
>>      The functions qemu_idle_add() and tcp_chr_be_event_closed() were removed
>>      because the callback is invoked after the call to object_property_del_all()
>>      so, the "chardev" object had been deleted and the segmentation fault occurs.
>>      Let's please apply the Alberto's simplified series to avoid the race condition.
>>
>> v3:
>>      See the email thread with the Message ID
>>      <cover.1550842915.git.berto@igalia.com>
>>
>> Alberto Garcia (2):
>>    main-loop: Fix GSource leak in qio_task_thread_worker()
>>    char-socket: Lock tcp_chr_disconnect()
>>
>>   chardev/char-socket.c | 16 +++++++++++++---
>>   io/task.c             |  1 +
>>   2 files changed, 14 insertions(+), 3 deletions(-)
>>
> 
> Queued, thanks.
> 
> Paolo
> 
Thanks you all too.
Andrey