]> err.no Git - util-linux/commitdiff
more: fix file descriptor leak
authorKarel Zak <kzak@redhat.com>
Tue, 2 Jan 2007 23:28:02 +0000 (00:28 +0100)
committerKarel Zak <kzak@redhat.com>
Thu, 4 Jan 2007 13:40:00 +0000 (14:40 +0100)
When you view a file with the more command and run a shell, the file descriptor
for reading the file is leaked to that process.

To test, more any file. Then do !/bin/sh. At the prompt do "ls -l /proc/$$/fd"
and you'll see the leaked fd.

From: Steve Grubb <sgrubb@redhat.com>
Signed-off-by: Karel Zak <kzak@redhat.com>
text-utils/more.c

index 2b4fceb920bc1edf035e01af79cf45b8b7d1ea58..72f2832a7259940106d1228906db1c6eae85870d 100644 (file)
@@ -47,6 +47,7 @@
 #include <ctype.h>
 #include <signal.h>
 #include <errno.h>
+#include <fcntl.h>
 #include <termios.h>
 #include <setjmp.h>
 #include <sys/ioctl.h>
@@ -478,6 +479,7 @@ checkf (fs, clearfirst)
        }
        if (magic(f, fs))
                return((FILE *)NULL);
+       fcntl(fileno(f), F_SETFD, FD_CLOEXEC );
        c = Getc(f);
        *clearfirst = (c == '\f');
        Ungetc (c, f);