[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