diff options
Diffstat (limited to 'drivers/net/wireless/rndis_wlan.c')
| -rw-r--r-- | drivers/net/wireless/rndis_wlan.c | 19 | 
1 files changed, 6 insertions, 13 deletions
diff --git a/drivers/net/wireless/rndis_wlan.c b/drivers/net/wireless/rndis_wlan.c index 82a7458e01ae..bf72e5fd39cf 100644 --- a/drivers/net/wireless/rndis_wlan.c +++ b/drivers/net/wireless/rndis_wlan.c @@ -696,8 +696,8 @@ static int rndis_query_oid(struct usbnet *dev, u32 oid, void *data, int *len)  		struct rndis_query	*get;  		struct rndis_query_c	*get_c;  	} u; -	int ret, buflen; -	int resplen, respoffs, copylen; +	int ret; +	size_t buflen, resplen, respoffs, copylen;  	buflen = *len + sizeof(*u.get);  	if (buflen < CONTROL_BUFFER_SIZE) @@ -732,22 +732,15 @@ static int rndis_query_oid(struct usbnet *dev, u32 oid, void *data, int *len)  		if (respoffs > buflen) {  			/* Device returned data offset outside buffer, error. */ -			netdev_dbg(dev->net, "%s(%s): received invalid " -				"data offset: %d > %d\n", __func__, -				oid_to_string(oid), respoffs, buflen); +			netdev_dbg(dev->net, +				   "%s(%s): received invalid data offset: %zu > %zu\n", +				   __func__, oid_to_string(oid), respoffs, buflen);  			ret = -EINVAL;  			goto exit_unlock;  		} -		if ((resplen + respoffs) > buflen) { -			/* Device would have returned more data if buffer would -			 * have been big enough. Copy just the bits that we got. -			 */ -			copylen = buflen - respoffs; -		} else { -			copylen = resplen; -		} +		copylen = min(resplen, buflen - respoffs);  		if (copylen > *len)  			copylen = *len;  | 
