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

Reply via email to