]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
mmc: sdhci: make tuning_err a signed int
authorHaibo Chen <haibo.chen@nxp.com>
Mon, 27 Jul 2026 10:38:49 +0000 (18:38 +0800)
committerUlf Hansson <ulfh@kernel.org>
Tue, 4 Aug 2026 11:23:00 +0000 (13:23 +0200)
commitae31bcc92bb42502bb7c9029e6dc7a824cf6cd14
treee3d1be5dc876219163807bb992fe68c444a8b905
parente27c946b589c53520409a0956b33d52ef7a0898f
mmc: sdhci: make tuning_err a signed int

Coverity report INTEGER_OVERFLOW for host->tuning_err.
The tuning_err field in struct sdhci_host is used to store an error
code for re-tuning, but it was declared as unsigned int. Several call
sites store negative error codes into it and later compare against
negative values:

  - sdhci.c, sdhci-of-dwcmshc.c and sdhci-pci-gli.c assign it the
    return value of __sdhci_execute_tuning()/__sdhci_execute_tuning_9750(),
    both of which return a signed int (possibly a negative errno);
  - sdhci-of-esdhc.c assigns host->tuning_err = -EAGAIN and later does
    "ret = host->tuning_err; if (ret == -EAGAIN ...)";
  - sdhci-of-dwcmshc.c prints it with the %d (signed) conversion.

Storing a negative errno in an unsigned int and reading it back as a
signed int only happens to work because of two's-complement, same-width
integer conversions. It is misleading and triggers sign-conversion
warnings. All users treat the value either as a signed error code or as
a boolean (zero / non-zero), so changing the type to a signed int is
safe and makes the intent explicit.

Fixes: 7d8bb1f46e13 ("mmc: sdhci: add tuning error codes")
Assisted-by: Cline:claude-sonnet [read_file, search_files, git]
Signed-off-by: Haibo Chen <haibo.chen@nxp.com>
Reviewed-by: Frank Li <Frank.Li@nxp.com>
Cc: stable@vger.kernel.org
Signed-off-by: Ulf Hansson <ulfh@kernel.org>
drivers/mmc/host/sdhci.h