From b3c58e3b9237f90e865723837a9389fcb25f6945 Mon Sep 17 00:00:00 2001 From: Gary Ching-Pang Lin Date: Tue, 1 Jul 2014 14:43:35 +0800 Subject: [PATCH] authvar: fix the write loop I forgot to move the pointer... Also use offsetof() instead of the wordsize check. Signed-off-by: Gary Ching-Pang Lin --- src/authvar_context.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) Index: pesign-115/src/authvar_context.c =================================================================== --- pesign-115.orig/src/authvar_context.c +++ pesign-115/src/authvar_context.c @@ -151,6 +151,7 @@ write_authvar(authvar_context *ctx) void *buffer, *ptr; size_t buf_len, des_len, remain; ssize_t wlen; + off_t offset; if (!ctx->authinfo) cmsreterr(-1, ctx->cms_ctx, "Not a valid authvar"); @@ -179,19 +180,19 @@ write_authvar(authvar_context *ctx) if (ctx->value_size > 0) memcpy(ptr, ctx->value, ctx->value_size); - if (!ctx->to_firmware) { - ftruncate(ctx->exportfd, buf_len); + if (!ctx->to_firmware) lseek(ctx->exportfd, 0, SEEK_SET); - } remain = buf_len; + offset = 0; do { - wlen = write(ctx->exportfd, buffer, remain); + wlen = write(ctx->exportfd, buffer + offset, remain); if (wlen < 0) { free(buffer); cmsreterr(-1, ctx->cms_ctx, "failed to write authvar"); } remain -= wlen; + offset += wlen; } while (remain > 0); free(buffer);