| From 3c322a56b01695df15c70bfdc2d02e0ccd80654e Mon Sep 17 00:00:00 2001 |
| From: Stephane Grosjean <s.grosjean@peak-system.com> |
| Date: Fri, 9 Aug 2013 11:44:06 +0200 |
| Subject: can: pcan_usb: fix wrong memcpy() bytes length |
| |
| From: Stephane Grosjean <s.grosjean@peak-system.com> |
| |
| commit 3c322a56b01695df15c70bfdc2d02e0ccd80654e upstream. |
| |
| Fix possibly wrong memcpy() bytes length since some CAN records received from |
| PCAN-USB could define a DLC field in range [9..15]. |
| In that case, the real DLC value MUST be used to move forward the record pointer |
| but, only 8 bytes max. MUST be copied into the data field of the struct |
| can_frame object of the skb given to the network core. |
| |
| Signed-off-by: Stephane Grosjean <s.grosjean@peak-system.com> |
| Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/net/can/usb/peak_usb/pcan_usb.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/drivers/net/can/usb/peak_usb/pcan_usb.c |
| +++ b/drivers/net/can/usb/peak_usb/pcan_usb.c |
| @@ -649,7 +649,7 @@ static int pcan_usb_decode_data(struct p |
| if ((mc->ptr + rec_len) > mc->end) |
| goto decode_failed; |
| |
| - memcpy(cf->data, mc->ptr, rec_len); |
| + memcpy(cf->data, mc->ptr, cf->can_dlc); |
| mc->ptr += rec_len; |
| } |
| |