Fix for overlooked device HUP with 'firewire' stack

When EPOLLHUP event is received in fw_loop_iterate(), it is or'd
with EPOLLERR. The EPOLLHUP event was then overlooked in
handle_device_event() with unpredictable-but-generally bad results.

This problem has been rediscovered several times.
http://thread.gmane.org/gmane.linux.kernel.firewire.devel/13330
http://thread.gmane.org/gmane.linux.kernel.firewire.devel/13779

Reported-by: B.J. Buchalter <bj@mhlabs.com>
Reported-by: Michael Thireos <mthireos@vanteon.com>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
Peter Hurley 2010-04-16 14:15:40 -04:00 committed by Stefan Richter
parent f806f3d0de
commit b15039ceb8
1 changed files with 1 additions and 1 deletions

View File

@ -262,7 +262,7 @@ handle_device_event(raw1394handle_t handle,
int i; int i;
i = device - fwhandle->devices; i = device - fwhandle->devices;
if (events == EPOLLHUP) if (events & EPOLLHUP)
return handle_lost_device(fwhandle, i); return handle_lost_device(fwhandle, i);
len = read(fwhandle->devices[i].fd, len = read(fwhandle->devices[i].fd,