All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] x86/AMD-ucode: correct multiple container handling
@ 2014-12-15  9:16 Jan Beulich
  2014-12-15 11:29 ` Andrew Cooper
  0 siblings, 1 reply; 3+ messages in thread
From: Jan Beulich @ 2014-12-15  9:16 UTC (permalink / raw)
  To: xen-devel; +Cc: Keir Fraser, Aravind Gopalakrishnan

[-- Attachment #1: Type: text/plain, Size: 1881 bytes --]

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 <jbeulich@suse.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"




[-- Attachment #2: x86-AMD-ucode-flow.patch --]
[-- Type: text/plain, Size: 1929 bytes --]

x86/AMD-ucode: correct multiple container handling

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 <jbeulich@suse.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"

[-- Attachment #3: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] x86/AMD-ucode: correct multiple container handling
  2014-12-15  9:16 [PATCH] x86/AMD-ucode: correct multiple container handling Jan Beulich
@ 2014-12-15 11:29 ` Andrew Cooper
  2014-12-15 15:57   ` Aravind Gopalakrishnan
  0 siblings, 1 reply; 3+ messages in thread
From: Andrew Cooper @ 2014-12-15 11:29 UTC (permalink / raw)
  To: Jan Beulich, xen-devel; +Cc: Aravind Gopalakrishnan, Keir Fraser


[-- Attachment #1.1: Type: text/plain, Size: 2240 bytes --]

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 <jbeulich@suse.com>

Reviewed-by: Andrew Cooper <andrew.cooper3@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


[-- Attachment #1.2: Type: text/html, Size: 3006 bytes --]

[-- Attachment #2: Type: text/plain, Size: 126 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
http://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] x86/AMD-ucode: correct multiple container handling
  2014-12-15 11:29 ` Andrew Cooper
@ 2014-12-15 15:57   ` Aravind Gopalakrishnan
  0 siblings, 0 replies; 3+ messages in thread
From: Aravind Gopalakrishnan @ 2014-12-15 15:57 UTC (permalink / raw)
  To: Andrew Cooper, Jan Beulich, xen-devel; +Cc: Keir Fraser

On 12/15/2014 5:29 AM, Andrew Cooper wrote:
> 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<jbeulich@suse.com>
>
> Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
>
>

Reviewed-by: Aravind Gopalakrishnan <Aravind.Gopalakrishnan@amd.com>

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-12-15 15:57 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-12-15  9:16 [PATCH] x86/AMD-ucode: correct multiple container handling Jan Beulich
2014-12-15 11:29 ` Andrew Cooper
2014-12-15 15:57   ` Aravind Gopalakrishnan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.