All of lore.kernel.org
 help / color / mirror / Atom feed
From: Joe Perches <joe@perches.com>
To: Borislav Petkov <bp@alien8.de>, Dan Carpenter <dan.carpenter@oracle.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
	x86@kernel.org, linux-kernel@vger.kernel.org,
	kernel-janitors@vger.kernel.org
Subject: Re: [PATCH v2] x86/microcode: Silence a static checker warning
Date: Thu, 24 Aug 2017 21:02:44 +0000	[thread overview]
Message-ID: <1503608564.12569.15.camel@perches.com> (raw)
In-Reply-To: <20170824204714.jedeaphwmou5qafd@pd.tnic>

On Thu, 2017-08-24 at 22:47 +0200, Borislav Petkov wrote:
> On Thu, Aug 24, 2017 at 11:15:57PM +0300, Dan Carpenter wrote:
> > The code here prints an error if "p" is an error pointer but it still
> > dereferences it at the end of the function when it does:
> > 
> > 	intel_ucode_patch = (struct microcode_intel *)__pa_nodebug(p->data);
> > 
> > We can just return early instead.
> > 
> > Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> > ---
> > v2: return early instead checking for IS_ERR_OR_NULL() at the end.
> > 
> > We have to keep the final check whether "p" is NULL to handle the
> > situation were we set "prev_found = true;" but then hit the continue
> > statement instead of allocating "p".
> 
> I think we want to something more like this (not exit the loop if the
> allocation fails). But I need to look at the again on a clear head:a
> 
> ---
> diff --git 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);

The pr_err could also be deleted as memdup_patch also
just does normal allocations without __GFP_NOWARN so
dump_stack() still would occur.


WARNING: multiple messages have this Message-ID (diff)
From: Joe Perches <joe@perches.com>
To: Borislav Petkov <bp@alien8.de>, Dan Carpenter <dan.carpenter@oracle.com>
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Ingo Molnar <mingo@redhat.com>, "H. Peter Anvin" <hpa@zytor.com>,
	x86@kernel.org, linux-kernel@vger.kernel.org,
	kernel-janitors@vger.kernel.org
Subject: Re: [PATCH v2] x86/microcode: Silence a static checker warning
Date: Thu, 24 Aug 2017 14:02:44 -0700	[thread overview]
Message-ID: <1503608564.12569.15.camel@perches.com> (raw)
In-Reply-To: <20170824204714.jedeaphwmou5qafd@pd.tnic>

On Thu, 2017-08-24 at 22:47 +0200, Borislav Petkov wrote:
> On Thu, Aug 24, 2017 at 11:15:57PM +0300, Dan Carpenter wrote:
> > The code here prints an error if "p" is an error pointer but it still
> > dereferences it at the end of the function when it does:
> > 
> > 	intel_ucode_patch = (struct microcode_intel *)__pa_nodebug(p->data);
> > 
> > We can just return early instead.
> > 
> > Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> > ---
> > v2: return early instead checking for IS_ERR_OR_NULL() at the end.
> > 
> > We have to keep the final check whether "p" is NULL to handle the
> > situation were we set "prev_found = true;" but then hit the continue
> > statement instead of allocating "p".
> 
> I think we want to something more like this (not exit the loop if the
> allocation fails). But I need to look at the again on a clear head:a
> 
> ---
> diff --git 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);

The pr_err could also be deleted as memdup_patch also
just does normal allocations without __GFP_NOWARN so
dump_stack() still would occur.

  parent reply	other threads:[~2017-08-24 21:02 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-22 20:44 [PATCH] x86/microcode/intel: Silence a static checker warning Dan Carpenter
2017-08-22 21:13 ` Borislav Petkov
2017-08-24 20:15   ` [PATCH v2] x86/microcode: " Dan Carpenter
2017-08-24 20:15     ` Dan Carpenter
2017-08-24 20:47     ` Borislav Petkov
2017-08-24 20:47       ` Borislav Petkov
2017-08-24 20:55       ` Dan Carpenter
2017-08-24 20:55         ` Dan Carpenter
2017-08-24 20:58         ` Borislav Petkov
2017-08-24 20:58           ` Borislav Petkov
2017-08-24 21:08           ` Dan Carpenter
2017-08-24 21:08             ` Dan Carpenter
2017-08-24 21:12             ` Borislav Petkov
2017-08-24 21:12               ` Borislav Petkov
2017-08-25  9:06               ` Borislav Petkov
2017-08-25  9:06                 ` Borislav Petkov
2017-08-25  9:12                 ` Dan Carpenter
2017-08-25  9:12                   ` Dan Carpenter
2017-08-25  9:14                   ` Borislav Petkov
2017-08-25  9:14                     ` Borislav Petkov
2017-08-25 10:04                     ` [PATCH] x86/microcode/intel: Improve microcode patches saving flow Borislav Petkov
2017-08-25 10:04                       ` Borislav Petkov
2017-08-25 10:40                       ` walter harms
2017-08-25 10:40                         ` walter harms
2017-08-25 11:41                         ` Borislav Petkov
2017-08-25 11:41                           ` Borislav Petkov
2017-08-29  9:03                       ` [tip:x86/microcode] " tip-bot for Borislav Petkov
2017-08-24 21:02       ` Joe Perches [this message]
2017-08-24 21:02         ` [PATCH v2] x86/microcode: Silence a static checker warning Joe Perches

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1503608564.12569.15.camel@perches.com \
    --to=joe@perches.com \
    --cc=bp@alien8.de \
    --cc=dan.carpenter@oracle.com \
    --cc=hpa@zytor.com \
    --cc=kernel-janitors@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.