struct microcode_patch {
struct microcode_header_amd *mpb;
- size_t mpb_size;
};
/* Temporary, until the microcode_* structure are disentangled. */
equiv.id != mc_header->processor_rev_id )
return MIS_UCODE;
- if ( !verify_patch_size(mc_amd->mpb_size) )
- {
- pr_debug("microcode: patch size mismatch\n");
- return MIS_UCODE;
- }
-
if ( mc_header->patch_id <= sig->rev )
{
pr_debug("microcode: patch is already at required level or greater.\n");
return -EINVAL;
}
+ if ( !verify_patch_size(mpbuf->len) )
+ {
+ printk(XENLOG_ERR "microcode: patch size mismatch\n");
+ return -EINVAL;
+ }
+
mc_amd->mpb = xmemdup_bytes(mpbuf->data, mpbuf->len);
if ( !mc_amd->mpb )
return -ENOMEM;
- mc_amd->mpb_size = mpbuf->len;
pr_debug("microcode: CPU%d size %zu, block size %u offset %zu equivID %#x rev %#x\n",
smp_processor_id(), bufsize, mpbuf->len, *offset,
struct microcode_amd *mc_amd;
struct microcode_header_amd *saved = NULL;
struct microcode_patch *patch = NULL;
- size_t offset = 0, saved_size = 0;
+ size_t offset = 0;
int error = 0;
unsigned int cpu = smp_processor_id();
const struct cpu_signature *sig = &per_cpu(cpu_sig, cpu);
{
xfree(saved);
saved = mc_amd->mpb;
- saved_size = mc_amd->mpb_size;
}
else
{
if ( saved )
{
mc_amd->mpb = saved;
- mc_amd->mpb_size = saved_size;
patch = mc_amd;
}
else