On 15/12/14 09:16, Jan Beulich wrote: > Avoid emitting an error message referring to an incorrect or corrupt > container file just because no entry was found for the running CPU. > > Additionally switch the order of data validation and consumption in > cpu_request_microcode()'s first loop, and also check the types of > skipped blocks in container_fast_forward(). > > Signed-off-by: Jan Beulich <jbeul...@suse.com>
Reviewed-by: Andrew Cooper <andrew.coop...@citrix.com> > > --- a/xen/arch/x86/microcode_amd.c > +++ b/xen/arch/x86/microcode_amd.c > @@ -331,12 +331,17 @@ static int container_fast_forward(const > header[1] == UCODE_EQUIV_CPU_TABLE_TYPE ) > break; > > + if ( header[0] != UCODE_UCODE_TYPE ) > + return -EINVAL; > size = header[1] + SECTION_HDR_SIZE; > if ( size < PATCH_HDR_SIZE || size_left < size ) > return -EINVAL; > > size_left -= size; > *offset += size; > + > + if ( !size_left ) > + return -ENODATA; > } > > return 0; > @@ -386,10 +391,6 @@ static int cpu_request_microcode(int cpu > break; > } > > - if ( find_equiv_cpu_id(mc_amd->equiv_cpu_table, current_cpu_id, > - &equiv_cpu_id) ) > - break; > - > /* > * Could happen as we advance 'offset' early > * in install_equiv_cpu_table > @@ -401,7 +402,16 @@ static int cpu_request_microcode(int cpu > break; > } > > + if ( find_equiv_cpu_id(mc_amd->equiv_cpu_table, current_cpu_id, > + &equiv_cpu_id) ) > + break; > + > error = container_fast_forward(buf, bufsize - offset, &offset); > + if ( error == -ENODATA ) > + { > + ASSERT(offset == bufsize); > + break; > + } > if ( error ) > { > printk(KERN_ERR "microcode: CPU%d incorrect or corrupt container > file\n" > > > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel
_______________________________________________ Xen-devel mailing list Xen-devel@lists.xen.org http://lists.xen.org/xen-devel