wayland-server: Abort if a read from a client gives 0 length
authorPhilip Withnall <philip@tecnocode.co.uk>
Sat, 1 Nov 2014 17:06:29 +0000 (17:06 +0000)
committerPekka Paalanen <pekka.paalanen@collabora.co.uk>
Wed, 5 Nov 2014 12:24:17 +0000 (14:24 +0200)
commita434b7ba8e1fb2f639736b79f6bff668256060b8
tree6cc51b3de4b1e142b925ac28be954946f2346a46
parentb096693bef569ce463b5444ce654e62293978f8c
wayland-server: Abort if a read from a client gives 0 length

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>
Reviewed-by: Marek Chalupa <mchqwerty@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
src/wayland-server.c