[next] media: ispstat: don't dereference user_cfg before a null check
diff mbox

Message ID 20180424130618.18211-1-colin.king@canonical.com
State New
Headers show

Commit Message

Colin King April 24, 2018, 1:06 p.m. UTC
From: Colin Ian King <colin.king@canonical.com>

The pointer user_cfg (a copy of new_conf) is dereference before
new_conf is null checked, hence we may have a null pointer dereference
on user_cfg when assigning buf_size from user_cfg->buf_size. Ensure
this does not occur by moving the assignment of buf_size after the
null check.

Detected by CoverityScan, CID#1468386 ("Dereference before null check")

Fixes: 68e342b3068c ("[media] omap3isp: Statistics")
Signed-off-by: Colin Ian King <colin.king@canonical.com>
---
 drivers/media/platform/omap3isp/ispstat.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Sakari Ailus April 26, 2018, 8:37 a.m. UTC | #1
On Tue, Apr 24, 2018 at 02:06:18PM +0100, Colin King wrote:
> From: Colin Ian King <colin.king@canonical.com>
> 
> The pointer user_cfg (a copy of new_conf) is dereference before
> new_conf is null checked, hence we may have a null pointer dereference
> on user_cfg when assigning buf_size from user_cfg->buf_size. Ensure
> this does not occur by moving the assignment of buf_size after the
> null check.
> 
> Detected by CoverityScan, CID#1468386 ("Dereference before null check")
> 
> Fixes: 68e342b3068c ("[media] omap3isp: Statistics")
> Signed-off-by: Colin Ian King <colin.king@canonical.com>

Thanks for the patch.

Gustavo sent effectively the same patch a moment earlier, and that patch
got applied instead.
Laurent Pinchart April 26, 2018, 10:03 a.m. UTC | #2
Hi Sakari,

On Thursday, 26 April 2018 11:37:31 EEST Sakari Ailus wrote:
> On Tue, Apr 24, 2018 at 02:06:18PM +0100, Colin King wrote:
> > From: Colin Ian King <colin.king@canonical.com>
> > 
> > The pointer user_cfg (a copy of new_conf) is dereference before
> > new_conf is null checked, hence we may have a null pointer dereference
> > on user_cfg when assigning buf_size from user_cfg->buf_size. Ensure
> > this does not occur by moving the assignment of buf_size after the
> > null check.
> > 
> > Detected by CoverityScan, CID#1468386 ("Dereference before null check")
> > 
> > Fixes: 68e342b3068c ("[media] omap3isp: Statistics")
> > Signed-off-by: Colin Ian King <colin.king@canonical.com>
> 
> Thanks for the patch.
> 
> Gustavo sent effectively the same patch a moment earlier, and that patch
> got applied instead.

Isn't there a guarantee that new_buf won't be NULL ? The new_buf pointer comes 
from the parg variable in video_usercopy(), which should always point to a 
valid buffer given that the ioctl number specifies a non-zero size.
Sakari Ailus April 30, 2018, 3:15 p.m. UTC | #3
On Thu, Apr 26, 2018 at 01:03:15PM +0300, Laurent Pinchart wrote:
> Hi Sakari,
> 
> On Thursday, 26 April 2018 11:37:31 EEST Sakari Ailus wrote:
> > On Tue, Apr 24, 2018 at 02:06:18PM +0100, Colin King wrote:
> > > From: Colin Ian King <colin.king@canonical.com>
> > > 
> > > The pointer user_cfg (a copy of new_conf) is dereference before
> > > new_conf is null checked, hence we may have a null pointer dereference
> > > on user_cfg when assigning buf_size from user_cfg->buf_size. Ensure
> > > this does not occur by moving the assignment of buf_size after the
> > > null check.
> > > 
> > > Detected by CoverityScan, CID#1468386 ("Dereference before null check")
> > > 
> > > Fixes: 68e342b3068c ("[media] omap3isp: Statistics")
> > > Signed-off-by: Colin Ian King <colin.king@canonical.com>
> > 
> > Thanks for the patch.
> > 
> > Gustavo sent effectively the same patch a moment earlier, and that patch
> > got applied instead.
> 
> Isn't there a guarantee that new_buf won't be NULL ? The new_buf pointer comes 
> from the parg variable in video_usercopy(), which should always point to a 
> valid buffer given that the ioctl number specifies a non-zero size.

Fair question. After looking at the code, I agree with you; there should be
no reason to perform the check in the first place. It may have been that
the function has been used differently in the past but the check should be
rather removed now.

I'll drop the patch.
Gustavo A. R. Silva April 30, 2018, 3:26 p.m. UTC | #4
Hi Sakari,

On 04/30/2018 10:15 AM, Sakari Ailus wrote:
>> Isn't there a guarantee that new_buf won't be NULL ? The new_buf pointer comes
>> from the parg variable in video_usercopy(), which should always point to a
>> valid buffer given that the ioctl number specifies a non-zero size.
> 
> Fair question. After looking at the code, I agree with you; there should be
> no reason to perform the check in the first place. It may have been that
> the function has been used differently in the past but the check should be
> rather removed now.
> 
> I'll drop the patch.
> 

Please, if the check isn't needed anymore, make sure it is removed.

This helps to reduce the number of false positives reported by static 
analyzers.

Thanks
--
Gustavo

Patch
diff mbox

diff --git a/drivers/media/platform/omap3isp/ispstat.c b/drivers/media/platform/omap3isp/ispstat.c
index 0b31f6c5791f..38cb1b2cc672 100644
--- a/drivers/media/platform/omap3isp/ispstat.c
+++ b/drivers/media/platform/omap3isp/ispstat.c
@@ -523,7 +523,7 @@  int omap3isp_stat_config(struct ispstat *stat, void *new_conf)
 	int ret;
 	unsigned long irqflags;
 	struct ispstat_generic_config *user_cfg = new_conf;
-	u32 buf_size = user_cfg->buf_size;
+	u32 buf_size;
 
 	if (!new_conf) {
 		dev_dbg(stat->isp->dev, "%s: configuration is NULL\n",
@@ -532,6 +532,7 @@  int omap3isp_stat_config(struct ispstat *stat, void *new_conf)
 	}
 
 	mutex_lock(&stat->ioctl_lock);
+	buf_size = user_cfg->buf_size;
 
 	dev_dbg(stat->isp->dev,
 		"%s: configuring module with buffer size=0x%08lx\n",