aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@s-opensource.com>2016-09-22 13:09:18 -0400
committerMauro Carvalho Chehab <mchehab@s-opensource.com>2016-09-22 13:14:22 -0400
commit3cc2691227203c00cac1d82d6b0772224d5c87b2 (patch)
tree5fca5d9d19b039f8937c14b9c2a04ae16e487d37
parente837d85c614e8d6e2d93daed972874ea3a8daec7 (diff)
[media] ttusb_dec: avoid the risk of go past buffer
Fixes this smatch warning: drivers/media/usb/ttusb-dec/ttusb_dec.c:243 ttusb_dec_handle_irq() error: buffer overflow 'rc_keys' 26 <= 126 As the RC keys should be enabled previously, via: set_bit(rc_keys[i], input_dev->keybit); It wouldn't go past the buffer in practice. Yet, as bad things may happen when going past buffer, it doesn't hurt adding a check here. While here, fix CodingStyle issues on the routine. Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
-rw-r--r--drivers/media/usb/ttusb-dec/ttusb_dec.c30
1 files changed, 18 insertions, 12 deletions
diff --git a/drivers/media/usb/ttusb-dec/ttusb_dec.c b/drivers/media/usb/ttusb-dec/ttusb_dec.c
index 4e36e24cb3a6..4e7671a3a1e4 100644
--- a/drivers/media/usb/ttusb-dec/ttusb_dec.c
+++ b/drivers/media/usb/ttusb-dec/ttusb_dec.c
@@ -206,7 +206,7 @@ static void ttusb_dec_set_model(struct ttusb_dec *dec,
206 206
207static void ttusb_dec_handle_irq( struct urb *urb) 207static void ttusb_dec_handle_irq( struct urb *urb)
208{ 208{
209 struct ttusb_dec * dec = urb->context; 209 struct ttusb_dec *dec = urb->context;
210 char *buffer = dec->irq_buffer; 210 char *buffer = dec->irq_buffer;
211 int retval; 211 int retval;
212 212
@@ -227,25 +227,31 @@ static void ttusb_dec_handle_irq( struct urb *urb)
227 goto exit; 227 goto exit;
228 } 228 }
229 229
230 if( (buffer[0] == 0x1) && (buffer[2] == 0x15) ) { 230 if ((buffer[0] == 0x1) && (buffer[2] == 0x15)) {
231 /* IR - Event */ 231 /*
232 /* this is an fact a bit too simple implementation; 232 * IR - Event
233 *
234 * this is an fact a bit too simple implementation;
233 * the box also reports a keyrepeat signal 235 * the box also reports a keyrepeat signal
234 * (with buffer[3] == 0x40) in an intervall of ~100ms. 236 * (with buffer[3] == 0x40) in an intervall of ~100ms.
235 * But to handle this correctly we had to imlemenent some 237 * But to handle this correctly we had to imlemenent some
236 * kind of timer which signals a 'key up' event if no 238 * kind of timer which signals a 'key up' event if no
237 * keyrepeat signal is received for lets say 200ms. 239 * keyrepeat signal is received for lets say 200ms.
238 * this should/could be added later ... 240 * this should/could be added later ...
239 * for now lets report each signal as a key down and up*/ 241 * for now lets report each signal as a key down and up
240 dprintk("%s:rc signal:%d\n", __func__, buffer[4]); 242 */
241 input_report_key(dec->rc_input_dev, rc_keys[buffer[4] - 1], 1); 243 if (buffer[4] - 1 < ARRAY_SIZE(rc_keys)) {
242 input_sync(dec->rc_input_dev); 244 dprintk("%s:rc signal:%d\n", __func__, buffer[4]);
243 input_report_key(dec->rc_input_dev, rc_keys[buffer[4] - 1], 0); 245 input_report_key(dec->rc_input_dev, rc_keys[buffer[4] - 1], 1);
244 input_sync(dec->rc_input_dev); 246 input_sync(dec->rc_input_dev);
247 input_report_key(dec->rc_input_dev, rc_keys[buffer[4] - 1], 0);
248 input_sync(dec->rc_input_dev);
249 }
245 } 250 }
246 251
247exit: retval = usb_submit_urb(urb, GFP_ATOMIC); 252exit:
248 if(retval) 253 retval = usb_submit_urb(urb, GFP_ATOMIC);
254 if (retval)
249 printk("%s - usb_commit_urb failed with result: %d\n", 255 printk("%s - usb_commit_urb failed with result: %d\n",
250 __func__, retval); 256 __func__, retval);
251} 257}