From 782361b856f702f1cf54b42899f06d53d5d44f0e Mon Sep 17 00:00:00 2001 From: ihexon <14349453+ihexon@users.noreply.github.com> Date: Wed, 11 Feb 2026 14:11:59 +0800 Subject: [PATCH] libkrun: converts BSD sockaddr to Linux wire format Signed-off-by: ihexon <14349453+ihexon@users.noreply.github.com> --- src/devices/src/virtio/vsock/packet.rs | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/devices/src/virtio/vsock/packet.rs b/src/devices/src/virtio/vsock/packet.rs index c9cc0d527..9d1349cab 100644 --- a/src/devices/src/virtio/vsock/packet.rs +++ b/src/devices/src/virtio/vsock/packet.rs @@ -607,6 +607,20 @@ impl VsockPacket { std::slice::from_raw_parts(addr_ptr as *const u8, rsp.addr.len() as usize) }; buf[8..(rsp.addr.len() + 8) as usize].copy_from_slice(slice); + + // On macOS, convert BSD sockaddr (u8 sa_len + u8 sa_family) to + // Linux wire format (u16 sa_family). Also translate macOS AF_* + // values to their Linux equivalents (e.g. AF_INET6: 30 → 10). + #[cfg(target_os = "macos")] + { + let bsd_family = buf[9]; + let linux_family: u16 = match bsd_family as i32 { + libc::AF_INET => defs::LINUX_AF_INET, + libc::AF_INET6 => defs::LINUX_AF_INET6, + _ => 0, // AF_UNSPEC + }; + byte_order::write_le_u16(&mut buf[8..], linux_family); + } } } }