ttytype(): Fix race

The intention of the code is just to not report an error message when
'typefile' doesn't exist.  If we call access(2) and then fopen(2),
there's a race.  It's not a huge problem, and the worst thing that can
happen is reporting an error when the file has been removed after
access(2).  It's not a problem, but we can fix the race and at the same
time clarify the intention of not warning about ENOENT and also remove
one syscall.  Seems like a win-win.

Suggested-by: Christian Göttsche <cgzones@googlemail.com>
Signed-off-by: Alejandro Colomar <alx@kernel.org>
This commit is contained in:
Alejandro Colomar 2023-02-03 20:32:12 +01:00 committed by Serge Hallyn
parent bddcd9b095
commit 5da8388fc6

View File

@ -34,13 +34,11 @@ void ttytype (const char *line)
if (NULL == typefile) {
return;
}
if (access (typefile, F_OK) != 0) {
return;
}
fp = fopen (typefile, "r");
if (NULL == fp) {
perror (typefile);
if (errno != ENOENT)
perror (typefile);
return;
}
while (fgets (buf, sizeof buf, fp) == buf) {