diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c index 3353b3a0d8..09c511b8b8 100644 --- a/src/journal/journal-file.c +++ b/src/journal/journal-file.c @@ -651,6 +651,12 @@ static int journal_file_fstat(JournalFile *f) { f->last_stat_usec = now(CLOCK_MONOTONIC); + /* Refuse dealing with with files that aren't regular */ + if (S_ISDIR(f->last_stat.st_mode)) + return -EISDIR; + if (!S_ISREG(f->last_stat.st_mode)) + return -EBADFD; + /* Refuse appending to files that are already deleted */ if (f->last_stat.st_nlink <= 0) return -EIDRM; diff --git a/src/journal/sd-journal.c b/src/journal/sd-journal.c index 4deee461c3..8a591205c4 100644 --- a/src/journal/sd-journal.c +++ b/src/journal/sd-journal.c @@ -2016,6 +2016,10 @@ _public_ int sd_journal_open_files_fd(sd_journal **ret, int fds[], unsigned n_fd goto fail; } + if (S_ISDIR(st.st_mode)) { + r = -EISDIR; + goto fail; + } if (!S_ISREG(st.st_mode)) { r = -EBADFD; goto fail;