Skip to content

Commit 9f10349

Browse files
ikichavireshk
authored andcommitted
vsock: always epoll_register with cloned stream fd
VsockConnection::stream which is cloned is always used for epoll_register, except add_new_guest_conn. Only in add_new_guest_conn, the original stream is used. Because a stream's raw fd is used for the key of listener_map, it cannot find proper listener after the first packet. Signed-off-by: Jeongik Cha <[email protected]>
1 parent 6305c66 commit 9f10349

File tree

1 file changed

+3
-4
lines changed

1 file changed

+3
-4
lines changed

crates/vsock/src/thread_backend.rs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -290,10 +290,6 @@ impl VsockThreadBackend {
290290
stream: UnixStream,
291291
pkt: &VsockPacket<B>,
292292
) -> Result<()> {
293-
let stream_fd = stream.as_raw_fd();
294-
self.listener_map
295-
.insert(stream_fd, ConnMapKey::new(pkt.dst_port(), pkt.src_port()));
296-
297293
let conn = VsockConnection::new_peer_init(
298294
stream.try_clone().map_err(Error::UnixConnect)?,
299295
pkt.dst_cid(),
@@ -304,6 +300,9 @@ impl VsockThreadBackend {
304300
pkt.buf_alloc(),
305301
self.tx_buffer_size,
306302
);
303+
let stream_fd = conn.stream.as_raw_fd();
304+
self.listener_map
305+
.insert(stream_fd, ConnMapKey::new(pkt.dst_port(), pkt.src_port()));
307306

308307
self.conn_map
309308
.insert(ConnMapKey::new(pkt.dst_port(), pkt.src_port()), conn);

0 commit comments

Comments
 (0)