On Wed, Feb 3, 2016 at 11:06 AM, Mimi Zohar [off-list ref] wrote:
quoted hunk ↗ jump to hunk
From: David Howells <dhowells@redhat.com>
We'll be folding in some more checks on fw_read_file_contents(),
this will make the success case easier to follow.
Reviewed-by: Josh Boyer <redacted>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Luis R. Rodriguez <mcgrof@kernel.org>
Signed-off-by: Mimi Zohar <redacted>
---
drivers/base/firmware_class.c | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
index fb64814..c658cec 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -361,20 +361,18 @@ static int fw_get_filesystem_firmware(struct device *device,
continue;
rc = fw_read_file_contents(file, buf);
fput(file);
- if (rc)
+ if (rc == 0) {
+ dev_dbg(device, "direct-loading %s\n",
+ buf->fw_id);
+ fw_finish_direct_load(device, buf);
+ goto out;
+ } else
dev_warn(device, "loading %s failed with error %d\n",
path, rc);
- else
- break;
}
+out:
__putname(path);
- if (!rc) {
- dev_dbg(device, "direct-loading %s\n",
- buf->fw_id);
- fw_finish_direct_load(device, buf);
- }
-
return rc;
}
Looking at this code, why does this use "break":
len = snprintf(path, PATH_MAX, "%s/%s",
fw_path[i], buf->fw_id);
if (len >= PATH_MAX) {
rc = -ENAMETOOLONG;
break;
}
Shouldn't that emit a warning, set rc, and continue?
Regardless, I think this is more readable. Adding an "out" target at
the end of a for loop seems weird, given "break" existing. :)
rc = fw_read_file_contents(file, buf);
fput(file);
- if (rc)
+ if (rc) {
dev_warn(device, "loading %s failed with error %d\n",
path, rc);
+ continue;
+ }
+ dev_dbg(device, "direct-loading %s\n", buf->fw_id);
+ fw_finish_direct_load(device, buf);
- else
- break;
+ break;
}
__putname(path);
-
- if (!rc) {
- dev_dbg(device, "direct-loading %s\n",
- buf->fw_id);
- fw_finish_direct_load(device, buf);
- }
-
return rc;
}
--
Kees Cook
Chrome OS & Brillo Security