aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPavel Roskin <proski@gnu.org>2007-06-16 03:39:02 -0400
committerGuido Guenther <agx@sigxcpu.org>2007-06-16 13:42:58 +0200
commit14452d5c8535fb4428028958343f58c1132099a5 (patch)
tree7a4e86a80078d17ca505a9b3efb7db3bfc1757ad
parent680c2d475e9d902239a15d85eb8ab6778974624c (diff)
[PATCH] Simplify at76_set_card_command()
Add "data" field to struct at76_command to avoid dubious code to access data beyound the end of structure. Don't make handle 0-byte buffer as a special case. Avoid extra indentation. Signed-off-by: Pavel Roskin <proski@gnu.org>
-rw-r--r--at76_usb.c29
-rw-r--r--at76_usb.h1
2 files changed, 14 insertions, 16 deletions
diff --git a/at76_usb.c b/at76_usb.c
index 99f6eb6..3e555e2 100644
--- a/at76_usb.c
+++ b/at76_usb.c
@@ -788,23 +788,20 @@ static int at76_set_card_command(struct usb_device *udev, int cmd, void *buf,
struct at76_command *cmd_buf = kmalloc(sizeof(struct at76_command) +
buf_size, GFP_KERNEL);
- if (cmd_buf) {
- cmd_buf->cmd = cmd;
- cmd_buf->reserved = 0;
- cmd_buf->size = cpu_to_le16(buf_size);
- if (buf_size > 0)
- memcpy(&(cmd_buf[1]), buf, buf_size);
- ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0),
- 0x0e, DEVICE_VENDOR_REQUEST_OUT,
- 0, 0,
- cmd_buf,
- sizeof(struct at76_command) +
- buf_size, USB_CTRL_GET_TIMEOUT);
- kfree(cmd_buf);
- return ret;
- }
+ if (!cmd_buf)
+ return -ENOMEM;
- return -ENOMEM;
+ cmd_buf->cmd = cmd;
+ cmd_buf->reserved = 0;
+ cmd_buf->size = cpu_to_le16(buf_size);
+ memcpy(cmd_buf->data, buf, buf_size);
+
+ ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 0x0e,
+ DEVICE_VENDOR_REQUEST_OUT, 0, 0, cmd_buf,
+ sizeof(struct at76_command) + buf_size,
+ USB_CTRL_GET_TIMEOUT);
+ kfree(cmd_buf);
+ return ret;
}
#define MAKE_CMD_STATUS_CASE(c) case (c): return #c
diff --git a/at76_usb.h b/at76_usb.h
index 46a2d7a..0854ad7 100644
--- a/at76_usb.h
+++ b/at76_usb.h
@@ -178,6 +178,7 @@ struct at76_command {
u8 cmd;
u8 reserved;
__le16 size;
+ u8 data[0];
} __attribute__ ((packed));
/* the length of the Atmel firmware specific rx header before IEEE 802.11 starts */