]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.14-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 13 Feb 2018 16:30:58 +0000 (17:30 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 13 Feb 2018 16:30:58 +0000 (17:30 +0100)
added patches:
media-dvb-usb-v2-lmedm04-improve-logic-checking-of-warm-start.patch
media-dvb-usb-v2-lmedm04-move-ts2020-attach-to-dm04_lme2510_tuner.patch
media-hdpvr-fix-an-error-handling-path-in-hdpvr_probe.patch

queue-4.14/media-dvb-usb-v2-lmedm04-improve-logic-checking-of-warm-start.patch [new file with mode: 0644]
queue-4.14/media-dvb-usb-v2-lmedm04-move-ts2020-attach-to-dm04_lme2510_tuner.patch [new file with mode: 0644]
queue-4.14/media-hdpvr-fix-an-error-handling-path-in-hdpvr_probe.patch [new file with mode: 0644]
queue-4.14/series

diff --git a/queue-4.14/media-dvb-usb-v2-lmedm04-improve-logic-checking-of-warm-start.patch b/queue-4.14/media-dvb-usb-v2-lmedm04-improve-logic-checking-of-warm-start.patch
new file mode 100644 (file)
index 0000000..d3610ce
--- /dev/null
@@ -0,0 +1,88 @@
+From 3d932ee27e852e4904647f15b64dedca51187ad7 Mon Sep 17 00:00:00 2001
+From: Malcolm Priestley <tvboxspy@gmail.com>
+Date: Tue, 26 Sep 2017 17:10:20 -0400
+Subject: media: dvb-usb-v2: lmedm04: Improve logic checking of warm start
+
+From: Malcolm Priestley <tvboxspy@gmail.com>
+
+commit 3d932ee27e852e4904647f15b64dedca51187ad7 upstream.
+
+Warm start has no check as whether a genuine device has
+connected and proceeds to next execution path.
+
+Check device should read 0x47 at offset of 2 on USB descriptor read
+and it is the amount requested of 6 bytes.
+
+Fix for
+kasan: CONFIG_KASAN_INLINE enabled
+kasan: GPF could be caused by NULL-ptr deref or user memory access as
+
+Reported-by: Andrey Konovalov <andreyknvl@google.com>
+Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
+Cc: Ben Hutchings <ben.hutchings@codethink.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/media/usb/dvb-usb-v2/lmedm04.c |   26 ++++++++++++++++++--------
+ 1 file changed, 18 insertions(+), 8 deletions(-)
+
+--- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
++++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
+@@ -494,18 +494,23 @@ static int lme2510_pid_filter(struct dvb
+ static int lme2510_return_status(struct dvb_usb_device *d)
+ {
+-      int ret = 0;
++      int ret;
+       u8 *data;
+-      data = kzalloc(10, GFP_KERNEL);
++      data = kzalloc(6, GFP_KERNEL);
+       if (!data)
+               return -ENOMEM;
+-      ret |= usb_control_msg(d->udev, usb_rcvctrlpipe(d->udev, 0),
+-                      0x06, 0x80, 0x0302, 0x00, data, 0x0006, 200);
+-      info("Firmware Status: %x (%x)", ret , data[2]);
++      ret = usb_control_msg(d->udev, usb_rcvctrlpipe(d->udev, 0),
++                            0x06, 0x80, 0x0302, 0x00,
++                            data, 0x6, 200);
++      if (ret != 6)
++              ret = -EINVAL;
++      else
++              ret = data[2];
++
++      info("Firmware Status: %6ph", data);
+-      ret = (ret < 0) ? -ENODEV : data[2];
+       kfree(data);
+       return ret;
+ }
+@@ -1189,6 +1194,7 @@ static int lme2510_get_adapter_count(str
+ static int lme2510_identify_state(struct dvb_usb_device *d, const char **name)
+ {
+       struct lme2510_state *st = d->priv;
++      int status;
+       usb_reset_configuration(d->udev);
+@@ -1197,12 +1203,16 @@ static int lme2510_identify_state(struct
+       st->dvb_usb_lme2510_firmware = dvb_usb_lme2510_firmware;
+-      if (lme2510_return_status(d) == 0x44) {
++      status = lme2510_return_status(d);
++      if (status == 0x44) {
+               *name = lme_firmware_switch(d, 0);
+               return COLD;
+       }
+-      return 0;
++      if (status != 0x47)
++              return -EINVAL;
++
++      return WARM;
+ }
+ static int lme2510_get_stream_config(struct dvb_frontend *fe, u8 *ts_type,
diff --git a/queue-4.14/media-dvb-usb-v2-lmedm04-move-ts2020-attach-to-dm04_lme2510_tuner.patch b/queue-4.14/media-dvb-usb-v2-lmedm04-move-ts2020-attach-to-dm04_lme2510_tuner.patch
new file mode 100644 (file)
index 0000000..9329dc7
--- /dev/null
@@ -0,0 +1,72 @@
+From 7bf7a7116ed313c601307f7e585419369926ab05 Mon Sep 17 00:00:00 2001
+From: Malcolm Priestley <tvboxspy@gmail.com>
+Date: Tue, 26 Sep 2017 17:10:21 -0400
+Subject: media: dvb-usb-v2: lmedm04: move ts2020 attach to dm04_lme2510_tuner
+
+From: Malcolm Priestley <tvboxspy@gmail.com>
+
+commit 7bf7a7116ed313c601307f7e585419369926ab05 upstream.
+
+When the tuner was split from m88rs2000 the attach function is in wrong
+place.
+
+Move to dm04_lme2510_tuner to trap errors on failure and removing
+a call to lme_coldreset.
+
+Prevents driver starting up without any tuner connected.
+
+Fixes to trap for ts2020 fail.
+LME2510(C): FE Found M88RS2000
+ts2020: probe of 0-0060 failed with error -11
+...
+LME2510(C): TUN Found RS2000 tuner
+kasan: CONFIG_KASAN_INLINE enabled
+kasan: GPF could be caused by NULL-ptr deref or user memory access
+general protection fault: 0000 [#1] PREEMPT SMP KASAN
+
+Reported-by: Andrey Konovalov <andreyknvl@google.com>
+Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
+Tested-by: Andrey Konovalov <andreyknvl@google.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
+Cc: Ben Hutchings <ben.hutchings@codethink.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/media/usb/dvb-usb-v2/lmedm04.c |   13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+--- a/drivers/media/usb/dvb-usb-v2/lmedm04.c
++++ b/drivers/media/usb/dvb-usb-v2/lmedm04.c
+@@ -1076,8 +1076,6 @@ static int dm04_lme2510_frontend_attach(
+               if (adap->fe[0]) {
+                       info("FE Found M88RS2000");
+-                      dvb_attach(ts2020_attach, adap->fe[0], &ts2020_config,
+-                                      &d->i2c_adap);
+                       st->i2c_tuner_gate_w = 5;
+                       st->i2c_tuner_gate_r = 5;
+                       st->i2c_tuner_addr = 0x60;
+@@ -1143,17 +1141,18 @@ static int dm04_lme2510_tuner(struct dvb
+                       ret = st->tuner_config;
+               break;
+       case TUNER_RS2000:
+-              ret = st->tuner_config;
++              if (dvb_attach(ts2020_attach, adap->fe[0],
++                             &ts2020_config, &d->i2c_adap))
++                      ret = st->tuner_config;
+               break;
+       default:
+               break;
+       }
+-      if (ret)
++      if (ret) {
+               info("TUN Found %s tuner", tun_msg[ret]);
+-      else {
+-              info("TUN No tuner found --- resetting device");
+-              lme_coldreset(d);
++      } else {
++              info("TUN No tuner found");
+               return -ENODEV;
+       }
diff --git a/queue-4.14/media-hdpvr-fix-an-error-handling-path-in-hdpvr_probe.patch b/queue-4.14/media-hdpvr-fix-an-error-handling-path-in-hdpvr_probe.patch
new file mode 100644 (file)
index 0000000..8d20d09
--- /dev/null
@@ -0,0 +1,104 @@
+From c0f71bbb810237a38734607ca4599632f7f5d47f Mon Sep 17 00:00:00 2001
+From: Arvind Yadav <arvind.yadav.cs@gmail.com>
+Date: Fri, 22 Sep 2017 09:07:06 -0400
+Subject: media: hdpvr: Fix an error handling path in hdpvr_probe()
+
+From: Arvind Yadav <arvind.yadav.cs@gmail.com>
+
+commit c0f71bbb810237a38734607ca4599632f7f5d47f upstream.
+
+Here, hdpvr_register_videodev() is responsible for setup and
+register a video device. Also defining and initializing a worker.
+hdpvr_register_videodev() is calling by hdpvr_probe at last.
+So no need to flush any work here.
+Unregister v4l2, free buffers and memory. If hdpvr_probe() will fail.
+
+Signed-off-by: Arvind Yadav <arvind.yadav.cs@gmail.com>
+Reported-by: Andrey Konovalov <andreyknvl@google.com>
+Tested-by: Andrey Konovalov <andreyknvl@google.com>
+Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
+Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
+Cc: Ben Hutchings <ben.hutchings@codethink.co.uk>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/media/usb/hdpvr/hdpvr-core.c |   26 +++++++++++++++-----------
+ 1 file changed, 15 insertions(+), 11 deletions(-)
+
+--- a/drivers/media/usb/hdpvr/hdpvr-core.c
++++ b/drivers/media/usb/hdpvr/hdpvr-core.c
+@@ -292,7 +292,7 @@ static int hdpvr_probe(struct usb_interf
+       /* register v4l2_device early so it can be used for printks */
+       if (v4l2_device_register(&interface->dev, &dev->v4l2_dev)) {
+               dev_err(&interface->dev, "v4l2_device_register failed\n");
+-              goto error;
++              goto error_free_dev;
+       }
+       mutex_init(&dev->io_mutex);
+@@ -301,7 +301,7 @@ static int hdpvr_probe(struct usb_interf
+       dev->usbc_buf = kmalloc(64, GFP_KERNEL);
+       if (!dev->usbc_buf) {
+               v4l2_err(&dev->v4l2_dev, "Out of memory\n");
+-              goto error;
++              goto error_v4l2_unregister;
+       }
+       init_waitqueue_head(&dev->wait_buffer);
+@@ -339,13 +339,13 @@ static int hdpvr_probe(struct usb_interf
+       }
+       if (!dev->bulk_in_endpointAddr) {
+               v4l2_err(&dev->v4l2_dev, "Could not find bulk-in endpoint\n");
+-              goto error;
++              goto error_put_usb;
+       }
+       /* init the device */
+       if (hdpvr_device_init(dev)) {
+               v4l2_err(&dev->v4l2_dev, "device init failed\n");
+-              goto error;
++              goto error_put_usb;
+       }
+       mutex_lock(&dev->io_mutex);
+@@ -353,7 +353,7 @@ static int hdpvr_probe(struct usb_interf
+               mutex_unlock(&dev->io_mutex);
+               v4l2_err(&dev->v4l2_dev,
+                        "allocating transfer buffers failed\n");
+-              goto error;
++              goto error_put_usb;
+       }
+       mutex_unlock(&dev->io_mutex);
+@@ -361,7 +361,7 @@ static int hdpvr_probe(struct usb_interf
+       retval = hdpvr_register_i2c_adapter(dev);
+       if (retval < 0) {
+               v4l2_err(&dev->v4l2_dev, "i2c adapter register failed\n");
+-              goto error;
++              goto error_free_buffers;
+       }
+       client = hdpvr_register_ir_rx_i2c(dev);
+@@ -394,13 +394,17 @@ static int hdpvr_probe(struct usb_interf
+ reg_fail:
+ #if IS_ENABLED(CONFIG_I2C)
+       i2c_del_adapter(&dev->i2c_adapter);
++error_free_buffers:
+ #endif
++      hdpvr_free_buffers(dev);
++error_put_usb:
++      usb_put_dev(dev->udev);
++      kfree(dev->usbc_buf);
++error_v4l2_unregister:
++      v4l2_device_unregister(&dev->v4l2_dev);
++error_free_dev:
++      kfree(dev);
+ error:
+-      if (dev) {
+-              flush_work(&dev->worker);
+-              /* this frees allocated memory */
+-              hdpvr_delete(dev);
+-      }
+       return retval;
+ }
index 4e5829399f959c1741a7489797d2bcc969352764..0dada9650f64d8356bee2192d40b605cdbbddc1c 100644 (file)
@@ -16,3 +16,6 @@ drm-i915-add-.get_hw_state-method-for-planes.patch
 drm-i915-redo-plane-sanitation-during-readout.patch
 drm-i915-fix-deadlock-in-i830_disable_pipe.patch
 dccp-cve-2017-8824-use-after-free-in-dccp-code.patch
+media-dvb-usb-v2-lmedm04-improve-logic-checking-of-warm-start.patch
+media-dvb-usb-v2-lmedm04-move-ts2020-attach-to-dm04_lme2510_tuner.patch
+media-hdpvr-fix-an-error-handling-path-in-hdpvr_probe.patch