sysmaster/backport-fix-devmaster-avoid-coredump-when-rules-directory-is.patch

160 lines
5.7 KiB
Diff

From 08f37b15eee2bf80604ff07860b6bec99b2d9407 Mon Sep 17 00:00:00 2001
From: chenjiayi <chenjiayi22@huawei.com>
Date: Tue, 15 Aug 2023 10:06:45 +0800
Subject: [PATCH 1/3] fix(devmaster): avoid coredump when rules directory is
empty
Also simplify configuration entry 'netif_cfg_d' into 'network_d'.
---
exts/devmaster/config/config.toml | 13 +++++++++++++
exts/devmaster/config/network.d/99-default.link | 5 +++++
exts/devmaster/config/rules.d/99-default.rules | 1 +
exts/devmaster/src/lib/config/devmaster_conf.rs | 11 +++++++----
exts/devmaster/src/lib/framework/devmaster.rs | 4 ++--
exts/devmaster/src/lib/rules/exec_mgr.rs | 5 +----
exts/devmaster/tests/network/99-default.link | 7 -------
7 files changed, 29 insertions(+), 17 deletions(-)
create mode 100644 exts/devmaster/config/config.toml
create mode 100644 exts/devmaster/config/network.d/99-default.link
create mode 100644 exts/devmaster/config/rules.d/99-default.rules
delete mode 100644 exts/devmaster/tests/network/99-default.link
diff --git a/exts/devmaster/config/config.toml b/exts/devmaster/config/config.toml
new file mode 100644
index 00000000..35e795c3
--- /dev/null
+++ b/exts/devmaster/config/config.toml
@@ -0,0 +1,13 @@
+# Default configuration of devmaster daemon.
+
+# Support 'info' and 'debug'.
+log_level = "info"
+
+# Support multiple rules directories.
+rules_d = ["/etc/devmaster/rules.d"]
+
+# Support multiple network interface configuration directories.
+network_d = ["/etc/devmaster/network.d"]
+
+# The default value is 3.
+max_workers = 3
diff --git a/exts/devmaster/config/network.d/99-default.link b/exts/devmaster/config/network.d/99-default.link
new file mode 100644
index 00000000..831f33ed
--- /dev/null
+++ b/exts/devmaster/config/network.d/99-default.link
@@ -0,0 +1,5 @@
+[Match]
+OriginalName = "*"
+
+[Link]
+NamePolicy = ["database", "onboard", "slot", "path"]
diff --git a/exts/devmaster/config/rules.d/99-default.rules b/exts/devmaster/config/rules.d/99-default.rules
new file mode 100644
index 00000000..78f59f0a
--- /dev/null
+++ b/exts/devmaster/config/rules.d/99-default.rules
@@ -0,0 +1 @@
+TAG+="devmaster"
\ No newline at end of file
diff --git a/exts/devmaster/src/lib/config/devmaster_conf.rs b/exts/devmaster/src/lib/config/devmaster_conf.rs
index b7fcd00d..645d2e67 100644
--- a/exts/devmaster/src/lib/config/devmaster_conf.rs
+++ b/exts/devmaster/src/lib/config/devmaster_conf.rs
@@ -44,7 +44,7 @@ pub(crate) struct DevmasterConfigData {
pub(crate) rules_d: Option<Vec<String>>,
pub(crate) max_workers: Option<u32>,
pub(crate) log_level: Option<String>,
- pub(crate) netif_cfg_d: Option<Vec<String>>,
+ pub(crate) network_d: Option<Vec<String>>,
}
impl DevmasterConfig {
@@ -101,7 +101,7 @@ impl DevmasterConfig {
pub fn get_netif_cfg_d(&self) -> Vec<String> {
self.inner
.borrow()
- .netif_cfg_d
+ .network_d
.clone()
.unwrap_or_else(|| DEFAULT_NETIF_CONFIG_DIRS.to_vec())
}
@@ -116,7 +116,7 @@ mod tests {
fn test_config() {
let config_s = "
rules_d = [\"/root/rules.d\"]
-netif_cfg_d = [\"/root/network\"]
+network_d = [\"/root/network.d\"]
";
fs::write("/tmp/test_config.toml", config_s).unwrap();
let config: DevmasterConfig = DevmasterConfig::new();
@@ -125,7 +125,10 @@ netif_cfg_d = [\"/root/network\"]
assert_eq!(config.get_rules_d(), vec!["/root/rules.d".to_string()]);
assert_eq!(config.get_max_workers(), 3);
assert_eq!(config.get_log_level(), LevelFilter::Info);
- assert_eq!(config.get_netif_cfg_d(), vec!["/root/network".to_string()]);
+ assert_eq!(
+ config.get_netif_cfg_d(),
+ vec!["/root/network.d".to_string()]
+ );
fs::remove_file("/tmp/test_config.toml").unwrap();
let default_conf = DevmasterConfig::new();
diff --git a/exts/devmaster/src/lib/framework/devmaster.rs b/exts/devmaster/src/lib/framework/devmaster.rs
index 2fc00313..b636dc1e 100644
--- a/exts/devmaster/src/lib/framework/devmaster.rs
+++ b/exts/devmaster/src/lib/framework/devmaster.rs
@@ -56,11 +56,11 @@ pub struct Cache {
impl Cache {
/// generate the shared cache
- pub fn new(rules_d: Vec<String>, netif_cfg_d: Vec<String>) -> Cache {
+ pub fn new(rules_d: Vec<String>, network_d: Vec<String>) -> Cache {
let rules = Rules::load_rules(rules_d, ResolveNameTime::Early);
let mut netif_cfg_ctx = NetifConfigCtx::new();
- netif_cfg_ctx.load(netif_cfg_d);
+ netif_cfg_ctx.load(network_d);
Cache {
rules,
diff --git a/exts/devmaster/src/lib/rules/exec_mgr.rs b/exts/devmaster/src/lib/rules/exec_mgr.rs
index 7a685e1b..18c38a18 100644
--- a/exts/devmaster/src/lib/rules/exec_mgr.rs
+++ b/exts/devmaster/src/lib/rules/exec_mgr.rs
@@ -219,7 +219,7 @@ impl ExecuteManager {
.files
.clone();
- loop {
+ while self.current_rule_file.is_some() {
let next_file = self
.current_rule_file
.clone()
@@ -233,9 +233,6 @@ impl ExecuteManager {
self.apply_rule_file()?;
self.current_rule_file = next_file;
- if self.current_rule_file.is_none() {
- break;
- }
}
Ok(())
diff --git a/exts/devmaster/tests/network/99-default.link b/exts/devmaster/tests/network/99-default.link
deleted file mode 100644
index 2c86cdb5..00000000
--- a/exts/devmaster/tests/network/99-default.link
+++ /dev/null
@@ -1,7 +0,0 @@
-[Match]
-OriginalName = "*"
-
-[Link]
-NamePolicy = ["keep", "kernel", "database", "onboard", "slot", "path"]
-AlternativeNamesPolicy = ["database", "onboard", "slot", "path"]
-MACAddressPolicy = "persistent"
--
2.33.0