serial: msm-geni: Detect error from get_clk_div_rate
authorAndrew Goodbody <andrew.goodbody@linaro.org>
Mon, 11 Aug 2025 17:03:39 +0000 (18:03 +0100)
committerCasey Connolly <casey.connolly@linaro.org>
Wed, 13 Aug 2025 13:17:36 +0000 (15:17 +0200)
In msm_serial_setbrg if the call to get_clk_div_rate fails then there
will not have been an assignment to clk_div which will lead to the call
to geni_serial_baud using an uninitialised value.
Check for an error from get_clk_div_rate and return an error code if so.

This issue was found by Smatch.

Signed-off-by: Andrew Goodbody <andrew.goodbody@linaro.org>
Reviewed-by: Casey Connolly <casey.connolly@linaro.org>
Link: https://lore.kernel.org/r/20250811-serial_msm_geni-v1-1-4499179491bc@linaro.org
Signed-off-by: Casey Connolly <casey.connolly@linaro.org>
drivers/serial/serial_msm_geni.c

index cb6c09f..33016f0 100644 (file)
@@ -252,6 +252,10 @@ static int msm_serial_setbrg(struct udevice *dev, int baud)
        priv->baud = baud;
 
        clk_rate = get_clk_div_rate(baud, priv->oversampling, &clk_div);
+       if (!clk_rate) {
+               pr_err("%s: Couldn't get clock division rate\n", __func__);
+               return -EINVAL;
+       }
        ret = geni_serial_set_clock_rate(dev, clk_rate);
        if (ret < 0) {
                pr_err("%s: Couldn't set clock rate: %d\n", __func__, ret);