Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.0:Staging:D
pesign
pesign-fix-authvar-write-loop.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File pesign-fix-authvar-write-loop.patch of Package pesign
From e3aee739b92c4124fc1207fb06a7dd1cd89d03ae Mon Sep 17 00:00:00 2001 From: Gary Ching-Pang Lin <glin@suse.com> 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 <glin@suse.com> --- src/authvar_context.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/src/authvar_context.c b/src/authvar_context.c index c988e96..675967c 100644 --- a/src/authvar_context.c +++ b/src/authvar_context.c @@ -18,6 +18,7 @@ */ #include <unistd.h> +#include <stddef.h> #include <sys/mman.h> #include <prerror.h> @@ -133,11 +134,7 @@ generate_descriptor(authvar_context *ctx) if (rc < 0) cmsreterr(-1, ctx->cms_ctx, "could not create signed data"); -#if __WORDSIZE == 64 - offset = (uint64_t) &((win_cert_uefi_guid_t *)0)->data; -#else - offset = (uint32_t) &((win_cert_uefi_guid_t *)0)->data; -#endif + offset = offsetof(win_cert_uefi_guid_t, data); authinfo = calloc(offset + sd_der.len, 1); if (!authinfo) cmsreterr(-1, ctx->cms_ctx, "could not allocate authinfo"); @@ -160,6 +157,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"); @@ -187,17 +185,17 @@ 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) cmsreterr(-1, ctx->cms_ctx, "failed to write authvar"); remain -= wlen; + offset += wlen; } while (remain > 0); return 0; -- 1.8.4.5
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor