diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2015-03-09 18:58:47 -0400 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2015-03-09 22:06:46 -0400 |
commit | faf9da01ad93bd48523f0966646bbd3ca85a2951 (patch) | |
tree | 1cee8ffb941c22c54c4b1c70bb5e2cb6ef3a80d4 | |
parent | 977eaa1eae53af7f418d87fcb42f4a4d34aad739 (diff) |
journalctl: unlink without checking with access first
It is more elegant to do this in one step.
Coverity complains about the TOCTOU difference, but it is not an
actual problem (CID #1237777).
-rw-r--r-- | src/journal/journalctl.c | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c index 2b0e00ee8f..f0f03b0697 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -1316,19 +1316,16 @@ static int setup_keys(void) { SD_ID128_FORMAT_VAL(machine)) < 0) return log_oom(); - if (access(p, F_OK) >= 0) { - if (arg_force) { - r = unlink(p); - if (r < 0) { - log_error_errno(errno, "unlink(\"%s\") failed: %m", p); - r = -errno; - goto finish; - } - } else { - log_error("Sealing key file %s exists already. (--force to recreate)", p); - r = -EEXIST; + if (arg_force) { + r = unlink(p); + if (r < 0 && errno != ENOENT) { + r = log_error_errno(errno, "unlink(\"%s\") failed: %m", p); goto finish; } + } else if (access(p, F_OK) >= 0) { + log_error("Sealing key file %s exists already. Use --force to recreate.", p); + r = -EEXIST; + goto finish; } if (asprintf(&k, "/var/log/journal/" SD_ID128_FORMAT_STR "/fss.tmp.XXXXXX", |