xhci: fix incorrect type in assignment in xhci_count_num_dropped_endpoints()
authorXenia Ragiadakou <burzalodowa@gmail.com>
Mon, 9 Sep 2013 18:03:07 +0000 (21:03 +0300)
committerSarah Sharp <sarah.a.sharp@linux.intel.com>
Mon, 2 Dec 2013 20:59:47 +0000 (12:59 -0800)
The fields 'add_flags' and 'drop_flags' in struct xhci_input_control_ctx
have type __le32 and need to be converted to CPU byteorder before being
used to derive the number of dropped endpoints.
This bug was found using sparse.

This patch is not suitable for stable, since the bug would only be
triggered on big endian systems, and the code only runs for Intel xHCI
host controllers, which are always integrated into little endian
systems.

Signed-off-by: Xenia Ragiadakou <burzalodowa@gmail.com>
Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
drivers/usb/host/xhci.c

index b7289e9a44dd050724108b9b634291a8d34dd235..900ba36ee2b8d8f31279eea3c35b13db0072a00a 100644 (file)
@@ -1909,8 +1909,8 @@ static unsigned int xhci_count_num_dropped_endpoints(struct xhci_hcd *xhci,
        u32 valid_add_flags;
        u32 valid_drop_flags;
 
-       valid_add_flags = ctrl_ctx->add_flags >> 2;
-       valid_drop_flags = ctrl_ctx->drop_flags >> 2;
+       valid_add_flags = le32_to_cpu(ctrl_ctx->add_flags) >> 2;
+       valid_drop_flags = le32_to_cpu(ctrl_ctx->drop_flags) >> 2;
 
        return hweight32(valid_drop_flags) -
                hweight32(valid_add_flags & valid_drop_flags);