]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
ttytype(): Fix race
authorAlejandro Colomar <alx@kernel.org>
Fri, 3 Feb 2023 19:32:12 +0000 (20:32 +0100)
committerSerge Hallyn <serge@hallyn.com>
Thu, 9 Feb 2023 16:03:03 +0000 (10:03 -0600)
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>
libmisc/ttytype.c

index 9e5c4e89652ad29496b86f59897a1cd218736a0a..a9fb0e860631300cbbb87e12d34bd56f06e4826d 100644 (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) {