spi: pxa2xx: Validate the correctness of the SSP type
authorAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Fri, 21 Oct 2022 19:00:15 +0000 (22:00 +0300)
committerMark Brown <broonie@kernel.org>
Mon, 24 Oct 2022 12:30:15 +0000 (13:30 +0100)
Currently we blindly apply the SSP type value from any source of the
information. Increase robustness by validating the value before use.

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/r/20221021190018.63646-2-andriy.shevchenko@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-pxa2xx.c
include/linux/pxa2xx_ssp.h

index c9f6a3f..93be7e8 100644 (file)
@@ -1460,7 +1460,7 @@ pxa2xx_spi_init_pdata(struct platform_device *pdev)
        struct resource *res;
        struct pci_dev *pcidev = dev_is_pci(parent) ? to_pci_dev(parent) : NULL;
        const struct pci_device_id *pcidev_id = NULL;
-       enum pxa_ssp_type type;
+       enum pxa_ssp_type type = SSP_UNDEFINED;
        const void *match;
        int status;
        u64 uid;
@@ -1473,7 +1473,9 @@ pxa2xx_spi_init_pdata(struct platform_device *pdev)
                type = (enum pxa_ssp_type)match;
        else if (pcidev_id)
                type = (enum pxa_ssp_type)pcidev_id->driver_data;
-       else
+
+       /* Validate the SSP type correctness */
+       if (!(type > SSP_UNDEFINED && type < SSP_MAX))
                return ERR_PTR(-EINVAL);
 
        pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
index a3fec2d..cd1973e 100644 (file)
@@ -229,6 +229,7 @@ enum pxa_ssp_type {
        LPSS_SPT_SSP,
        LPSS_BXT_SSP,
        LPSS_CNL_SSP,
+       SSP_MAX
 };
 
 struct ssp_device {