| 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 |
| |