From 0886bc7afdd7372b344010e9079b5c14f698dedb Mon Sep 17 00:00:00 2001 From: Ondrej Kozina Date: Tue, 30 Jul 2019 10:59:18 +0200 Subject: [PATCH] Check for error sooner while assigning reencryption segments. Also wraps function parameters definition. --- lib/luks2/luks2_reencrypt.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/luks2/luks2_reencrypt.c b/lib/luks2/luks2_reencrypt.c index 64375817..9483d686 100644 --- a/lib/luks2/luks2_reencrypt.c +++ b/lib/luks2/luks2_reencrypt.c @@ -1556,10 +1556,14 @@ static int _assign_segments_simple(struct crypt_device *cd, return commit ? LUKS2_hdr_write(cd, hdr) : 0; } -static int reenc_assign_segments(struct crypt_device *cd, struct luks2_hdr *hdr, struct luks2_reenc_context *rh, unsigned pre, unsigned commit) +static int reenc_assign_segments(struct crypt_device *cd, + struct luks2_hdr *hdr, + struct luks2_reenc_context *rh, + unsigned pre, + unsigned commit) { bool forward; - int r, rseg, scount; + int rseg, scount, r = -EINVAL; /* FIXME: validate in reencrypt context load */ if (rh->digest_new < 0 && rh->type != DECRYPT) @@ -1582,8 +1586,10 @@ static int reenc_assign_segments(struct crypt_device *cd, struct luks2_hdr *hdr, r = LUKS2_segments_set(cd, hdr, rh->jobj_segs_after, 0); if (!r) rh->jobj_segs_after = NULL; - } else - return -EINVAL; + } + + if (r) + return r; scount = LUKS2_segments_count(hdr); @@ -1609,10 +1615,6 @@ static int reenc_assign_segments(struct crypt_device *cd, struct luks2_hdr *hdr, LUKS2_digest_segment_assign(cd, hdr, 1, forward ? rh->digest_old : rh->digest_new, 1, 0); } - /* FIXME: this doesn't look right */ - if (r) - return r; - r = _add_backup_segment(cd, hdr, rh, 0); if (r) { log_dbg(cd, "Failed to assign pre reencryption backup segment.");