瀏覽代碼

drivers/misc/bh1770glc.c: error handling in bh1770_power_state_store()

There was a signedness bug so "ret" was never less than zero and that
breaks the error handling.  Also in the original code it would overwrite
ret and the result is still negative but it's bogus number instead of the
correct error code.

Signed-off-by: Dan Carpenter <error27@gmail.com>
Cc: Samu Onkalo <samu.p.onkalo@nokia.com>
Cc: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Dan Carpenter 14 年之前
父節點
當前提交
aec0428890
共有 1 個文件被更改,包括 6 次插入2 次删除
  1. 6 2
      drivers/misc/bh1770glc.c

+ 6 - 2
drivers/misc/bh1770glc.c

@@ -649,7 +649,7 @@ static ssize_t bh1770_power_state_store(struct device *dev,
 {
 {
 	struct bh1770_chip *chip =  dev_get_drvdata(dev);
 	struct bh1770_chip *chip =  dev_get_drvdata(dev);
 	unsigned long value;
 	unsigned long value;
-	size_t ret;
+	ssize_t ret;
 
 
 	if (strict_strtoul(buf, 0, &value))
 	if (strict_strtoul(buf, 0, &value))
 		return -EINVAL;
 		return -EINVAL;
@@ -659,8 +659,12 @@ static ssize_t bh1770_power_state_store(struct device *dev,
 		pm_runtime_get_sync(dev);
 		pm_runtime_get_sync(dev);
 
 
 		ret = bh1770_lux_rate(chip, chip->lux_rate_index);
 		ret = bh1770_lux_rate(chip, chip->lux_rate_index);
-		ret |= bh1770_lux_interrupt_control(chip, BH1770_ENABLE);
+		if (ret < 0) {
+			pm_runtime_put(dev);
+			goto leave;
+		}
 
 
+		ret = bh1770_lux_interrupt_control(chip, BH1770_ENABLE);
 		if (ret < 0) {
 		if (ret < 0) {
 			pm_runtime_put(dev);
 			pm_runtime_put(dev);
 			goto leave;
 			goto leave;