Linux: LAD_client: Fix Race Condition with Command FIFO
authorAngela Stegmaier <angelabaker@ti.com>
Fri, 6 Oct 2017 18:38:07 +0000 (13:38 -0500)
committerAngela Stegmaier <angelabaker@ti.com>
Wed, 18 Oct 2017 19:10:38 +0000 (14:10 -0500)
commit657539875b6faf31b3fd2bff898c183410a016c5
treeddb66e3e624e917825114658eedae476e7cc5e5c
parente576990e3a220ad394b287588c1c7e85e8644d23
Linux: LAD_client: Fix Race Condition with Command FIFO

With the current implementation, there is a small window
where the FIFO is closed by the client for writing while it is
still open by the LAD daemon for reading. In this small window,
if the LAD daemon attempts to do a read on the FIFO, it will get
EOF and the LAD daemon will close it's own FIFO and re-open it.

If the client then is able to open the FIFO again after
the LAD daemon has received EOF from the read call, but before
the LAD daemon has closed the FIFO, then there is now a situation
where the client has a handle to a stale FIFO. If all these
things happen, then when the client tries to write/flush to the
FIFO, a SIGPIPE signal will happen, resulting in the client
crash.

To avoid this race condition, we must close the window where
the FIFO is not open for writing by the client while it is already
open for reading by the daemon.

This patch closes the window by modifiying the client code to
delay closing it's non-blocking FIFO handle (used for handshaking)
until after it has successfully opened the regular FIFO.

Signed-off-by: Angela Stegmaier <angelabaker@ti.com>
linux/src/utils/LAD_client.c