blob: 38fba604e917e661b11f4c76e41921e8867383e8 [file] [log] [blame]
From c21762eb6b37fc57cdb5838010efcd66aacfbd7b Mon Sep 17 00:00:00 2001
From: Dan Carpenter <dan.carpenter@oracle.com>
Date: Mon, 24 Feb 2020 13:33:25 +0300
Subject: [PATCH] staging: kpc2000: prevent underflow in cpld_reconfigure()
commit 72db61d7d17a475d3cc9de1a7c871d518fcd82f0 upstream.
This function should not allow negative values of "wr_val". If
negatives are allowed then capping the upper bound at 7 is
meaningless. Let's make it unsigned.
Fixes: 7dc7967fc39a ("staging: kpc2000: add initial set of Daktronics drivers")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Cc: stable <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20200224103325.hrxdnaeqsthplu42@kili.mountain
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com>
diff --git a/drivers/staging/kpc2000/kpc2000/core.c b/drivers/staging/kpc2000/kpc2000/core.c
index 40390cdd3c8d..9643a347ade8 100644
--- a/drivers/staging/kpc2000/kpc2000/core.c
+++ b/drivers/staging/kpc2000/kpc2000/core.c
@@ -60,7 +60,7 @@ static ssize_t show_cpld_config_reg(struct device *dev, struct device_attribute
static ssize_t cpld_reconfigure(struct device *dev, struct device_attribute *attr, const char *buf, size_t count)
{
struct pci_dev *pdev = to_pci_dev(dev);
- long wr_val;
+ unsigned long wr_val;
struct kp2000_device *pcard;
int rv;
@@ -68,7 +68,7 @@ static ssize_t cpld_reconfigure(struct device *dev, struct device_attribute *att
pcard = pci_get_drvdata(pdev);
if (!pcard) return -ENXIO;
- rv = kstrtol(buf, 0, &wr_val);
+ rv = kstrtoul(buf, 0, &wr_val);
if (rv < 0) return rv;
if (wr_val > 7) return -EINVAL;
--
2.7.4