[U-Boot] [PATCH] Fix bad return value checks (detected with Coccinelle)

In the "Getting Started with Coccinelle - KVM edition" presentation that has been held by Julia Lawall at the KVM forum 2015 (see the slides at http://events.linuxfoundation.org/sites/events/files/slides/tutorial_kvm_0.p...), she pointed out some bad return value checks in U-Boot that can be detected with Coccinelle by using the following config file:
@@ identifier x,y; identifier f; statement S; @@ x = f(...); ( if (x < 0) S | if ( - y + x < 0) S )
This patch now fixes these issues.
Signed-off-by: Thomas Huth huth@tuxfamily.org --- Note: I haven't tested this patch at all, so please review carefully. I just wanted to let you know about these issues in case you haven't been aware of them yet. And in case if somebody else already reported them, please excuse the double information, I wasn't reading the u-boot mailing list so far yet.
diff -u -p a/board/samsung/origen/tools/mkorigenspl.c b/board/samsung/origen/tools/mkorigenspl.c --- a/board/samsung/origen/tools/mkorigenspl.c +++ b/board/samsung/origen/tools/mkorigenspl.c @@ -52,7 +52,7 @@ int main(int argc, char **argv) }
ofd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, FILE_PERM); - if (ifd < 0) { + if (ofd < 0) { fprintf(stderr, "%s: Can't open %s: %s\n", argv[0], argv[2], strerror(errno)); if (ifd) diff -u -p a/board/samsung/smdkv310/tools/mksmdkv310spl.c b/board/samsung/smdkv310/tools/mksmdkv310spl.c --- a/board/samsung/smdkv310/tools/mksmdkv310spl.c +++ b/board/samsung/smdkv310/tools/mksmdkv310spl.c @@ -50,7 +50,7 @@ int main(int argc, char **argv) }
ofd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, FILE_PERM); - if (ifd < 0) { + if (ofd < 0) { fprintf(stderr, "%s: Can't open %s: %s\n", argv[0], argv[2], strerror(errno)); if (ifd) diff -u -p a/drivers/hwmon/lm81.c b/drivers/hwmon/lm81.c --- a/drivers/hwmon/lm81.c +++ b/drivers/hwmon/lm81.c @@ -90,7 +90,7 @@ int dtt_init_one(int sensor) if (adr < 0) return 1; rev = dtt_read (sensor, DTT_REV); - if (adr < 0) + if (rev < 0) return 1;
debug ("DTT: Found LM81@%x Rev: %d\n", adr, rev); diff -u -p a/tools/fit_check_sign.c b/tools/fit_check_sign.c --- a/tools/fit_check_sign.c +++ b/tools/fit_check_sign.c @@ -75,7 +75,7 @@ int main(int argc, char **argv) if (ffd < 0) return EXIT_FAILURE; kfd = mmap_fdt(cmdname, keyfile, 0, &key_blob, &ksbuf, false); - if (ffd < 0) + if (kfd < 0) return EXIT_FAILURE;
image_set_host_blob(key_blob); diff -u -p a/tools/mkexynosspl.c b/tools/mkexynosspl.c --- a/tools/mkexynosspl.c +++ b/tools/mkexynosspl.c @@ -110,7 +110,7 @@ int main(int argc, char **argv) }
ofd = open(argv[of_index], O_WRONLY | O_CREAT | O_TRUNC, FILE_PERM); - if (ifd < 0) { + if (ofd < 0) { fprintf(stderr, "%s: Can't open %s: %s\n", prog_name, argv[of_index], strerror(errno)); exit(EXIT_FAILURE);

Am Tue, 25 Aug 2015 17:09:40 +0200 schrieb Thomas Huth huth@tuxfamily.org:
In the "Getting Started with Coccinelle - KVM edition" presentation that has been held by Julia Lawall at the KVM forum 2015 (see the slides at http://events.linuxfoundation.org/sites/events/files/slides/tutorial_kvm_0.p...), she pointed out some bad return value checks in U-Boot that can be detected with Coccinelle by using the following config file:
@@ identifier x,y; identifier f; statement S; @@ x = f(...); ( if (x < 0) S | if (
y
x
< 0) S )
This patch now fixes these issues.
Signed-off-by: Thomas Huth huth@tuxfamily.org
Note: I haven't tested this patch at all, so please review carefully. I just wanted to let you know about these issues in case you haven't been aware of them yet. And in case if somebody else already reported them, please excuse the double information, I wasn't reading the u-boot mailing list so far yet.
diff -u -p a/board/samsung/origen/tools/mkorigenspl.c b/board/samsung/origen/tools/mkorigenspl.c --- a/board/samsung/origen/tools/mkorigenspl.c +++ b/board/samsung/origen/tools/mkorigenspl.c @@ -52,7 +52,7 @@ int main(int argc, char **argv) }
ofd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, FILE_PERM);
- if (ifd < 0) {
- if (ofd < 0) { fprintf(stderr, "%s: Can't open %s: %s\n", argv[0], argv[2], strerror(errno)); if (ifd)
diff -u -p a/board/samsung/smdkv310/tools/mksmdkv310spl.c b/board/samsung/smdkv310/tools/mksmdkv310spl.c --- a/board/samsung/smdkv310/tools/mksmdkv310spl.c +++ b/board/samsung/smdkv310/tools/mksmdkv310spl.c @@ -50,7 +50,7 @@ int main(int argc, char **argv) }
ofd = open(argv[2], O_WRONLY | O_CREAT | O_TRUNC, FILE_PERM);
- if (ifd < 0) {
- if (ofd < 0) { fprintf(stderr, "%s: Can't open %s: %s\n", argv[0], argv[2], strerror(errno)); if (ifd)
diff -u -p a/drivers/hwmon/lm81.c b/drivers/hwmon/lm81.c --- a/drivers/hwmon/lm81.c +++ b/drivers/hwmon/lm81.c @@ -90,7 +90,7 @@ int dtt_init_one(int sensor) if (adr < 0) return 1; rev = dtt_read (sensor, DTT_REV);
- if (adr < 0)
if (rev < 0) return 1;
debug ("DTT: Found LM81@%x Rev: %d\n", adr, rev);
diff -u -p a/tools/fit_check_sign.c b/tools/fit_check_sign.c --- a/tools/fit_check_sign.c +++ b/tools/fit_check_sign.c @@ -75,7 +75,7 @@ int main(int argc, char **argv) if (ffd < 0) return EXIT_FAILURE; kfd = mmap_fdt(cmdname, keyfile, 0, &key_blob, &ksbuf, false);
- if (ffd < 0)
if (kfd < 0) return EXIT_FAILURE;
image_set_host_blob(key_blob);
diff -u -p a/tools/mkexynosspl.c b/tools/mkexynosspl.c --- a/tools/mkexynosspl.c +++ b/tools/mkexynosspl.c @@ -110,7 +110,7 @@ int main(int argc, char **argv) }
ofd = open(argv[of_index], O_WRONLY | O_CREAT | O_TRUNC, FILE_PERM);
- if (ifd < 0) {
- if (ofd < 0) { fprintf(stderr, "%s: Can't open %s: %s\n", prog_name, argv[of_index], strerror(errno)); exit(EXIT_FAILURE);
ping ... now with maintainers on CC: :-)
Regards, Thomas

On Tue, Aug 25, 2015 at 12:09 PM, Thomas Huth huth@tuxfamily.org wrote:
This patch now fixes these issues.
Signed-off-by: Thomas Huth huth@tuxfamily.org
Note: I haven't tested this patch at all, so please review carefully. I just wanted to let you know about these issues in case you haven't been aware of them yet. And in case if somebody else already reported them, please excuse the double information, I wasn't reading the u-boot mailing list so far yet.
You should split these changes into multiple patches.
Regards,
Fabio Estevam

On Tue, Aug 25, 2015 at 05:09:40PM +0200, Thomas Huth wrote:
In the "Getting Started with Coccinelle - KVM edition" presentation that has been held by Julia Lawall at the KVM forum 2015 (see the slides at http://events.linuxfoundation.org/sites/events/files/slides/tutorial_kvm_0.p...), she pointed out some bad return value checks in U-Boot that can be detected with Coccinelle by using the following config file:
@@ identifier x,y; identifier f; statement S; @@ x = f(...); ( if (x < 0) S | if (
y
x
< 0) S )
This patch now fixes these issues.
Signed-off-by: Thomas Huth huth@tuxfamily.org
Applied to u-boot/master, thanks!
participants (3)
-
Fabio Estevam
-
Thomas Huth
-
Tom Rini