restorecond: invalidate local_lock_fd properly when closing it

If flock(local_lock_fd,...) fails, in function local_server(), the file
descriptor to the lock file is closed but local_lock_fd is not reset to
-1. This leads to server() calling end_local_server(), which closes the
file descriptor again.

Fix this double-close issue by setting local_lock_fd to -1 after closing
it.

This issue was found by using Facebook's Infer static analyzer.

Signed-off-by: Nicolas Iooss <nicolas.iooss@m4x.org>
This commit is contained in:
Nicolas Iooss 2021-02-28 09:48:09 +01:00 committed by Petr Lautrbach
parent a9e0004f60
commit c672254329

View File

@ -230,9 +230,10 @@ static int local_server(void) {
return -1;
}
if (flock(local_lock_fd, LOCK_EX | LOCK_NB) < 0) {
close(local_lock_fd);
if (debug_mode)
perror("flock");
close(local_lock_fd);
local_lock_fd = -1;
return -1;
}
/* watch for stdin/terminal going away */