From fa3709c5fb23ee1741218871758bdee3ded0190c Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 20 May 2020 18:06:56 +0200 Subject: [PATCH] homed: also fsync private/public key pair when storing it --- src/home/homed-manager.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/home/homed-manager.c b/src/home/homed-manager.c index 525e0c7d66..ea5791ae49 100644 --- a/src/home/homed-manager.c +++ b/src/home/homed-manager.c @@ -1337,7 +1337,7 @@ static int manager_generate_key_pair(Manager *m) { if (PEM_write_PUBKEY(fpublic, m->private_key) <= 0) return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to write public key."); - r = fflush_and_check(fpublic); + r = fflush_sync_and_check(fpublic); if (r < 0) return log_error_errno(r, "Failed to write private key: %m"); @@ -1351,7 +1351,7 @@ static int manager_generate_key_pair(Manager *m) { if (PEM_write_PrivateKey(fprivate, m->private_key, NULL, NULL, 0, NULL, 0) <= 0) return log_error_errno(SYNTHETIC_ERRNO(EIO), "Failed to write private key pair."); - r = fflush_and_check(fprivate); + r = fflush_sync_and_check(fprivate); if (r < 0) return log_error_errno(r, "Failed to write private key: %m"); @@ -1369,6 +1369,10 @@ static int manager_generate_key_pair(Manager *m) { } temp_private = mfree(temp_private); + r = fsync_path_at(AT_FDCWD, "/var/lib/systemd/home/"); + if (r < 0) + log_warning_errno(r, "Failed to sync /var/lib/systemd/home/, ignoring: %m"); + return 1; }