ASoC: fsl_spdif: Use 64-bit arithmetic instead of 32-bit
authorGustavo A. R. Silva <gustavo@embeddedor.com>
Wed, 4 Jul 2018 14:18:33 +0000 (09:18 -0500)
committerMark Brown <broonie@kernel.org>
Thu, 5 Jul 2018 10:07:59 +0000 (11:07 +0100)
Add suffix ULL to constant 64 in order to give the compiler complete
information about the proper arithmetic to use.

Notice that such constant is used in a context that expects an
expression of type u64 (64 bits, unsigned) and the following
expression is currently being evaluated using 32-bit arithmetic:

rate[index] * txclk_df * 64

Addresses-Coverity-ID: 1222129 ("Unintentional integer overflow")
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Acked-by: Nicolin Chen <nicoleotsuka@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/fsl/fsl_spdif.c

index 9b59d87..740b90d 100644 (file)
@@ -1118,7 +1118,7 @@ static u32 fsl_spdif_txclk_caldiv(struct fsl_spdif_priv *spdif_priv,
 
        for (sysclk_df = sysclk_dfmin; sysclk_df <= sysclk_dfmax; sysclk_df++) {
                for (txclk_df = 1; txclk_df <= 128; txclk_df++) {
-                       rate_ideal = rate[index] * txclk_df * 64;
+                       rate_ideal = rate[index] * txclk_df * 64ULL;
                        if (round)
                                rate_actual = clk_round_rate(clk, rate_ideal);
                        else