On Fri, Feb 15, 2019 at 01:33:24PM +0800, kbuild test robot wrote:
> tree:   https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb.git 
> usb-testing
> head:   09aa11cfda9d8186046bcd1adcd6498b688114f4
> commit: 96a6d031ca9930938bd66d0052fc7ed2b56e3583 [63/64] usb: typec: mux: 
> Find the muxes by also matching against the device node
> 
> smatch warnings:
> drivers/usb/typec/mux.c:167 typec_mux_match() warn: unsigned 'nval' is never 
> less than zero.

I'm assuming this means we should not use type 'size_t' in this case.

I'll send a patch where I'll use 'int' instead if 'size_t'.

> vim +/nval +167 drivers/usb/typec/mux.c
> 
>    124        
>    125        static void *typec_mux_match(struct device_connection *con, int 
> ep, void *data)
>    126        {
>    127                const struct typec_altmode_desc *desc = data;
>    128                struct typec_mux *mux;
>    129                size_t nval;
>    130                bool match;
>    131                u16 *val;
>    132                int i;
>    133        
>    134                if (!con->fwnode) {
>    135                        list_for_each_entry(mux, &mux_list, entry)
>    136                                if (!strcmp(con->endpoint[ep], 
> dev_name(mux->dev)))
>    137                                        return mux;
>    138                        return ERR_PTR(-EPROBE_DEFER);
>    139                }
>    140        
>    141                /*
>    142                 * Check has the identifier already been "consumed". If 
> it
>    143                 * has, no need to do any extra connection 
> identification.
>    144                 */
>    145                match = !con->id;
>    146                if (match)
>    147                        goto find_mux;
>    148        
>    149                /* Accessory Mode muxes */
>    150                if (!desc) {
>    151                        match = fwnode_property_present(con->fwnode, 
> "accessory");
>    152                        if (match)
>    153                                goto find_mux;
>    154                        return NULL;
>    155                }
>    156        
>    157                /* Alternate Mode muxes */
>    158                nval = fwnode_property_read_u16_array(con->fwnode, 
> "svid", NULL, 0);
>    159                if (nval <= 0)
>    160                        return NULL;
>    161        
>    162                val = kcalloc(nval, sizeof(*val), GFP_KERNEL);
>    163                if (!val)
>    164                        return ERR_PTR(-ENOMEM);
>    165        
>    166                nval = fwnode_property_read_u16_array(con->fwnode, 
> "svid", val, nval);
>  > 167                if (nval < 0) {
>    168                        kfree(val);
>    169                        return ERR_PTR(nval);
>    170                }
>    171        
>    172                for (i = 0; i < nval; i++) {
>    173                        match = val[i] == desc->svid;
>    174                        if (match) {
>    175                                kfree(val);
>    176                                goto find_mux;
>    177                        }
>    178                }
>    179                kfree(val);
>    180                return NULL;
>    181        
>    182        find_mux:
>    183                list_for_each_entry(mux, &mux_list, entry)
>    184                        if (dev_fwnode(mux->dev) == con->fwnode)
>    185                                return mux;
>    186        
>    187                return match ? ERR_PTR(-EPROBE_DEFER) : NULL;
>    188        }
>    189        

thanks,

-- 
heikki

Reply via email to