Skip to content

Commit 04f9737

Browse files
committed
Add --feature readonly, to build a bin without risky commands
``` > cargo build --features readonly && sudo ./target/debug/framework_tool --dump-ec-flash ec.bin && ls -l ec.bin Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.09s ls: cannot access 'ec.bin': No such file or directory > cargo build && sudo ./target/debug/framework_tool --dump-ec-flash ec.bin && ls -l ec.bin Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.09s Dumping to ec.bin -rw-r--r--. 1 root root 524288 May 10 09:24 ec.bin ``` Signed-off-by: Daniel Schaefer <[email protected]>
1 parent 8067852 commit 04f9737

File tree

4 files changed

+77
-2
lines changed

4 files changed

+77
-2
lines changed

framework_lib/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ build = "build.rs"
99

1010
[features]
1111
default = ["hidapi", "rusb"]
12+
readonly = [ ]
1213
rusb = ["dep:rusb"]
1314
hidapi = ["dep:hidapi"]
1415
uefi = [ "lazy_static/spin_no_std" ]

framework_lib/src/commandline/mod.rs

+68-2
Original file line numberDiff line numberDiff line change
@@ -212,9 +212,75 @@ pub struct Cli {
212212

213213
pub fn parse(args: &[String]) -> Cli {
214214
#[cfg(feature = "uefi")]
215-
return uefi::parse(args);
215+
let cli = uefi::parse(args);
216216
#[cfg(not(feature = "uefi"))]
217-
return clap_std::parse(args);
217+
let cli = clap_std::parse(args);
218+
219+
if cfg!(feature = "readonly") {
220+
// Initialize a new Cli with no arguments
221+
let mut safe_cli = Cli::default();
222+
223+
// Copy all arguments that are readonly/safe
224+
// We explicitly only cope the safe ones so that if we add new arguments in the future,
225+
// which might be unsafe, we can't forget to exclude them from the safe set.
226+
// TODO: Instead of silently ignoring blocked command, we should remind the user
227+
safe_cli.verbosity = cli.verbosity;
228+
safe_cli.versions = cli.versions;
229+
safe_cli.version = cli.version;
230+
safe_cli.esrt = cli.esrt;
231+
safe_cli.device = cli.device;
232+
safe_cli.power = cli.power;
233+
safe_cli.thermal = cli.thermal;
234+
safe_cli.sensors = cli.sensors;
235+
// fansetduty
236+
// fansetrpm
237+
// autofanctrl
238+
safe_cli.privacy = cli.privacy;
239+
safe_cli.pd_info = cli.version;
240+
safe_cli.dp_hdmi_info = cli.dp_hdmi_info;
241+
// dp_hdmi_update
242+
safe_cli.audio_card_info = cli.audio_card_info;
243+
safe_cli.pd_bin = cli.pd_bin;
244+
safe_cli.ec_bin = cli.ec_bin;
245+
safe_cli.capsule = cli.capsule;
246+
safe_cli.dump = cli.dump;
247+
safe_cli.h2o_capsule = cli.h2o_capsule;
248+
// dump_ec_flash
249+
// flash_ec
250+
// flash_ro_ec
251+
safe_cli.driver = cli.driver;
252+
safe_cli.test = cli.test;
253+
safe_cli.intrusion = cli.intrusion;
254+
safe_cli.inputdeck = cli.inputdeck;
255+
safe_cli.inputdeck_mode = cli.inputdeck_mode;
256+
safe_cli.expansion_bay = cli.expansion_bay;
257+
// charge_limit
258+
// charge_current_limit
259+
safe_cli.get_gpio = cli.get_gpio;
260+
safe_cli.fp_led_level = cli.fp_led_level;
261+
safe_cli.fp_brightness = cli.fp_brightness;
262+
safe_cli.kblight = cli.kblight;
263+
safe_cli.rgbkbd = cli.rgbkbd;
264+
// tablet_mode
265+
// touchscreen_enable
266+
safe_cli.stylus_battery = cli.stylus_battery;
267+
safe_cli.console = cli.console;
268+
safe_cli.reboot_ec = cli.reboot_ec;
269+
// ec_hib_delay
270+
safe_cli.hash = cli.hash;
271+
safe_cli.pd_addrs = cli.pd_addrs;
272+
safe_cli.pd_ports = cli.pd_ports;
273+
safe_cli.help = cli.help;
274+
safe_cli.info = cli.info;
275+
// allupdate
276+
safe_cli.paginate = cli.paginate;
277+
safe_cli.intrusion = cli.intrusion;
278+
// raw_command
279+
280+
safe_cli
281+
} else {
282+
cli
283+
}
218284
}
219285

220286
fn print_single_pd_details(pd: &PdController) {

framework_tool/Cargo.toml

+4
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,10 @@ name = "framework_tool"
33
version = "0.4.1"
44
edition = "2021"
55

6+
[features]
7+
default = [ ]
8+
readonly = [ "framework_lib/readonly" ]
9+
610
[dependencies.framework_lib]
711
path = "../framework_lib"
812

framework_uefi/Cargo.toml

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ rust-version = "1.74"
99
name = "uefitool"
1010
path = "src/main.rs"
1111

12+
[features]
13+
default = [ ]
14+
readonly = [ "framework_lib/readonly" ]
15+
1216
[dependencies]
1317
uefi = { version = "0.20", features = ["alloc"] }
1418
uefi-services = "0.17"

0 commit comments

Comments
 (0)