From: Corey Minyard <minyard@acm.org>
To: Jia-Ju Bai <baijiaju1990@gmail.com>
Cc: arnd@arndb.de, gregkh@linuxfoundation.org,
openipmi-developer@lists.sourceforge.net,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] char: ipmi: Fix possible pointer dereferences in msg_done_handler()
Date: Wed, 24 Jul 2019 08:03:49 -0500 [thread overview]
Message-ID: <20190724130349.GI3066@minyard.net> (raw)
In-Reply-To: <20190724102528.2165-1-baijiaju1990@gmail.com>
On Wed, Jul 24, 2019 at 06:25:28PM +0800, Jia-Ju Bai wrote:
> In msg_done_handler(), there is an if statement on line 778 to check
> whether msg is NULL:
> if (msg)
>
> When msg is NULL, it is used on line 845:
> if ((result < 0) || (len < 3) || (msg->rsp[2] != 0))
> and line 869:
> if ((result < 0) || (len < 3) || (msg->rsp[2] != 0))
You cannot get into those states without msg being set, so there
is no need to check for that msg is NULL there. If you look
at those states elsewhere, you can see that curr_msg is set every
time you go into those states.
-corey
>
> Thus, possible null-pointer dereferences may occur.
>
> To fix these bugs, msg is checked before being used.
>
> These bugs are found by a static analysis tool STCheck written by us.
>
> Signed-off-by: Jia-Ju Bai <baijiaju1990@gmail.com>
> ---
> drivers/char/ipmi/ipmi_ssif.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
> index 305fa5054274..2e40a98d9939 100644
> --- a/drivers/char/ipmi/ipmi_ssif.c
> +++ b/drivers/char/ipmi/ipmi_ssif.c
> @@ -842,6 +842,8 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
> break;
>
> case SSIF_GETTING_EVENTS:
> + if (!msg)
> + break;
> if ((result < 0) || (len < 3) || (msg->rsp[2] != 0)) {
> /* Error getting event, probably done. */
> msg->done(msg);
> @@ -866,6 +868,8 @@ static void msg_done_handler(struct ssif_info *ssif_info, int result,
> break;
>
> case SSIF_GETTING_MESSAGES:
> + if (!msg)
> + break;
> if ((result < 0) || (len < 3) || (msg->rsp[2] != 0)) {
> /* Error getting event, probably done. */
> msg->done(msg);
> --
> 2.17.0
>
prev parent reply other threads:[~2019-07-24 13:03 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-07-24 10:25 [PATCH] char: ipmi: Fix possible pointer dereferences in msg_done_handler() Jia-Ju Bai
2019-07-24 13:03 ` Corey Minyard [this message]
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=20190724130349.GI3066@minyard.net \
--to=minyard@acm.org \
--cc=arnd@arndb.de \
--cc=baijiaju1990@gmail.com \
--cc=gregkh@linuxfoundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=openipmi-developer@lists.sourceforge.net \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox