Commit 84b0b663 authored by Gustavo A. R. Silva's avatar Gustavo A. R. Silva Committed by Kalle Valo

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: default avatarGustavo A. R. Silva <gustavo@embeddedor.com>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent 82f93cf4
...@@ -1597,11 +1597,6 @@ static int zd_ep_regs_out_msg(struct usb_device *udev, void *data, int len, ...@@ -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, static void prepare_read_regs_int(struct zd_usb *usb,
struct usb_req_read_regs *req, struct usb_req_read_regs *req,
unsigned int count) unsigned int count)
...@@ -1636,10 +1631,10 @@ static bool check_read_regs(struct zd_usb *usb, struct usb_req_read_regs *req, ...@@ -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. /* The created block size seems to be larger than expected.
* However results appear to be correct. * 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), dev_dbg_f(zd_usb_dev(usb),
"error: actual length %d less than expected %d\n", "error: actual length %d less than expected %ld\n",
rr->length, usb_int_regs_length(count)); rr->length, struct_size(regs, regs, count));
return false; return false;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment