diff options
author | rwatson <rwatson@FreeBSD.org> | 2006-03-14 19:32:03 +0000 |
---|---|---|
committer | rwatson <rwatson@FreeBSD.org> | 2006-03-14 19:32:03 +0000 |
commit | 476d18667583679bdf1230213949d32fb7c85943 (patch) | |
tree | 0ccbbd29c86267b5ae6eae220b5bf74fe319b429 | |
parent | 40fd39052074528ac10bac208ac9a7e7f574aef7 (diff) | |
download | FreeBSD-src-476d18667583679bdf1230213949d32fb7c85943.zip FreeBSD-src-476d18667583679bdf1230213949d32fb7c85943.tar.gz |
When opening a trace file, open O_NONBLOCK so that ktrace doesn't stall
if the target is a fifo. After opening a trace file, check that it is a
regular file, and if not, return an error.
MFC after: 3 days
Reported by: kris
PR: 94278
-rw-r--r-- | usr.bin/ktrace/ktrace.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/usr.bin/ktrace/ktrace.c b/usr.bin/ktrace/ktrace.c index 4b83796..84f10ee 100644 --- a/usr.bin/ktrace/ktrace.c +++ b/usr.bin/ktrace/ktrace.c @@ -145,11 +145,14 @@ main(int argc, char *argv[]) omask = umask(S_IRWXG|S_IRWXO); if (append) { - if ((fd = open(tracefile, O_CREAT | O_WRONLY, DEFFILEMODE)) < 0) + if ((fd = open(tracefile, O_CREAT | O_WRONLY | O_NONBLOCK, + DEFFILEMODE)) < 0) err(1, "%s", tracefile); if (fstat(fd, &sb) != 0 || sb.st_uid != getuid()) errx(1, "refuse to append to %s not owned by you", tracefile); + if (!(S_ISREG(sb.st_mode))) + errx(1, "%s not regular file", tracefile); } else { if (unlink(tracefile) == -1 && errno != ENOENT) err(1, "unlink %s", tracefile); |