cbfstool: accept read-only files when possible
cbfstool tries opening the input file for write access even if the command does not require modifying the file. Let's not request write access unless it is necessary, this way one can examine write protected files without sudo. BRANCH=none BUG=none TEST=running cbfstool /build/<board>/firmware/image.bin print in chroot does not require root access any more. Change-Id: Ic4e4cc389b160da190e44a676808f5c4e6625567 Signed-off-by: Patrick Georgi <pgeorgi@chromium.org> Original-Commit-Id: ef6a8e25d9e257d7de4cc6b94e510234fe20a56d Original-Change-Id: I871f32f0662221ffbdb13bf0482cb285ec184d07 Original-Signed-off-by: Vadim Bendebury <vbendeb@chromium.org> Original-Reviewed-on: https://chromium-review.googlesource.com/317300 Original-Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-on: https://review.coreboot.org/12931 Tested-by: build bot (Jenkins) Reviewed-by: Martin Roth <martinroth@google.com>
This commit is contained in:
committed by
Patrick Georgi
parent
6313bc7731
commit
7559946896
@@ -38,7 +38,10 @@ struct command {
|
||||
int (*function) (void);
|
||||
// Whether to populate param.image_region before invoking function
|
||||
bool accesses_region;
|
||||
// Whether to write that region's contents back to image_file at the end
|
||||
// This set to true means two things:
|
||||
// - in case of a command operating on a region, the region's contents
|
||||
// will be written back to image_file at the end
|
||||
// - write access to the file is required
|
||||
bool modifies_region;
|
||||
};
|
||||
|
||||
@@ -1014,7 +1017,7 @@ static const struct command commands[] = {
|
||||
{"print", "H:r:vh?", cbfs_print, true, false},
|
||||
{"read", "r:f:vh?", cbfs_read, true, false},
|
||||
{"remove", "H:r:n:vh?", cbfs_remove, true, true},
|
||||
{"update-fit", "H:r:n:x:vh?", cbfs_update_fit, true, false},
|
||||
{"update-fit", "H:r:n:x:vh?", cbfs_update_fit, true, true},
|
||||
{"write", "r:f:udvh?", cbfs_write, true, true},
|
||||
};
|
||||
|
||||
@@ -1372,8 +1375,11 @@ int main(int argc, char **argv)
|
||||
return 1;
|
||||
}
|
||||
} else {
|
||||
bool write_access = commands[i].modifies_region;
|
||||
|
||||
param.image_file =
|
||||
partitioned_file_reopen(image_name);
|
||||
partitioned_file_reopen(image_name,
|
||||
write_access);
|
||||
}
|
||||
if (!param.image_file)
|
||||
return 1;
|
||||
@@ -1429,7 +1435,6 @@ int main(int argc, char **argv)
|
||||
|
||||
if (commands[i].modifies_region) {
|
||||
assert(param.image_file);
|
||||
assert(commands[i].accesses_region);
|
||||
for (unsigned region = 0; region < num_regions;
|
||||
++region) {
|
||||
|
||||
|
Reference in New Issue
Block a user