| .. | .. |
|---|
| 74 | 74 | break; |
|---|
| 75 | 75 | |
|---|
| 76 | 76 | default: |
|---|
| 77 | | - pr_debug("Unknown PEOPT magic = %04hx\n", pe32->magic); |
|---|
| 77 | + pr_warn("Unknown PEOPT magic = %04hx\n", pe32->magic); |
|---|
| 78 | 78 | return -ELIBBAD; |
|---|
| 79 | 79 | } |
|---|
| 80 | 80 | |
|---|
| .. | .. |
|---|
| 95 | 95 | ctx->certs_size = ddir->certs.size; |
|---|
| 96 | 96 | |
|---|
| 97 | 97 | if (!ddir->certs.virtual_address || !ddir->certs.size) { |
|---|
| 98 | | - pr_debug("Unsigned PE binary\n"); |
|---|
| 98 | + pr_warn("Unsigned PE binary\n"); |
|---|
| 99 | 99 | return -ENODATA; |
|---|
| 100 | 100 | } |
|---|
| 101 | 101 | |
|---|
| .. | .. |
|---|
| 127 | 127 | unsigned len; |
|---|
| 128 | 128 | |
|---|
| 129 | 129 | if (ctx->sig_len < sizeof(wrapper)) { |
|---|
| 130 | | - pr_debug("Signature wrapper too short\n"); |
|---|
| 130 | + pr_warn("Signature wrapper too short\n"); |
|---|
| 131 | 131 | return -ELIBBAD; |
|---|
| 132 | 132 | } |
|---|
| 133 | 133 | |
|---|
| .. | .. |
|---|
| 135 | 135 | pr_debug("sig wrapper = { %x, %x, %x }\n", |
|---|
| 136 | 136 | wrapper.length, wrapper.revision, wrapper.cert_type); |
|---|
| 137 | 137 | |
|---|
| 138 | | - /* Both pesign and sbsign round up the length of certificate table |
|---|
| 139 | | - * (in optional header data directories) to 8 byte alignment. |
|---|
| 138 | + /* sbsign rounds up the length of certificate table (in optional |
|---|
| 139 | + * header data directories) to 8 byte alignment. However, the PE |
|---|
| 140 | + * specification states that while entries are 8-byte aligned, this is |
|---|
| 141 | + * not included in their length, and as a result, pesign has not |
|---|
| 142 | + * rounded up since 0.110. |
|---|
| 140 | 143 | */ |
|---|
| 141 | | - if (round_up(wrapper.length, 8) != ctx->sig_len) { |
|---|
| 142 | | - pr_debug("Signature wrapper len wrong\n"); |
|---|
| 144 | + if (wrapper.length > ctx->sig_len) { |
|---|
| 145 | + pr_warn("Signature wrapper bigger than sig len (%x > %x)\n", |
|---|
| 146 | + ctx->sig_len, wrapper.length); |
|---|
| 143 | 147 | return -ELIBBAD; |
|---|
| 144 | 148 | } |
|---|
| 145 | 149 | if (wrapper.revision != WIN_CERT_REVISION_2_0) { |
|---|
| 146 | | - pr_debug("Signature is not revision 2.0\n"); |
|---|
| 150 | + pr_warn("Signature is not revision 2.0\n"); |
|---|
| 147 | 151 | return -ENOTSUPP; |
|---|
| 148 | 152 | } |
|---|
| 149 | 153 | if (wrapper.cert_type != WIN_CERT_TYPE_PKCS_SIGNED_DATA) { |
|---|
| 150 | | - pr_debug("Signature certificate type is not PKCS\n"); |
|---|
| 154 | + pr_warn("Signature certificate type is not PKCS\n"); |
|---|
| 151 | 155 | return -ENOTSUPP; |
|---|
| 152 | 156 | } |
|---|
| 153 | 157 | |
|---|
| .. | .. |
|---|
| 160 | 164 | ctx->sig_offset += sizeof(wrapper); |
|---|
| 161 | 165 | ctx->sig_len -= sizeof(wrapper); |
|---|
| 162 | 166 | if (ctx->sig_len < 4) { |
|---|
| 163 | | - pr_debug("Signature data missing\n"); |
|---|
| 167 | + pr_warn("Signature data missing\n"); |
|---|
| 164 | 168 | return -EKEYREJECTED; |
|---|
| 165 | 169 | } |
|---|
| 166 | 170 | |
|---|
| .. | .. |
|---|
| 194 | 198 | return 0; |
|---|
| 195 | 199 | } |
|---|
| 196 | 200 | not_pkcs7: |
|---|
| 197 | | - pr_debug("Signature data not PKCS#7\n"); |
|---|
| 201 | + pr_warn("Signature data not PKCS#7\n"); |
|---|
| 198 | 202 | return -ELIBBAD; |
|---|
| 199 | 203 | } |
|---|
| 200 | 204 | |
|---|
| .. | .. |
|---|
| 337 | 341 | digest_size = crypto_shash_digestsize(tfm); |
|---|
| 338 | 342 | |
|---|
| 339 | 343 | if (digest_size != ctx->digest_len) { |
|---|
| 340 | | - pr_debug("Digest size mismatch (%zx != %x)\n", |
|---|
| 341 | | - digest_size, ctx->digest_len); |
|---|
| 344 | + pr_warn("Digest size mismatch (%zx != %x)\n", |
|---|
| 345 | + digest_size, ctx->digest_len); |
|---|
| 342 | 346 | ret = -EBADMSG; |
|---|
| 343 | 347 | goto error_no_desc; |
|---|
| 344 | 348 | } |
|---|
| .. | .. |
|---|
| 369 | 373 | * PKCS#7 certificate. |
|---|
| 370 | 374 | */ |
|---|
| 371 | 375 | if (memcmp(digest, ctx->digest, ctx->digest_len) != 0) { |
|---|
| 372 | | - pr_debug("Digest mismatch\n"); |
|---|
| 376 | + pr_warn("Digest mismatch\n"); |
|---|
| 373 | 377 | ret = -EKEYREJECTED; |
|---|
| 374 | 378 | } else { |
|---|
| 375 | 379 | pr_debug("The digests match!\n"); |
|---|