From: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
To: linux-kernel@vger.kernel.org
Cc: H Peter Anvin <hpa@zytor.com>
Subject: [PATCH 8/8] x86, microcode, intel: correct extended signature checksum verification
Date: Wed, 23 Jul 2014 17:10:51 -0300 [thread overview]
Message-ID: <1406146251-8540-9-git-send-email-hmh@hmh.eng.br> (raw)
In-Reply-To: <1406146251-8540-1-git-send-email-hmh@hmh.eng.br>
We have been calculating the checksum for extended signatures in a way that
is very likely to be incompatible with the Intel public documention. This
code dates back to 2003, when the support for the "new microcode format"
was added to the driver by Intel itself.
The extended signature table should be deleted when an extended signature
is "applied" to the main microcode patch if the Intel SDM is to be believed
(Intel 64 and IA32 Software Developers Manual, vol 3A, page 9-30, entry for
"Checksum[n]" in table 9-6). Deleting the extended signature table changes
the Total Size of the microcode, and that reflects in the checksum that
should be in the extended signature entry if it is to be used unmodified to
replace the main microcode signature.
It is worth noting that deleting the extended signature table results in a
microcode patch that violates the rule that the Total Size field must be a
multiple of 1024, and it is impossible to add any padding to fix that.
This patch changes the extended signature table checksum verification
code to accept both ways of calculating the extended signature checksum
as valid.
Signed-off-by: Henrique de Moraes Holschuh <hmh@hmh.eng.br>
---
arch/x86/kernel/cpu/microcode/intel_lib.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/arch/x86/kernel/cpu/microcode/intel_lib.c b/arch/x86/kernel/cpu/microcode/intel_lib.c
index 050cd4f..c75f03a 100644
--- a/arch/x86/kernel/cpu/microcode/intel_lib.c
+++ b/arch/x86/kernel/cpu/microcode/intel_lib.c
@@ -135,9 +135,21 @@ int microcode_sanity_check(void *mc, int print_err)
sum = orig_sum
- (mc_header->sig + mc_header->pf + mc_header->cksum)
+ (ext_sig->sig + ext_sig->pf + ext_sig->cksum);
- if (sum) {
+ /*
+ * accept two possibilities for the extended signature entry
+ * checksum: the one we've been using since 2003 (which is
+ * likely incorrect), as well as the one described in the
+ * Intel SDM vol 3A (order #253668-051US, June 2014), table
+ * 9-6, entry for Checksum[n] at page 9-30.
+ *
+ * When one deletes the extended signature table as the Intel
+ * SDM mandates, total_size decreases by ext_table_size, and
+ * so does the checksum, leaving a remainder equal to
+ * ext_table_size in sum.
+ */
+ if (sum != 0 && sum != ext_table_size) {
if (print_err)
- pr_err("aborting, bad checksum\n");
+ pr_err("aborting, bad extended signature checksum\n");
return -EINVAL;
}
}
--
1.7.10.4
next prev parent reply other threads:[~2014-07-23 20:11 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-07-23 20:10 [PATCH 0/8] x86, microcode: cosmetic and minor issue fixes Henrique de Moraes Holschuh
2014-07-23 20:10 ` [PATCH 1/8] x86, microcode, amd: fix missing static declaration Henrique de Moraes Holschuh
2014-07-24 10:24 ` Borislav Petkov
2014-07-23 20:10 ` [PATCH 2/8] x86, microcode, intel: fix missing static declarations Henrique de Moraes Holschuh
2014-07-24 10:28 ` Borislav Petkov
2014-07-23 20:10 ` [PATCH 3/8] x86, microcode, intel: fix typos Henrique de Moraes Holschuh
2014-07-24 10:33 ` Borislav Petkov
2014-07-23 20:10 ` [PATCH 4/8] x86, microcode, intel: fix missing declaration Henrique de Moraes Holschuh
2014-07-24 11:01 ` Borislav Petkov
2014-07-24 14:27 ` Henrique de Moraes Holschuh
2014-07-24 18:23 ` [PATCH v2 4/8] x86, microcode, intel: rename apply_microcode and declare it static Henrique de Moraes Holschuh
2014-07-25 16:23 ` Borislav Petkov
2014-07-23 20:10 ` [PATCH 5/8] x86, microcode, intel: don't use fields from unknown format header Henrique de Moraes Holschuh
2014-07-24 11:37 ` Borislav Petkov
2014-07-24 13:30 ` Henrique de Moraes Holschuh
2014-07-24 14:28 ` Borislav Petkov
2014-07-24 15:07 ` Henrique de Moraes Holschuh
2014-07-24 16:29 ` Borislav Petkov
2014-07-24 17:49 ` Henrique de Moraes Holschuh
2014-07-23 20:10 ` [PATCH 6/8] x86, microcode, intel: total_size is valid only when data_size != 0 Henrique de Moraes Holschuh
2014-07-25 16:46 ` Borislav Petkov
2014-07-25 19:04 ` Henrique de Moraes Holschuh
2014-07-28 14:26 ` Borislav Petkov
2014-07-28 15:39 ` Henrique de Moraes Holschuh
2014-07-23 20:10 ` [PATCH 7/8] x86, microcode, intel: forbid some incorrect metadata Henrique de Moraes Holschuh
2014-07-28 15:31 ` Borislav Petkov
2014-07-28 19:37 ` Henrique de Moraes Holschuh
2014-07-29 10:45 ` Borislav Petkov
2014-07-29 20:25 ` Henrique de Moraes Holschuh
2014-08-04 11:09 ` Borislav Petkov
2014-08-04 20:18 ` Henrique de Moraes Holschuh
2014-08-08 12:54 ` Borislav Petkov
2014-08-08 13:50 ` Henrique de Moraes Holschuh
2014-08-08 15:21 ` Borislav Petkov
2014-08-08 15:45 ` Henrique de Moraes Holschuh
2014-07-23 20:10 ` Henrique de Moraes Holschuh [this message]
2014-07-28 20:36 ` [PATCH 8/8] x86, microcode, intel: correct extended signature checksum verification Henrique de Moraes Holschuh
2014-08-24 14:55 ` [tip:x86/microcode] x86, microcode, amd: Fix missing static declaration tip-bot for Henrique de Moraes Holschuh
2014-08-24 14:55 ` [tip:x86/microcode] x86, microcode, intel: Add missing static declarations tip-bot for Henrique de Moraes Holschuh
2014-08-24 14:56 ` [tip:x86/microcode] x86, microcode, intel: Fix typos tip-bot for Henrique de Moraes Holschuh
2014-08-24 14:56 ` [tip:x86/microcode] x86, microcode, intel: Rename apply_microcode and declare it static tip-bot for Henrique de Moraes Holschuh
2014-08-24 14:56 ` [tip:x86/microcode] x86, microcode, intel: Fix total_size computation tip-bot for Henrique de Moraes Holschuh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1406146251-8540-9-git-send-email-hmh@hmh.eng.br \
--to=hmh@hmh.eng.br \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).