summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2023-12-05 19:02:14 +0100
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2023-12-05 19:18:23 +0100
commitf9568765d4d3d57de1ec01d85f0a0682920f4d10 (patch)
treee90215c3ef1a7a4bf8ce6372aecb66b0e35e4017
parentNEWS: finalize for v255-rc4 (diff)
downloadsystemd-f9568765d4d3d57de1ec01d85f0a0682920f4d10.tar.xz
systemd-f9568765d4d3d57de1ec01d85f0a0682920f4d10.zip
variuos: fwrite() does not set errno
The man page doesn't even mention errno. It just says that ferror() should be used to check for errors. Those writes are unlikely to fail, but if they do, errno might even be 0. Also, we have fflush_and_check() which does additional paranoia around errno, because we apparently do not trust that errno will always be set correctly.
-rw-r--r--src/analyze/analyze-srk.c10
-rw-r--r--src/creds/creds.c7
-rw-r--r--src/libsystemd/sd-journal/journal-verify.c2
-rw-r--r--src/tpm2-setup/tpm2-setup.c6
4 files changed, 16 insertions, 9 deletions
diff --git a/src/analyze/analyze-srk.c b/src/analyze/analyze-srk.c
index 3138246225..0e24b416bb 100644
--- a/src/analyze/analyze-srk.c
+++ b/src/analyze/analyze-srk.c
@@ -2,6 +2,7 @@
#include "analyze.h"
#include "analyze-srk.h"
+#include "fileio.h"
#include "tpm2-util.h"
int verb_srk(int argc, char *argv[], void *userdata) {
@@ -33,12 +34,15 @@ int verb_srk(int argc, char *argv[], void *userdata) {
return log_error_errno(r, "Failed to marshal SRK: %m");
if (isatty(STDOUT_FILENO))
- return log_error_errno(SYNTHETIC_ERRNO(EIO), "Refusing to write binary data to TTY, please redirect output to file.");
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Refusing to write binary data to TTY, please redirect output to file.");
if (fwrite(marshalled, 1, marshalled_size, stdout) != marshalled_size)
- return log_error_errno(errno, "Failed to write SRK to stdout: %m");
+ return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to write SRK to stdout: %m");
- fflush(stdout);
+ r = fflush_and_check(stdout);
+ if (r < 0)
+ return log_error_errno(r, "Failed to write SRK to stdout: %m");
return EXIT_SUCCESS;
#else
diff --git a/src/creds/creds.c b/src/creds/creds.c
index 101e5abf9b..7a98a5dcd3 100644
--- a/src/creds/creds.c
+++ b/src/creds/creds.c
@@ -350,14 +350,15 @@ static int write_blob(FILE *f, const void *data, size_t size) {
}
if (fwrite(data, 1, size, f) != size)
- return log_error_errno(errno, "Failed to write credential data: %m");
+ return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to write credential data: %m");
r = print_newline(f, data, size);
if (r < 0)
return r;
- if (fflush(f) != 0)
- return log_error_errno(errno, "Failed to flush output: %m");
+ r = fflush_and_check(f);
+ if (r < 0)
+ return log_error_errno(r, "Failed to flush output: %m");
return 0;
}
diff --git a/src/libsystemd/sd-journal/journal-verify.c b/src/libsystemd/sd-journal/journal-verify.c
index 8fc53beb42..bdaa01d66f 100644
--- a/src/libsystemd/sd-journal/journal-verify.c
+++ b/src/libsystemd/sd-journal/journal-verify.c
@@ -384,7 +384,7 @@ static int journal_file_object_verify(JournalFile *f, uint64_t offset, Object *o
static int write_uint64(FILE *fp, uint64_t p) {
if (fwrite(&p, sizeof(p), 1, fp) != 1)
- return -errno;
+ return -EIO;
return 0;
}
diff --git a/src/tpm2-setup/tpm2-setup.c b/src/tpm2-setup/tpm2-setup.c
index be34d166d7..0be7ffc6a5 100644
--- a/src/tpm2-setup/tpm2-setup.c
+++ b/src/tpm2-setup/tpm2-setup.c
@@ -284,7 +284,8 @@ static int run(int argc, char *argv[]) {
if (runtime_key.pkey) {
if (memcmp_nn(tpm2_key.fingerprint, tpm2_key.fingerprint_size,
runtime_key.fingerprint, runtime_key.fingerprint_size) != 0)
- return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), "Saved runtime SRK differs from TPM SRK, refusing.");
+ return log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE),
+ "Saved runtime SRK differs from TPM SRK, refusing.");
if (arg_early) {
log_info("SRK saved in '%s' matches SRK in TPM2.", runtime_key.path);
@@ -351,7 +352,8 @@ static int run(int argc, char *argv[]) {
return log_error_errno(r, "Failed to marshal TPM2_PUBLIC key.");
if (fwrite(marshalled, 1, marshalled_size, f) != marshalled_size)
- return log_error_errno(errno, "Failed to write SRK public key file '%s'.", tpm2b_public_path);
+ return log_error_errno(SYNTHETIC_ERRNO(EIO),
+ "Failed to write SRK public key file '%s'.", tpm2b_public_path);
if (fchmod(fileno(f), 0444) < 0)
return log_error_errno(errno, "Failed to adjust access mode of SRK public key file '%s' to 0444: %m", tpm2b_public_path);