On Thu, Aug 24, 2017 at 10:47:14PM +0200, Borislav Petkov wrote:
> diff --git a/arch/x86/kernel/cpu/microcode/intel.c 
> b/arch/x86/kernel/cpu/microcode/intel.c
> index 59edbe9d4ccb..0179f0fd8a79 100644
> --- a/arch/x86/kernel/cpu/microcode/intel.c
> +++ b/arch/x86/kernel/cpu/microcode/intel.c
> @@ -146,7 +146,7 @@ static bool microcode_matches(struct 
> microcode_header_intel *mc_header,
>       return false;
>  }
>  
> -static struct ucode_patch *__alloc_microcode_buf(void *data, unsigned int 
> size)
> +static struct ucode_patch *memdup_patch(void *data, unsigned int size)
>  {
>       struct ucode_patch *p;
>  
> @@ -183,11 +183,13 @@ static void save_microcode_patch(void *data, unsigned 
> int size)
>                       if (mc_hdr->rev <= mc_saved_hdr->rev)
>                               continue;
>  
> -                     p = __alloc_microcode_buf(data, size);
> -                     if (IS_ERR(p))
> +                     p = memdup_patch(data, size);
> +                     if (IS_ERR(p)) {
>                               pr_err("Error allocating buffer %p\n", data);
> -                     else
> -                             list_replace(&iter->plist, &p->plist);
> +                             continue;
> +                     }
> +
> +                     list_replace(&iter->plist, &p->plist);
>               }
>       }
>  

This is just cleanups and doesn't change the behavior.

> @@ -196,11 +198,12 @@ static void save_microcode_patch(void *data, unsigned 
> int size)
>        * newly found.
>        */
>       if (!prev_found) {
> -             p = __alloc_microcode_buf(data, size);
> -             if (IS_ERR(p))
> +             p = memdup_patch(data, size);
> +             if (IS_ERR(p)) {
>                       pr_err("Error allocating buffer for %p\n", data);
> -             else
> -                     list_add_tail(&p->plist, &microcode_cache);
> +                     return;
> +             }
> +             list_add_tail(&p->plist, &microcode_cache);
>       }

The static checker is still going to complain about the error pointer
from the loop.  Perhaps we should only set prev_found if the memdup_patch()
inside the loop succeeds?

regards,
dan carpenter

Reply via email to