[PATCH] Flush the connection if we have to many marshaled fds
Ander Conselvan de Oliveira
conselvan2 at gmail.com
Fri Mar 9 02:38:58 PST 2012
On 03/09/2012 11:41 AM, Pekka Paalanen wrote:
> On Fri, 9 Mar 2012 11:18:49 +0200
> Ander Conselvan de Oliveira<ander.conselvan.de.oliveira at intel.com>
> wrote:
>
>> The buffer used by wl_connection_data to receive a cmsg is 128 bytes
>> long. This can hold at most 28 fds but when a cmsg is generated for
>> sending the fds, there is no check for this limitation. The man page
>> for recvmsg does not show any way of recovering from MSG_CTRUNC, that
>> happens when the buffer supplied for cmsg is too short.
>>
>> Fix this by forcing that to be written if we would generate a buffer
>> longer than the maximum.
>> ---
>> src/connection.c | 23 +++++++++++++++++++----
>> 1 files changed, 19 insertions(+), 4 deletions(-)
>>
>> diff --git a/src/connection.c b/src/connection.c
>> index 1ea2418..30a99c0 100644
>> --- a/src/connection.c
>> +++ b/src/connection.c
[...]
>> @@ -389,6 +393,18 @@ wl_message_size_extra(const struct wl_message *message)
>> return extra;
>> }
>>
>> +static void
>> +wl_connection_put_fd(struct wl_connection *connection, int32_t fd)
>> +{
>> + if (connection->n_fds_out + 1> MAX_FDS_OUT) {
>> + wl_connection_data(connection, WL_CONNECTION_WRITABLE);
>
> You are not testing the return value of wl_connection_data(). What are
> the implications if it fails? Shouldn't the failure be returned back up
> in the call chain, and be dealt with, like in
> http://cgit.freedesktop.org/wayland/wayland/commit/?id=b26774da5b907a71aa7c72ee1feb6dcde92b9fcb
True. We should abort the client then. I'm just no sure what to set
errno to in wl_connection_vmarshal.
Thanks for reviewing.
Cheers,
Ander
More information about the wayland-devel
mailing list