This is an automatic generated email to let you know that the following patch 
were queued:

Subject: [media] si2165: avoid division by zero
Author:  Matthias Schwarzott <z...@gentoo.org>
Date:    Tue Jul 26 03:53:40 2016 -0300

When si2165_init fails, the clk values in state are still at zero.
But the dvb-core ignores the return value of init will call tune
afterwards.
This will trigger a division by zero when tuning.
At least check for the variables to be non-zero before dividing.

This happened for a system with WinTV HVR-4400 PCIe-card after suspend-to-disk.
Do suspend-to-disk without accessing the DVB device before.
After wakeup try to tune.
si2165_init fails at checking the chip_mode and aborts.
Then si2165_set_if_freq_shift will fail with div-by-zero.

Signed-off-by: Matthias Schwarzott <z...@gentoo.org>
Signed-off-by: Mauro Carvalho Chehab <mche...@s-opensource.com>

 drivers/media/dvb-frontends/si2165.c | 6 ++++++
 1 file changed, 6 insertions(+)

---

diff --git a/drivers/media/dvb-frontends/si2165.c 
b/drivers/media/dvb-frontends/si2165.c
index 8bf716a8ea58..849c3c421262 100644
--- a/drivers/media/dvb-frontends/si2165.c
+++ b/drivers/media/dvb-frontends/si2165.c
@@ -751,6 +751,9 @@ static int si2165_set_oversamp(struct si2165_state *state, 
u32 dvb_rate)
        u64 oversamp;
        u32 reg_value;
 
+       if (!dvb_rate)
+               return -EINVAL;
+
        oversamp = si2165_get_fe_clk(state);
        oversamp <<= 23;
        do_div(oversamp, dvb_rate);
@@ -775,6 +778,9 @@ static int si2165_set_if_freq_shift(struct si2165_state 
*state)
                return -EINVAL;
        }
 
+       if (!fe_clk)
+               return -EINVAL;
+
        fe->ops.tuner_ops.get_if_frequency(fe, &IF);
        if_freq_shift = IF;
        if_freq_shift <<= 29;

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to