From 54d34ff63deb6b929444de83db4c9fa96e7ba6e5 Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Sun, 14 Aug 2011 13:37:38 +0000 Subject: [PATCH] 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 --- usr.bin/tail/forward.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/usr.bin/tail/forward.c b/usr.bin/tail/forward.c index 6ed5691c366..e1e0638d7ad 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; }