[PATCH 3/4] wayland-server: Abort if a read from a client gives 0 length
Pekka Paalanen
ppaalanen at gmail.com
Wed Nov 5 04:32:29 PST 2014
On Sat, 01 Nov 2014 17:06:29 +0000
Philip Withnall <philip at tecnocode.co.uk> wrote:
> This happens on EOF if using a poll function such as select() or
> kqueue() which doesn’t distinguish EOF events.
>
> Currently execution should never reach the point where recvmsg() returns
> EOF (len == 0). Instead, epoll() will detect this and indicate EPOLLHUP,
> which is handled a few lines above, closing the connection. However,
> other event mechanisms may not be able to distinguish EOF from regular
> readability (in the case of select()) or inconsistently across platforms
> (in the case of POLLHUP). There is also the possibility of half-closed
> connections (shutdown(), POLLRDHUP), though this may not be an issue
> with Wayland.
>
> This will not cause problems if the FD polls as readable but actually is
> not — in that case, recvmsg() will return EAGAIN.
>
> Signed-off-by: Philip Withnall <philip at tecnocode.co.uk>
> Signed-off-by: Karsten Otto <ottoka at posteo.de>
> ---
> src/wayland-server.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/src/wayland-server.c b/src/wayland-server.c
> index 674aeca..85741cb 100644
> --- a/src/wayland-server.c
> +++ b/src/wayland-server.c
> @@ -260,7 +260,7 @@ wl_client_connection_data(int fd, uint32_t mask, void *data)
> len = 0;
> if (mask & WL_EVENT_READABLE) {
> len = wl_connection_read(connection);
> - if (len < 0 && errno != EAGAIN) {
> + if (len == 0 || (len < 0 && errno != EAGAIN)) {
> wl_client_destroy(client);
> return 1;
> }
Pushed.
Thanks,
pq
More information about the wayland-devel
mailing list