summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2011-08-14 13:37:38 +0000
committerjilles <jilles@FreeBSD.org>2011-08-14 13:37:38 +0000
commitbb4511c618d6c97201f6fc608f173ceb0e8c496c (patch)
tree22b6d2a5e4c8f8391e3a145ad422b9b837a4901b
parent0920e246c699770e57b13150e8b18fb73a484a76 (diff)
downloadFreeBSD-src-bb4511c618d6c97201f6fc608f173ceb0e8c496c.zip
FreeBSD-src-bb4511c618d6c97201f6fc608f173ceb0e8c496c.tar.gz
tail: Fix crash if -F'ed file's filesystem disappears.
If tail notices that a file it is following no longer exists (because stat() fails), it will output any final lines and then close the file. If the read operation also causes an error, such as when the filesystem is forcefully unmounted, it closes the file as well, leading to fclose(NULL) and a segmentation fault. PR: bin/159750 Submitted by: swills Approved by: re (kib) MFC after: 1 week
-rw-r--r--usr.bin/tail/forward.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/usr.bin/tail/forward.c b/usr.bin/tail/forward.c
index 6ed5691..e1e0638 100644
--- a/usr.bin/tail/forward.c
+++ b/usr.bin/tail/forward.c
@@ -361,8 +361,10 @@ follow(file_info_t *files, enum STYLE style, off_t off)
if (errno != ENOENT)
ierr(file->file_name);
show(file);
- fclose(file->fp);
- file->fp = NULL;
+ if (file->fp != NULL) {
+ fclose(file->fp);
+ file->fp = NULL;
+ }
ev_change++;
continue;
}
OpenPOWER on IntegriCloud