]> git.baikalelectronics.ru Git - kernel.git/commit
kfifo: fix ternary sign extension bugs
authorDan Carpenter <dan.carpenter@oracle.com>
Fri, 30 Apr 2021 05:54:15 +0000 (22:54 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 30 Apr 2021 18:20:35 +0000 (11:20 -0700)
commite324461bd46aecb962c8bffc02283d0ebca3c5ab
treee307a013836cf34e6ed669eaab2b839bbe288d05
parentdff75b6bf9488507c9993d545e4c1a830264cea9
kfifo: fix ternary sign extension bugs

The intent with this code was to return negative error codes but instead
it returns positives.

The problem is how type promotion works with ternary operations.  These
functions return long, "ret" is an int and "copied" is a u32.  The
negative error code is first cast to u32 so it becomes a high positive and
then cast to long where it's still a positive.

We could fix this by declaring "ret" as a ssize_t but let's just get rid
of the ternaries instead.

Link: https://lkml.kernel.org/r/YIE+/cK1tBzSuQPU@mwanda
Fixes: 113399f9a59c ("kfifo: add example files to the kernel sample directory")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Cc: Stefani Seibold <stefani@seibold.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
samples/kfifo/bytestream-example.c
samples/kfifo/inttype-example.c
samples/kfifo/record-example.c