Avoid a potential panic in case wrong denominator
is given.

Signed-off-by: Henry Castro <hcvcas...@gmail.com>
---
 drivers/hid/hid-sony.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/hid/hid-sony.c b/drivers/hid/hid-sony.c
index 8319b0ce385a..67b45d82cc3b 100644
--- a/drivers/hid/hid-sony.c
+++ b/drivers/hid/hid-sony.c
@@ -1134,11 +1134,16 @@ static void dualshock4_parse_report(struct sony_sc *sc, 
u8 *rd, int size)
                 * Note: we swap numerator 'x' and 'numer' in mult_frac for
                 *       precision reasons so we don't need 64-bit.
                 */
-               int calib_data = mult_frac(calib->sens_numer,
-                                          raw_data - calib->bias,
-                                          calib->sens_denom);
+               if (calib->sens_denom != 0) {
+                       int calib_data = mult_frac(calib->sens_numer,
+                                                  raw_data - calib->bias,
+                                                  calib->sens_denom);
+
+                       input_report_abs(sc->sensor_dev, calib->abs_code, 
calib_data);
+               } else {
+                       hid_warn(sc->hdev, "DualShock 4 parse report, avoid 
invalid denominator");
+               }
 
-               input_report_abs(sc->sensor_dev, calib->abs_code, calib_data);
                offset += 2;
        }
        input_sync(sc->sensor_dev);
-- 
2.20.1

Reply via email to