Re: [bug report] Input: add support for Azoteq IQS7222A/B/C

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Dan,

Thank you for reaching out.

On Tue, Apr 12, 2022 at 11:01:23AM +0300, Dan Carpenter wrote:
> There are a couple other warnings as well:
> 
> drivers/input/misc/iqs7222.c:2214 iqs7222_parse_all() error: NULL dereference inside function 'iqs7222_parse_props()
> drivers/input/misc/iqs7222.c:2234 iqs7222_parse_all() error: NULL dereference inside function 'iqs7222_parse_props()

All three of these code paths are tested and do not lead to a crash; I
am suspicious that the warnings are false positives.

> 
> regards,
> dan carpenter
> 
> On Tue, Apr 12, 2022 at 10:59:37AM +0300, Dan Carpenter wrote:
> > Hello Jeff LaBundy,
> > 
> > The patch e505edaedcb9: "Input: add support for Azoteq IQS7222A/B/C"
> > from Apr 8, 2022, leads to the following Smatch static checker
> > warning:
> > 
> > 	drivers/input/misc/iqs7222.c:2166 iqs7222_parse_all()
> > 	error: NULL dereference inside function 'iqs7222_parse_props()'
> > 
> > drivers/input/misc/iqs7222.c
> >     2150 static int iqs7222_parse_all(struct iqs7222_private *iqs7222)
> >     2151 {
> >     2152         const struct iqs7222_dev_desc *dev_desc = iqs7222->dev_desc;
> >     2153         const struct iqs7222_reg_grp_desc *reg_grps = dev_desc->reg_grps;
> >     2154         u16 *sys_setup = iqs7222->sys_setup;
> >     2155         int error, i;
> >     2156 
> >     2157         if (dev_desc->event_offset)
> >     2158                 sys_setup[dev_desc->event_offset] = IQS7222_EVENT_MASK_ATI;
> >     2159 
> >     2160         for (i = 0; i < reg_grps[IQS7222_REG_GRP_CYCLE].num_row; i++) {
> >     2161                 error = iqs7222_parse_cycle(iqs7222, i);
> >     2162                 if (error)
> >     2163                         return error;
> >     2164         }
> >     2165 
> > --> 2166         error = iqs7222_parse_props(iqs7222, NULL, 0, IQS7222_REG_GRP_GLBL,
> >                                                       ^^^^
> > This NULL is dereferenced inside iqs7222_parse_props() so this will
> > crash.

By design, all calls to iqs7222_parse_props() with **child_node equal
to NULL are accompanied by a value of reg_grp that prevents the pointer
from being dereferenced.

For these specific cases, the pointer is reassigned by way of a switch
block at line 1542 before being dereferenced by fwnode_property_*().

> > 
> >     2167                                     IQS7222_REG_KEY_NONE);
> >     2168         if (error)
> >     2169                 return error;
> >     2170 
> >     2171         for (i = 0; i < reg_grps[IQS7222_REG_GRP_GPIO].num_row; i++) {
> >     2172                 struct fwnode_handle *gpio_node = NULL;
> > 
> > regards,
> > dan carpenter

Please let me know in case I have misunderstood or you feel that I can
make any improvements.

Kind regards,
Jeff LaBundy



[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux