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

Thomas Huth huth at tuxfamily.org
Tue Aug 25 17:09:40 CEST 2015


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.pdf),
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 at 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);


More information about the U-Boot mailing list