Re: [PATCH v3 06/22] firmware: fold successful fw read early
From: Kees Cook <hidden>
Date: 2016-02-04 17:38:12
Also in:
kexec
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