From: Maximiliano Sandoval <m.sandoval@proxmox.com>
To: pbs-devel@lists.proxmox.com
Subject: [pbs-devel] [PATCH backup] mark setup_safe_path_env as unsafe
Date: Fri, 21 Feb 2025 10:22:44 +0100 [thread overview]
Message-ID: <20250221092244.128601-1-m.sandoval@proxmox.com> (raw)
This method is unsafe in the 2024 edition.
The specific wording used in the safety docstring comes from `cargo fix
--edition`.
Signed-off-by: Maximiliano Sandoval <m.sandoval@proxmox.com>
---
I would personally prefer if someone more familiarized with these 4 binaries can
clarify whether all these uses are safe and add a, for example,
```
SAFETY: The enviroment is only ever accessed from here.
```
comment on top of the unsafe incantations.
src/bin/proxmox-backup-api.rs | 2 +-
src/bin/proxmox-backup-manager.rs | 2 +-
src/bin/proxmox-backup-proxy.rs | 2 +-
src/bin/proxmox-daily-update.rs | 2 +-
src/tools/mod.rs | 16 ++++++++++++----
5 files changed, 16 insertions(+), 8 deletions(-)
diff --git a/src/bin/proxmox-backup-api.rs b/src/bin/proxmox-backup-api.rs
index 829974d25..ed1d12772 100644
--- a/src/bin/proxmox-backup-api.rs
+++ b/src/bin/proxmox-backup-api.rs
@@ -20,7 +20,7 @@ use proxmox_backup::server::auth::check_pbs_auth;
fn main() {
pbs_tools::setup_libc_malloc_opts();
- proxmox_backup::tools::setup_safe_path_env();
+ unsafe { proxmox_backup::tools::setup_path_env() };
if let Err(err) = proxmox_async::runtime::main(run()) {
eprintln!("Error: {}", err);
diff --git a/src/bin/proxmox-backup-manager.rs b/src/bin/proxmox-backup-manager.rs
index 02ca0d028..910e9623d 100644
--- a/src/bin/proxmox-backup-manager.rs
+++ b/src/bin/proxmox-backup-manager.rs
@@ -704,7 +704,7 @@ async fn run() -> Result<(), Error> {
}
fn main() -> Result<(), Error> {
- proxmox_backup::tools::setup_safe_path_env();
+ unsafe { proxmox_backup::tools::setup_path_env() };
proxmox_async::runtime::main(run())
}
diff --git a/src/bin/proxmox-backup-proxy.rs b/src/bin/proxmox-backup-proxy.rs
index 2b6ceb6e6..a2bc3d3f1 100644
--- a/src/bin/proxmox-backup-proxy.rs
+++ b/src/bin/proxmox-backup-proxy.rs
@@ -57,7 +57,7 @@ use proxmox_backup::server::do_verification_job;
fn main() -> Result<(), Error> {
pbs_tools::setup_libc_malloc_opts();
- proxmox_backup::tools::setup_safe_path_env();
+ unsafe { proxmox_backup::tools::setup_path_env() };
let backup_uid = pbs_config::backup_user()?.uid;
let backup_gid = pbs_config::backup_group()?.gid;
diff --git a/src/bin/proxmox-daily-update.rs b/src/bin/proxmox-daily-update.rs
index dbfee07b4..7861c9a79 100644
--- a/src/bin/proxmox-daily-update.rs
+++ b/src/bin/proxmox-daily-update.rs
@@ -108,7 +108,7 @@ async fn run(rpcenv: &mut dyn RpcEnvironment) -> Result<(), Error> {
}
fn main() {
- proxmox_backup::tools::setup_safe_path_env();
+ unsafe { proxmox_backup::tools::setup_path_env() };
if let Err(err) = syslog::init(
syslog::Facility::LOG_DAEMON,
diff --git a/src/tools/mod.rs b/src/tools/mod.rs
index 322894dd7..220ec445e 100644
--- a/src/tools/mod.rs
+++ b/src/tools/mod.rs
@@ -54,10 +54,18 @@ pub fn pbs_simple_http(proxy_config: Option<ProxyConfig>) -> Client {
Client::with_options(options)
}
-pub fn setup_safe_path_env() {
- std::env::set_var("PATH", "/sbin:/bin:/usr/sbin:/usr/bin");
- // Make %ENV safer - as suggested by https://perldoc.perl.org/perlsec.html
+/// Setups the enviroment in a safer way.
+///
+/// Here "safer" should be understood as described in
+/// https://perldoc.perl.org/perlsec.html.
+///
+/// ## Safety
+///
+/// The caller must ensure that enviroment access only happens in
+/// single-threaded code.
+pub unsafe fn setup_path_env() {
+ unsafe { std::env::set_var("PATH", "/sbin:/bin:/usr/sbin:/usr/bin") };
for name in &["IFS", "CDPATH", "ENV", "BASH_ENV"] {
- std::env::remove_var(name);
+ unsafe { std::env::remove_var(name) };
}
}
--
2.39.5
_______________________________________________
pbs-devel mailing list
pbs-devel@lists.proxmox.com
https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel
reply other threads:[~2025-02-21 10:18 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250221092244.128601-1-m.sandoval@proxmox.com \
--to=m.sandoval@proxmox.com \
--cc=pbs-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox