Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package libkrun for openSUSE:Factory checked in at 2022-06-23 10:24:19 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libkrun (Old) and /work/SRC/openSUSE:Factory/.libkrun.new.1548 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libkrun" Thu Jun 23 10:24:19 2022 rev:6 rq:984446 version:1.2.1 Changes: -------- --- /work/SRC/openSUSE:Factory/libkrun/libkrun.changes 2022-06-21 16:32:32.783822997 +0200 +++ /work/SRC/openSUSE:Factory/.libkrun.new.1548/libkrun.changes 2022-06-23 10:25:03.291791135 +0200 @@ -1,0 +2,11 @@ +Wed Jun 22 07:36:02 UTC 2022 - dfaggi...@suse.com + +- Run services and update vendored dependencies +- Update to version 1.2.1: + * Bump vm-memory dependency from 0.7.0 to 0.8.0 +- Update to version to 1.2.0: + * Disable virtio-fs DAX + + Fixes a bug triggered when using openSUSE images + * vsock: defer TSI proxy removal + +------------------------------------------------------------------- Old: ---- libkrun-1.1.0.obscpio New: ---- libkrun-1.2.1.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libkrun.spec ++++++ --- /var/tmp/diff_new_pack.cL2H2t/_old 2022-06-23 10:25:04.379792317 +0200 +++ /var/tmp/diff_new_pack.cL2H2t/_new 2022-06-23 10:25:04.383792321 +0200 @@ -18,7 +18,7 @@ %global rustflags '-Clink-arg=-Wl,-z,relro,-z,now' Name: libkrun -Version: 1.1.0 +Version: 1.2.1 Release: 0 Summary: A dynamic library providing KVM-based process isolation capabilities License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.cL2H2t/_old 2022-06-23 10:25:04.415792356 +0200 +++ /var/tmp/diff_new_pack.cL2H2t/_new 2022-06-23 10:25:04.419792360 +0200 @@ -2,7 +2,7 @@ <service name="obs_scm" mode="disabled"> <param name="scm">git</param> - <param name="revision">v1.1.0</param> + <param name="revision">v1.2.1</param> <param name="url">https://github.com/containers/libkrun.git</param> <param name="versionformat">@PARENT_TAG@</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.cL2H2t/_old 2022-06-23 10:25:04.439792382 +0200 +++ /var/tmp/diff_new_pack.cL2H2t/_new 2022-06-23 10:25:04.443792386 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/containers/libkrun.git</param> - <param name="changesrevision">2469df74b0c97ded6a761f3a4aa07be0b805438f</param></service></servicedata> + <param name="changesrevision">abdd4d4fb8a7e218049e7823226ee7bbe80b2e67</param></service></servicedata> (No newline at EOF) ++++++ libkrun-1.1.0.obscpio -> libkrun-1.2.1.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/Cargo.lock new/libkrun-1.2.1/Cargo.lock --- old/libkrun-1.1.0/Cargo.lock 2022-06-17 13:02:05.000000000 +0200 +++ new/libkrun-1.2.1/Cargo.lock 2022-06-21 07:57:56.000000000 +0200 @@ -738,7 +738,7 @@ [[package]] name = "libkrun" -version = "1.1.0" +version = "1.2.1" dependencies = [ "devices", "env_logger", @@ -1864,9 +1864,9 @@ [[package]] name = "vm-memory" -version = "0.7.0" +version = "0.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "339d4349c126fdcd87e034631d7274370cf19eb0e87b33166bcd956589fc72c5" +checksum = "767ed8aaebbff902e02e6d3749dc2baef55e46565f8a6414a065e5baee4b4a81" dependencies = [ "libc", "winapi 0.3.9", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/Makefile new/libkrun-1.2.1/Makefile --- old/libkrun-1.1.0/Makefile 2022-06-17 13:02:05.000000000 +0200 +++ new/libkrun-1.2.1/Makefile 2022-06-21 07:57:56.000000000 +0200 @@ -2,7 +2,7 @@ INIT_BINARY = init/init ABI_VERSION=1 -FULL_VERSION=1.1.0 +FULL_VERSION=1.2.1 ifeq ($(SEV),1) VARIANT = -sev diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/src/arch/Cargo.toml new/libkrun-1.2.1/src/arch/Cargo.toml --- old/libkrun-1.1.0/src/arch/Cargo.toml 2022-06-17 13:02:05.000000000 +0200 +++ new/libkrun-1.2.1/src/arch/Cargo.toml 2022-06-21 07:57:56.000000000 +0200 @@ -9,7 +9,7 @@ [dependencies] libc = ">=0.2.39" -vm-memory = { version = "0.7.0", features = ["backend-mmap"] } +vm-memory = { version = "0.8.0", features = ["backend-mmap"] } arch_gen = { path = "../arch_gen" } utils = { path = "../utils" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/src/devices/Cargo.toml new/libkrun-1.2.1/src/devices/Cargo.toml --- old/libkrun-1.1.0/src/devices/Cargo.toml 2022-06-17 13:02:05.000000000 +0200 +++ new/libkrun-1.2.1/src/devices/Cargo.toml 2022-06-21 07:57:56.000000000 +0200 @@ -15,7 +15,7 @@ lru = "0.6.3" nix = "0.24.1" rand = "0.8.5" -vm-memory = { version = "0.7.0", features = ["backend-mmap"] } +vm-memory = { version = "0.8.0", features = ["backend-mmap"] } arch = { path = "../arch" } utils = { path = "../utils" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/src/devices/src/virtio/vsock/mod.rs new/libkrun-1.2.1/src/devices/src/virtio/vsock/mod.rs --- old/libkrun-1.1.0/src/devices/src/virtio/vsock/mod.rs 2022-06-17 13:02:05.000000000 +0200 +++ new/libkrun-1.2.1/src/devices/src/virtio/vsock/mod.rs 2022-06-21 07:57:56.000000000 +0200 @@ -13,6 +13,7 @@ #[allow(dead_code)] mod packet; mod proxy; +mod reaper; mod tcp; mod udp; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/src/devices/src/virtio/vsock/muxer.rs new/libkrun-1.2.1/src/devices/src/virtio/vsock/muxer.rs --- old/libkrun-1.1.0/src/devices/src/virtio/vsock/muxer.rs 2022-06-17 13:02:05.000000000 +0200 +++ new/libkrun-1.2.1/src/devices/src/virtio/vsock/muxer.rs 2022-06-21 07:57:56.000000000 +0200 @@ -1,6 +1,7 @@ use std::collections::HashMap; use std::os::unix::io::RawFd; use std::sync::atomic::{AtomicUsize, Ordering}; +use std::sync::mpsc::{channel, Sender}; use std::sync::{Arc, Mutex, RwLock}; use super::super::super::legacy::Gic; @@ -11,7 +12,8 @@ use super::muxer_rxq::{rx_to_pkt, MuxerRxQ}; use super::muxer_thread::MuxerThread; use super::packet::{TsiGetnameRsp, VsockPacket}; -use super::proxy::{Proxy, ProxyUpdate}; +use super::proxy::{Proxy, ProxyRemoval, ProxyUpdate}; +use super::reaper::ReaperThread; use super::tcp::TcpProxy; use super::udp::UdpProxy; use super::VsockError; @@ -102,6 +104,7 @@ intc: Option<Arc<Mutex<Gic>>>, irq_line: Option<u32>, proxy_map: ProxyMap, + reaper_sender: Option<Sender<u64>>, } impl VsockMuxer { @@ -125,6 +128,7 @@ intc: None, irq_line: None, proxy_map: Arc::new(RwLock::new(HashMap::new())), + reaper_sender: None, } } @@ -142,6 +146,8 @@ self.intc = intc.clone(); self.irq_line = irq_line; + let (sender, receiver) = channel(); + let thread = MuxerThread::new( self.cid, self.epoll.clone(), @@ -155,8 +161,13 @@ self.interrupt_status.clone(), intc, irq_line, + sender.clone(), ); thread.run(); + + self.reaper_sender = Some(sender); + let reaper = ReaperThread::new(receiver, self.proxy_map.clone()); + reaper.run(); } pub(crate) fn has_pending_stream_rx(&self) -> bool { @@ -212,8 +223,20 @@ self.update_polling(polling.0, polling.1, polling.2); } - if update.remove_proxy { - self.proxy_map.write().unwrap().remove(&id); + match update.remove_proxy { + ProxyRemoval::Keep => {} + ProxyRemoval::Immediate => { + warn!("immediately removing proxy: {}", id); + self.proxy_map.write().unwrap().remove(&id); + } + ProxyRemoval::Deferred => { + warn!("deferring proxy removal: {}", id); + if let Some(reaper_sender) = &self.reaper_sender { + if reaper_sender.send(id).is_err() { + self.proxy_map.write().unwrap().remove(&id); + } + } + } } if update.signal_queue { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/src/devices/src/virtio/vsock/muxer_thread.rs new/libkrun-1.2.1/src/devices/src/virtio/vsock/muxer_thread.rs --- old/libkrun-1.1.0/src/devices/src/virtio/vsock/muxer_thread.rs 2022-06-17 13:02:05.000000000 +0200 +++ new/libkrun-1.2.1/src/devices/src/virtio/vsock/muxer_thread.rs 2022-06-21 07:57:56.000000000 +0200 @@ -1,5 +1,6 @@ use std::os::unix::io::RawFd; use std::sync::atomic::{AtomicUsize, Ordering}; +use std::sync::mpsc::Sender; use std::sync::{Arc, Mutex}; use std::thread; @@ -8,7 +9,7 @@ use super::super::VIRTIO_MMIO_INT_VRING; use super::muxer::{push_packet, MuxerRx, ProxyMap}; use super::muxer_rxq::MuxerRxQ; -use super::proxy::ProxyUpdate; +use super::proxy::{ProxyRemoval, ProxyUpdate}; use super::tcp::TcpProxy; use rand::{rngs::ThreadRng, thread_rng, Rng}; @@ -29,6 +30,7 @@ interrupt_status: Arc<AtomicUsize>, intc: Option<Arc<Mutex<Gic>>>, irq_line: Option<u32>, + reaper_sender: Sender<u64>, } impl MuxerThread { @@ -46,6 +48,7 @@ interrupt_status: Arc<AtomicUsize>, intc: Option<Arc<Mutex<Gic>>>, irq_line: Option<u32>, + reaper_sender: Sender<u64>, ) -> Self { MuxerThread { cid, @@ -60,6 +63,7 @@ interrupt_status, intc, irq_line, + reaper_sender, } } @@ -101,8 +105,18 @@ self.send_credit_request(credit_rx); } - if update.remove_proxy { - self.proxy_map.write().unwrap().remove(&id); + match update.remove_proxy { + ProxyRemoval::Keep => {} + ProxyRemoval::Immediate => { + warn!("immediately removing proxy: {}", id); + self.proxy_map.write().unwrap().remove(&id); + } + ProxyRemoval::Deferred => { + warn!("deferring proxy removal: {}", id); + if self.reaper_sender.send(id).is_err() { + self.proxy_map.write().unwrap().remove(&id); + } + } } let mut should_signal = update.signal_queue; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/src/devices/src/virtio/vsock/proxy.rs new/libkrun-1.2.1/src/devices/src/virtio/vsock/proxy.rs --- old/libkrun-1.1.0/src/devices/src/virtio/vsock/proxy.rs 2022-06-17 13:02:05.000000000 +0200 +++ new/libkrun-1.2.1/src/devices/src/virtio/vsock/proxy.rs 2022-06-21 07:57:56.000000000 +0200 @@ -32,10 +32,22 @@ WaitingOnAccept, } +pub enum ProxyRemoval { + Keep, + Immediate, + Deferred, +} + +impl Default for ProxyRemoval { + fn default() -> ProxyRemoval { + ProxyRemoval::Keep + } +} + #[derive(Default)] pub struct ProxyUpdate { pub signal_queue: bool, - pub remove_proxy: bool, + pub remove_proxy: ProxyRemoval, pub polling: Option<(u64, RawFd, EventSet)>, pub new_proxy: Option<(u32, RawFd)>, pub push_accept: Option<(u64, u64)>, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/src/devices/src/virtio/vsock/reaper.rs new/libkrun-1.2.1/src/devices/src/virtio/vsock/reaper.rs --- old/libkrun-1.1.0/src/devices/src/virtio/vsock/reaper.rs 1970-01-01 01:00:00.000000000 +0100 +++ new/libkrun-1.2.1/src/devices/src/virtio/vsock/reaper.rs 2022-06-21 07:57:56.000000000 +0200 @@ -0,0 +1,67 @@ +use std::collections::HashMap; +use std::sync::mpsc::Receiver; +use std::sync::{Arc, Mutex, RwLock}; +use std::thread; +use std::time::{Duration, Instant}; + +use super::proxy::Proxy; + +pub type ProxyMap = Arc<RwLock<HashMap<u64, Mutex<Box<dyn Proxy>>>>>; +const TIMEOUT: Duration = Duration::new(5, 0); + +pub struct ReaperThread { + receiver: Receiver<u64>, + proxy_map: ProxyMap, + released_map: HashMap<u64, Instant>, +} + +impl ReaperThread { + pub fn new(receiver: Receiver<u64>, proxy_map: ProxyMap) -> Self { + Self { + receiver, + proxy_map, + released_map: HashMap::new(), + } + } + + fn check_expiration(&mut self) -> Duration { + let mut lowest_elapsed = Duration::MAX; + let mut expired: Vec<u64> = Vec::new(); + let now = Instant::now(); + + for (id, exptime) in self.released_map.iter() { + let elapsed = now.duration_since(*exptime); + if elapsed > TIMEOUT { + expired.push(*id); + } else if elapsed < lowest_elapsed { + lowest_elapsed = elapsed; + } + } + + if !expired.is_empty() { + let mut pmap = self.proxy_map.write().unwrap(); + for id in expired { + debug!("removing proxy: {}", id); + pmap.remove(&id); + self.released_map.remove(&id); + } + debug!("remainig proxies: {}", pmap.len()); + } + + lowest_elapsed + } + + fn work(&mut self) { + loop { + let timeout = self.check_expiration(); + if let Ok(id) = self.receiver.recv_timeout(timeout) { + println!("reaper alive"); + self.released_map.insert(id, Instant::now()); + } + } + } + + pub fn run(mut self) { + thread::spawn(move || self.work()); + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/src/devices/src/virtio/vsock/tcp.rs new/libkrun-1.2.1/src/devices/src/virtio/vsock/tcp.rs --- old/libkrun-1.1.0/src/devices/src/virtio/vsock/tcp.rs 2022-06-17 13:02:05.000000000 +0200 +++ new/libkrun-1.2.1/src/devices/src/virtio/vsock/tcp.rs 2022-06-21 07:57:56.000000000 +0200 @@ -21,7 +21,7 @@ use super::packet::{ TsiAcceptReq, TsiConnectReq, TsiGetnameRsp, TsiListenReq, TsiSendtoAddr, VsockPacket, }; -use super::proxy::{Proxy, ProxyError, ProxyStatus, ProxyUpdate, RecvPkt}; +use super::proxy::{Proxy, ProxyError, ProxyRemoval, ProxyStatus, ProxyUpdate, RecvPkt}; use utils::epoll::EventSet; use vm_memory::GuestMemoryMmap; @@ -688,8 +688,13 @@ "release: id={}, tx_cnt={}, last_tx_cnt={}", self.id, self.tx_cnt, self.last_tx_cnt_sent ); + let remove_proxy = if self.status == ProxyStatus::Listening { + ProxyRemoval::Immediate + } else { + ProxyRemoval::Deferred + }; ProxyUpdate { - remove_proxy: true, + remove_proxy, ..Default::default() } } @@ -708,7 +713,11 @@ self.status = ProxyStatus::Closed; update.polling = Some((self.id, self.fd, EventSet::empty())); update.signal_queue = true; - update.remove_proxy = true; + update.remove_proxy = if self.status == ProxyStatus::Listening { + ProxyRemoval::Immediate + } else { + ProxyRemoval::Deferred + }; return update; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/src/devices/src/virtio/vsock/udp.rs new/libkrun-1.2.1/src/devices/src/virtio/vsock/udp.rs --- old/libkrun-1.1.0/src/devices/src/virtio/vsock/udp.rs 2022-06-17 13:02:05.000000000 +0200 +++ new/libkrun-1.2.1/src/devices/src/virtio/vsock/udp.rs 2022-06-21 07:57:56.000000000 +0200 @@ -21,7 +21,7 @@ use super::packet::{ TsiAcceptReq, TsiConnectReq, TsiGetnameRsp, TsiListenReq, TsiSendtoAddr, VsockPacket, }; -use super::proxy::{Proxy, ProxyError, ProxyStatus, ProxyUpdate, RecvPkt}; +use super::proxy::{Proxy, ProxyError, ProxyRemoval, ProxyStatus, ProxyUpdate, RecvPkt}; use utils::epoll::EventSet; use vm_memory::GuestMemoryMmap; @@ -394,8 +394,13 @@ fn release(&mut self) -> ProxyUpdate { debug!("release"); + let remove_proxy = if self.status == ProxyStatus::Listening { + ProxyRemoval::Immediate + } else { + ProxyRemoval::Deferred + }; ProxyUpdate { - remove_proxy: true, + remove_proxy, ..Default::default() } } @@ -404,7 +409,11 @@ let mut update = ProxyUpdate::default(); if evset.contains(EventSet::HANG_UP) { - update.remove_proxy = true; + update.remove_proxy = if self.status == ProxyStatus::Listening { + ProxyRemoval::Immediate + } else { + ProxyRemoval::Deferred + }; return update; } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/src/kernel/Cargo.toml new/libkrun-1.2.1/src/kernel/Cargo.toml --- old/libkrun-1.1.0/src/kernel/Cargo.toml 2022-06-17 13:02:05.000000000 +0200 +++ new/libkrun-1.2.1/src/kernel/Cargo.toml 2022-06-21 07:57:56.000000000 +0200 @@ -4,6 +4,6 @@ edition = "2021" [dependencies] -vm-memory = { version = "0.7.0", features = ["backend-mmap"] } +vm-memory = { version = "0.8.0", features = ["backend-mmap"] } utils = { path = "../utils" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/src/libkrun/Cargo.toml new/libkrun-1.2.1/src/libkrun/Cargo.toml --- old/libkrun-1.1.0/src/libkrun/Cargo.toml 2022-06-17 13:02:05.000000000 +0200 +++ new/libkrun-1.2.1/src/libkrun/Cargo.toml 2022-06-21 07:57:56.000000000 +0200 @@ -1,6 +1,6 @@ [package] name = "libkrun" -version = "1.1.0" +version = "1.2.1" authors = ["Sergio Lopez <s...@redhat.com>"] edition = "2021" build = "build.rs" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/src/vmm/Cargo.toml new/libkrun-1.2.1/src/vmm/Cargo.toml --- old/libkrun-1.1.0/src/vmm/Cargo.toml 2022-06-17 13:02:05.000000000 +0200 +++ new/libkrun-1.2.1/src/vmm/Cargo.toml 2022-06-21 07:57:56.000000000 +0200 @@ -11,7 +11,7 @@ env_logger = "0.9.0" libc = ">=0.2.39" log = "0.4.0" -vm-memory = { version = "0.7.0", features = ["backend-mmap"] } +vm-memory = { version = "0.8.0", features = ["backend-mmap"] } arch = { path = "../arch" } devices = { path = "../devices" } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libkrun-1.1.0/src/vmm/src/vmm_config/boot_source.rs new/libkrun-1.2.1/src/vmm/src/vmm_config/boot_source.rs --- old/libkrun-1.1.0/src/vmm/src/vmm_config/boot_source.rs 2022-06-17 13:02:05.000000000 +0200 +++ new/libkrun-1.2.1/src/vmm/src/vmm_config/boot_source.rs 2022-06-21 07:57:56.000000000 +0200 @@ -18,8 +18,7 @@ #[cfg(all(target_os = "linux", not(feature = "amd-sev")))] pub const DEFAULT_KERNEL_CMDLINE: &str = "reboot=k panic=-1 panic_print=0 nomodules console=hvc0 \ - rootflags=dax rootfstype=virtiofs rw quiet no-kvmapf \ - tsi_hijack"; + rootfstype=virtiofs rw quiet no-kvmapf tsi_hijack"; #[cfg(feature = "amd-sev")] pub const DEFAULT_KERNEL_CMDLINE: &str = "reboot=k panic=-1 panic_print=0 nomodules console=hvc0 \ ++++++ libkrun.obsinfo ++++++ --- /var/tmp/diff_new_pack.cL2H2t/_old 2022-06-23 10:25:04.631792590 +0200 +++ /var/tmp/diff_new_pack.cL2H2t/_new 2022-06-23 10:25:04.631792590 +0200 @@ -1,5 +1,5 @@ name: libkrun -version: 1.1.0 -mtime: 1655463725 -commit: 9d6a63309f920b8e62e5a1df03d4c00a54a116d3 +version: 1.2.1 +mtime: 1655791076 +commit: 4beee03d1168327ef6cda09c02ce940ae52f55fd ++++++ vendor.tar.zst ++++++ Binary files /var/tmp/diff_new_pack.cL2H2t/_old and /var/tmp/diff_new_pack.cL2H2t/_new differ