Only enter the sig_no switch if we actually return from read(2) with
authormartijn <martijn@openbsd.org>
Wed, 11 Aug 2021 15:13:46 +0000 (15:13 +0000)
committermartijn <martijn@openbsd.org>
Wed, 11 Aug 2021 15:13:46 +0000 (15:13 +0000)
commit0a47089c9bda281e4eb96db8abe24c2b3ed7b380
treed4f2621c8da59a54f4f70473bd9d3ebffdab60e9
parent3bffeddb5384544a812bb375d09d9c783c26c40f
Only enter the sig_no switch if we actually return from read(2) with
errno == EINTR. There was a race here where read(2) can return with a
different errno, but the signal handler enters between the read return and
the switch, which could result in handling a signal, while we should be
handling the error.

This fix assumes that signal handlers don't clobber our errno, but doing
that would open a whole other can of worms.

OK schwarze@, millert@
lib/libedit/read.c