usbhid endianness annotations and fixes
PATCH 1/1 usbhid endianness annotations and fixes
usb_control_msg() converts arguments to little-endian itself, doing that in caller means breakage on big-endian boxen.
Signed-off-by Al Viro <[email protected]>
--- drivers/hid/usbhid/hid-core.c | 2 +- include/linux/hid.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-)
drivers/hid/usbhid/hid-core.c +1 -1
@@ -654,7 +654,7 @@ static int usbhid_output_raw_report(struct hid_device *hid, __u8 *buf, size_t co ret =usb_control_msg (dev,usb_sndctrlpipe (dev,0 ),HID_REQ_SET_REPORT ,USB_DIR_OUT |USB_TYPE_CLASS |USB_RECIP_INTERFACE , -cpu_to_le16 (((HID_OUTPUT_REPORT +1 ) <<8 ) | *buf), + ((HID_OUTPUT_REPORT +1 ) <<8 ) | *buf, interface->desc.bInterfaceNumber, buf +1 , count -1 ,USB_CTRL_SET_TIMEOUT );
include/linux/hid.h +2 -2
@@ -498,13 +498,13 @@ struct hid_parser {struct hid_class_descriptor {__u8 bDescriptorType; -__u16 wDescriptorLength; +__le16 wDescriptorLength; } __attribute__ ((packed));struct hid_descriptor {__u8 bLength;__u8 bDescriptorType; -__u16 bcdHID; +__le16 bcdHID;__u8 bCountryCode;__u8 bNumDescriptors;
Signature · 1 line
1.5.3.GIT
Quoted 2 lines · Al Viro
usb_control_msg()converts arguments to little-endian itself, doing that in caller means breakage on big-endian boxen.
Thanks a lot for spotting this, applied to my tree.
Signature · 1 line
Jiri Kosina