diff mbox series

soc: aspeed: fix a ternary sign expansion bug

Message ID 20210423000919.1249474-1-joel@jms.id.au (mailing list archive)
State Accepted
Commit d42805807be7cb74a13c1d3b0035148f3637e035
Headers show
Series soc: aspeed: fix a ternary sign expansion bug | expand

Commit Message

Joel Stanley April 23, 2021, 12:09 a.m. UTC
From: Dan Carpenter <dan.carpenter@oracle.com>

The intent here was to return negative error codes but it actually
returns positive values.  The problem is that type promotion with
ternary operations is quite complicated.

"ret" is an int.  "copied" is a u32.  And the snoop_file_read() function
returns long.  What happens is that "ret" is cast to u32 and becomes
positive then it's cast to long and it's still positive.

Fix this by removing the ternary so that "ret" is type promoted directly
to long.

Fixes: 3772e5da4454 ("drivers/misc: Aspeed LPC snoop output using misc chardev")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Patrick Venture <venture@google.com>
Link: https://lore.kernel.org/r/YIE90PSXsMTa2Y8n@mwanda
Signed-off-by: Joel Stanley <joel@jms.id.au>
---
Soc maintainers, can you please apply this fix.

 drivers/soc/aspeed/aspeed-lpc-snoop.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

patchwork-bot+linux-soc@kernel.org April 23, 2021, 9:30 a.m. UTC | #1
Hello:

This patch was applied to soc/soc.git (refs/heads/for-next):

On Fri, 23 Apr 2021 09:39:19 +0930 you wrote:
> From: Dan Carpenter <dan.carpenter@oracle.com>
> 
> The intent here was to return negative error codes but it actually
> returns positive values.  The problem is that type promotion with
> ternary operations is quite complicated.
> 
> "ret" is an int.  "copied" is a u32.  And the snoop_file_read() function
> returns long.  What happens is that "ret" is cast to u32 and becomes
> positive then it's cast to long and it's still positive.
> 
> [...]

Here is the summary with links:
  - soc: aspeed: fix a ternary sign expansion bug
    https://git.kernel.org/soc/soc/c/d42805807be7

You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
diff mbox series

Patch

diff --git a/drivers/soc/aspeed/aspeed-lpc-snoop.c b/drivers/soc/aspeed/aspeed-lpc-snoop.c
index 210455efb321..eceeaf8dfbeb 100644
--- a/drivers/soc/aspeed/aspeed-lpc-snoop.c
+++ b/drivers/soc/aspeed/aspeed-lpc-snoop.c
@@ -94,8 +94,10 @@  static ssize_t snoop_file_read(struct file *file, char __user *buffer,
 			return -EINTR;
 	}
 	ret = kfifo_to_user(&chan->fifo, buffer, count, &copied);
+	if (ret)
+		return ret;
 
-	return ret ? ret : copied;
+	return copied;
 }
 
 static __poll_t snoop_file_poll(struct file *file,