This removes a dead store to variable `f' from libsa's readdir(),
which also avoids suspicious use of `fd' without validation.

OK?

Index: lib/libsa/readdir.c
===================================================================
RCS file: src/sys/lib/libsa/readdir.c,v
retrieving revision 1.9
diff -u -p -r1.9 readdir.c
--- lib/libsa/readdir.c 19 Nov 2014 20:28:56 -0000      1.9
+++ lib/libsa/readdir.c 10 Jan 2022 15:56:30 -0000
@@ -65,14 +65,17 @@ opendir(const char *name)
 int
 readdir(int fd, char *dest)
 {
-       struct open_file *f = &files[fd];
+       struct open_file *f;
 
-       if (fd < 0 || fd >= SOPEN_MAX ||
-           !((f = &files[fd])->f_flags & F_READ)) {
+       if (fd < 0 || fd >= SOPEN_MAX) {
+               errno = EBADF;
+               return (-1);
+       }
+       f = &files[fd];
+       if (!(f->f_flags & F_READ)) {
                errno = EBADF;
                return (-1);
        }
-
        if (f->f_flags & F_RAW) {
                errno = EOPNOTSUPP;
                return (-1);

Reply via email to