Bugzilla – Attachment 529841 Details for
Bug 808594
bug in double signing shim
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Forgot Password
[patch]
pesign patch to align signatures
pesign-align.patch (text/plain), 2.49 KB, created by
Gary Ching-Pang Lin
on 2013-03-15 06:58:58 UTC
(
hide
)
Description:
pesign patch to align signatures
Filename:
MIME Type:
Creator:
Gary Ching-Pang Lin
Created:
2013-03-15 06:58:58 UTC
Size:
2.49 KB
patch
obsolete
>diff --git a/libdpe/pe_allocspace.c b/libdpe/pe_allocspace.c >index 0ae1f5d..b64bded 100644 >--- a/libdpe/pe_allocspace.c >+++ b/libdpe/pe_allocspace.c >@@ -80,13 +80,15 @@ pe_set_image_size(Pe *pe) > return 0; > } > >+#define EXTRA_OFFSET(offset,align) ((align - (offset % align)) % align) >+ > static int > pe_extend_file(Pe *pe, size_t size, uint32_t *new_space, int align) > { > void *new = NULL; > > if (align) >- align = (pe->maximum_size + size) % align; >+ align = EXTRA_OFFSET(pe->maximum_size, align); > int extra = size + align; > > int rc = ftruncate(pe->fildes, pe->maximum_size + extra); >@@ -119,7 +121,7 @@ pe_allocspace(Pe *pe, size_t size, uint32_t *offset) > > /* XXX PJFIX TODO: this should try to find space in the already > * mapped regions. */ >- rc = pe_extend_file(pe, size, offset, 0); >+ rc = pe_extend_file(pe, size, offset, 8); > if (rc < 0) > return -1; > return 0; >diff --git a/src/wincert.c b/src/wincert.c >index 4197a87..c6fdbf9 100644 >--- a/src/wincert.c >+++ b/src/wincert.c >@@ -19,6 +19,8 @@ > > #include "pesign.h" > >+#define EXTRA_OFFSET(offset,align) ((align - (offset % align)) % align) >+ > struct cert_list_entry { > win_certificate wc; > uint8_t data[]; >@@ -32,6 +34,7 @@ generate_cert_list(SECItem **signatures, int num_signatures, > for (int i = 0; i < num_signatures; i++) { > cl_size += sizeof (win_certificate); > cl_size += signatures[i]->len; >+ cl_size += EXTRA_OFFSET(cl_size, 8); > } > > uint8_t *data = malloc(cl_size); >@@ -44,12 +47,14 @@ generate_cert_list(SECItem **signatures, int num_signatures, > for (int i = 0; i < num_signatures; i++) { > struct cert_list_entry *cle = (struct cert_list_entry *)data; > cle->wc.length = signatures[i]->len + >+ EXTRA_OFFSET(signatures[i]->len, 8) + > sizeof (win_certificate); > cle->wc.revision = WIN_CERT_REVISION_2_0; > cle->wc.cert_type = WIN_CERT_TYPE_PKCS_SIGNED_DATA; > memcpy(&cle->data[0], signatures[i]->data, > signatures[i]->len); > data += sizeof (win_certificate) + signatures[i]->len; >+ data += EXTRA_OFFSET(signatures[i]->len, 8); > } > > return 0; >@@ -208,8 +213,10 @@ size_t > get_reserved_sig_space(cms_context *cms, Pe *pe) > { > size_t ret = 0; >- for (int i = 0; i < cms->num_signatures; i++) >+ for (int i = 0; i < cms->num_signatures; i++) { > ret += cms->signatures[i]->len + sizeof (win_certificate); >+ ret += EXTRA_OFFSET(ret, 8); >+ } > return ret; > } > >@@ -240,6 +247,7 @@ err: > > ssize_t ret = res + sig.len + sizeof(win_certificate) - > available_cert_space(pe); >+ ret += EXTRA_OFFSET(ret, 8); > > //free(sig.data); >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
Actions:
View
|
Diff
Attachments on
bug 808594
:
529841
|
531762
|
532050