Message ID | 20180424130618.18211-1-colin.king@canonical.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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.
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.
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.
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
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",