zd1211rw: zd_usb: Use struct_size() helper
One of the more common cases of allocation size calculations is finding
the size of a structure that has a zero-sized array at the end, along
with memory for some number of elements for that array. For example:
struct usb_int_regs {
	...
        struct reg_data regs[0];
} __packed;
Make use of the struct_size() helper instead of an open-coded version
in order to avoid any potential type mistakes.
So, replace the following function:
static int usb_int_regs_length(unsigned int count)
{
       return sizeof(struct usb_int_regs) + count * sizeof(struct reg_data);
}
with:
struct_size(regs, regs, count)
This code was detected with the help of Coccinelle.
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
			
			
This commit is contained in:
		
							parent
							
								
									82f93cf46d
								
							
						
					
					
						commit
						84b0b66352
					
				| @ -1597,11 +1597,6 @@ static int zd_ep_regs_out_msg(struct usb_device *udev, void *data, int len, | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| static int usb_int_regs_length(unsigned int count) | ||||
| { | ||||
| 	return sizeof(struct usb_int_regs) + count * sizeof(struct reg_data); | ||||
| } | ||||
| 
 | ||||
| static void prepare_read_regs_int(struct zd_usb *usb, | ||||
| 				  struct usb_req_read_regs *req, | ||||
| 				  unsigned int count) | ||||
| @ -1636,10 +1631,10 @@ static bool check_read_regs(struct zd_usb *usb, struct usb_req_read_regs *req, | ||||
| 	/* The created block size seems to be larger than expected.
 | ||||
| 	 * However results appear to be correct. | ||||
| 	 */ | ||||
| 	if (rr->length < usb_int_regs_length(count)) { | ||||
| 	if (rr->length < struct_size(regs, regs, count)) { | ||||
| 		dev_dbg_f(zd_usb_dev(usb), | ||||
| 			 "error: actual length %d less than expected %d\n", | ||||
| 			 rr->length, usb_int_regs_length(count)); | ||||
| 			 "error: actual length %d less than expected %ld\n", | ||||
| 			 rr->length, struct_size(regs, regs, count)); | ||||
| 		return false; | ||||
| 	} | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user