]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
media: mceusb: filter out bogus timing irdata of duration 0
authorSean Young <sean@mess.org>
Thu, 10 May 2018 11:37:51 +0000 (07:37 -0400)
committerMauro Carvalho Chehab <mchehab+samsung@kernel.org>
Mon, 14 May 2018 11:12:11 +0000 (07:12 -0400)
A mceusb device has been observed producing invalid irdata. Proactively
guard against this.

Suggested-by: Matthias Reichl <hias@horus.com>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
drivers/media/rc/mceusb.c

index 1619b748469b8c1e967a5f33c89b61433a3e1ab0..1ca49491abc84d2208433039a10e8c8fa68d77de 100644 (file)
@@ -1177,6 +1177,11 @@ static void mceusb_process_ir_data(struct mceusb_dev *ir, int buf_len)
                        init_ir_raw_event(&rawir);
                        rawir.pulse = ((ir->buf_in[i] & MCE_PULSE_BIT) != 0);
                        rawir.duration = (ir->buf_in[i] & MCE_PULSE_MASK);
+                       if (unlikely(!rawir.duration)) {
+                               dev_warn(ir->dev, "nonsensical irdata %02x with duration 0",
+                                        ir->buf_in[i]);
+                               break;
+                       }
                        if (rawir.pulse) {
                                ir->pulse_tunit += rawir.duration;
                                ir->pulse_count++;