diff mbox

HID: picoLCD: fix a NULL test in picolcd_raw_cir()

Message ID 20120907064740.GB12028@elgon.mountain (mailing list archive)
State New, archived
Delegated to: Jiri Kosina
Headers show

Commit Message

Dan Carpenter Sept. 7, 2012, 6:47 a.m. UTC
Smatch complains that the NULL checking in this function is not
consistent and could lead to a NULL dereference.  The comments say that
we should return here if rc_dev is NULL so I've changed the test to
match the comment.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
---
Only needed in linux-next.  This is a static checker fix and I don't
have the hardware to test it.  Please review carefully.

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

Bruno Prémont Sept. 7, 2012, 9:38 p.m. UTC | #1
On Fri, 07 September 2012 Dan Carpenter <dan.carpenter@oracle.com> wrote:
> Smatch complains that the NULL checking in this function is not
> consistent and could lead to a NULL dereference.  The comments say that
> we should return here if rc_dev is NULL so I've changed the test to
> match the comment.

Good catch! Currently thanks to HID mutex around probe()/remove()
we should never be able to see rc_dev being NULL here.


Once the probe()/remove() mutex gets tied to hw_start()/hw_stop() or
otherwise changed to allow drivers to chat with device during probe()
->rc_dev might be NULL in picolcd_raw_cir().


Reviewed-by: Bruno Prémont <bonbons@linux-vserver.org>

Jiri, please apply to picolcd branch.

Thanks,
Bruno


> Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
> ---
> Only needed in linux-next.  This is a static checker fix and I don't
> have the hardware to test it.  Please review carefully.
> 
> diff --git a/drivers/hid/hid-picolcd_cir.c b/drivers/hid/hid-picolcd_cir.c
> index 14c5ce0..13ca919 100644
> --- a/drivers/hid/hid-picolcd_cir.c
> +++ b/drivers/hid/hid-picolcd_cir.c
> @@ -51,7 +51,7 @@ int picolcd_raw_cir(struct picolcd_data *data,
>  
>  	/* ignore if rc_dev is NULL or status is shunned */
>  	spin_lock_irqsave(&data->lock, flags);
> -	if (data->rc_dev && (data->status & PICOLCD_CIR_SHUN)) {
> +	if (!data->rc_dev || (data->status & PICOLCD_CIR_SHUN)) {
>  		spin_unlock_irqrestore(&data->lock, flags);
>  		return 1;
>  	}
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jiri Kosina Sept. 8, 2012, 7:20 p.m. UTC | #2
On Fri, 7 Sep 2012, Bruno Prémont wrote:

> > Smatch complains that the NULL checking in this function is not
> > consistent and could lead to a NULL dereference.  The comments say that
> > we should return here if rc_dev is NULL so I've changed the test to
> > match the comment.
> 
> Good catch! Currently thanks to HID mutex around probe()/remove()
> we should never be able to see rc_dev being NULL here.
> 
> 
> Once the probe()/remove() mutex gets tied to hw_start()/hw_stop() or
> otherwise changed to allow drivers to chat with device during probe()
> ->rc_dev might be NULL in picolcd_raw_cir().
> 
> 
> Reviewed-by: Bruno Prémont <bonbons@linux-vserver.org>

Applied, thanks Dan, thanks Bruno.
diff mbox

Patch

diff --git a/drivers/hid/hid-picolcd_cir.c b/drivers/hid/hid-picolcd_cir.c
index 14c5ce0..13ca919 100644
--- a/drivers/hid/hid-picolcd_cir.c
+++ b/drivers/hid/hid-picolcd_cir.c
@@ -51,7 +51,7 @@  int picolcd_raw_cir(struct picolcd_data *data,
 
 	/* ignore if rc_dev is NULL or status is shunned */
 	spin_lock_irqsave(&data->lock, flags);
-	if (data->rc_dev && (data->status & PICOLCD_CIR_SHUN)) {
+	if (!data->rc_dev || (data->status & PICOLCD_CIR_SHUN)) {
 		spin_unlock_irqrestore(&data->lock, flags);
 		return 1;
 	}