Set up a monotonic clock boot time offset in the VM
This commit is contained in:
parent
8c3878f117
commit
981393443b
2 changed files with 19 additions and 0 deletions
|
|
@ -8,6 +8,8 @@ const MS_NODEV: c_ulong = 0x04;
|
|||
const MS_RELATIME: c_ulong = 0x200000;
|
||||
const MS_STRICTATIME: c_ulong = 0x1000000;
|
||||
|
||||
const CLONE_NEWTIME: c_int = 0x80;
|
||||
|
||||
unsafe extern "C" {
|
||||
fn mount(
|
||||
src: *const c_char,
|
||||
|
|
@ -17,6 +19,7 @@ unsafe extern "C" {
|
|||
data: *const c_void,
|
||||
) -> c_int;
|
||||
fn getrandom(buf: *mut u8, buflen: usize, flags: u32) -> c_int;
|
||||
fn unshare(flags: c_int) -> c_int;
|
||||
}
|
||||
|
||||
fn gen_machine_id() -> String {
|
||||
|
|
@ -133,6 +136,17 @@ fn main() -> Result<(), std::io::Error> {
|
|||
);
|
||||
}
|
||||
|
||||
if let Ok(offset) = std::env::var("BOOT_TIME_OFFSET") {
|
||||
if unsafe { unshare(CLONE_NEWTIME) } != 0 {
|
||||
eprintln!("[micro-activate] Could not unshare time!");
|
||||
} else {
|
||||
std::fs::write(
|
||||
"/proc/self/timens_offsets",
|
||||
format!("monotonic {offset}\nboottime {offset}\n"),
|
||||
)?;
|
||||
}
|
||||
}
|
||||
|
||||
let mut args = std::env::args_os().skip(1);
|
||||
let cmd = args.next().unwrap();
|
||||
Err(std::process::Command::new(cmd).args(args).exec())
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue