From 11d8c1f2162665a22f493a14b4f23f02e92225c1 Mon Sep 17 00:00:00 2001 From: Jens Axboe Date: Fri, 16 Jan 2015 14:25:15 -0700 Subject: [PATCH] sha256: fix verify failure After the checksumming update, it's required that we call the _final() to get consistent checksums between data generation and data verification. Seems to only affect sha256, but we should do it for sha1 and md5 too. Fixes: f99d67f932ab Signed-off-by: Jens Axboe --- crc/sha1.c | 7 +------ crc/sha1.h | 2 +- verify.c | 6 ++++++ 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/crc/sha1.c b/crc/sha1.c index 117fbd9c..8d64c8ee 100644 --- a/crc/sha1.c +++ b/crc/sha1.c @@ -55,7 +55,7 @@ void fio_sha1_update(struct fio_sha1_ctx *ctx, const void *data, memcpy(ctx->W, data, len); } -void fio_sha1_final(unsigned char hashout[20], struct fio_sha1_ctx *ctx) +void fio_sha1_final(struct fio_sha1_ctx *ctx) { static const unsigned char pad[64] = { 0x80 }; unsigned int padlen[2]; @@ -69,11 +69,6 @@ void fio_sha1_final(unsigned char hashout[20], struct fio_sha1_ctx *ctx) i = ctx->size & 63; fio_sha1_update(ctx, pad, 1+ (63 & (55 - i))); fio_sha1_update(ctx, padlen, 8); - - /* Output hash - */ - for (i = 0; i < 5; i++) - ((unsigned int *)hashout)[i] = htonl(ctx->H[i]); } #if defined(__i386__) || defined(__x86_64__) diff --git a/crc/sha1.h b/crc/sha1.h index 14af44a9..75317f76 100644 --- a/crc/sha1.h +++ b/crc/sha1.h @@ -15,6 +15,6 @@ struct fio_sha1_ctx { void fio_sha1_init(struct fio_sha1_ctx *); void fio_sha1_update(struct fio_sha1_ctx *, const void *dataIn, unsigned long len); -void fio_sha1_final(unsigned char hashout[20], struct fio_sha1_ctx *); +void fio_sha1_final(struct fio_sha1_ctx *); #endif diff --git a/verify.c b/verify.c index 260fa2ae..b6793d7d 100644 --- a/verify.c +++ b/verify.c @@ -472,6 +472,7 @@ static int verify_io_u_sha256(struct verify_header *hdr, struct vcont *vc) fio_sha256_init(&sha256_ctx); fio_sha256_update(&sha256_ctx, p, hdr->len - hdr_size(hdr)); + fio_sha256_final(&sha256_ctx); if (!memcmp(vh->sha256, sha256_ctx.buf, sizeof(sha256))) return 0; @@ -497,6 +498,7 @@ static int verify_io_u_sha1(struct verify_header *hdr, struct vcont *vc) fio_sha1_init(&sha1_ctx); fio_sha1_update(&sha1_ctx, p, hdr->len - hdr_size(hdr)); + fio_sha1_final(&sha1_ctx); if (!memcmp(vh->sha1, sha1_ctx.H, sizeof(sha1))) return 0; @@ -627,6 +629,7 @@ static int verify_io_u_md5(struct verify_header *hdr, struct vcont *vc) fio_md5_init(&md5_ctx); fio_md5_update(&md5_ctx, p, hdr->len - hdr_size(hdr)); + fio_md5_final(&md5_ctx); if (!memcmp(vh->md5_digest, md5_ctx.hash, sizeof(hash))) return 0; @@ -893,6 +896,7 @@ static void fill_sha256(struct verify_header *hdr, void *p, unsigned int len) fio_sha256_init(&sha256_ctx); fio_sha256_update(&sha256_ctx, p, len); + fio_sha256_final(&sha256_ctx); } static void fill_sha1(struct verify_header *hdr, void *p, unsigned int len) @@ -904,6 +908,7 @@ static void fill_sha1(struct verify_header *hdr, void *p, unsigned int len) fio_sha1_init(&sha1_ctx); fio_sha1_update(&sha1_ctx, p, len); + fio_sha1_final(&sha1_ctx); } static void fill_crc7(struct verify_header *hdr, void *p, unsigned int len) @@ -950,6 +955,7 @@ static void fill_md5(struct verify_header *hdr, void *p, unsigned int len) fio_md5_init(&md5_ctx); fio_md5_update(&md5_ctx, p, len); + fio_md5_final(&md5_ctx); } static void populate_hdr(struct thread_data *td, struct io_u *io_u, -- 2.25.1