Skip to content

Commit aed6f76

Browse files
ihexonmtjhrc
authored andcommitted
virtio/console: Fixed libkrun panic caused by console resizing during VM startup
Signed-off-by: ihexon <[email protected]>
1 parent 5391692 commit aed6f76

1 file changed

Lines changed: 9 additions & 4 deletions

File tree

src/devices/src/virtio/console/event_handler.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -112,14 +112,19 @@ impl Subscriber for Console {
112112
fn process(&mut self, event: &EpollEvent, event_manager: &mut EventManager) {
113113
let source = event.fd();
114114

115-
let control_rxq = self.queue_events[CONTROL_RXQ_INDEX].as_raw_fd();
116-
let control_txq = self.queue_events[CONTROL_TXQ_INDEX].as_raw_fd();
117-
let control_rxq_control = self.control.queue_evt().as_raw_fd();
118-
119115
let activate_evt = self.activate_evt.as_raw_fd();
120116
let sigwinch_evt = self.sigwinch_evt.as_raw_fd();
121117

122118
if self.is_activated() {
119+
// interest_list() registers sigwinch_evt and control.queue_evt() with
120+
// epoll at creation time, but queue_events is only populated later in
121+
// activate(). If a spurious event arrives before activation, indexing
122+
// into the empty queue_events would panic — so these must stay inside
123+
// the is_activated() guard.
124+
let control_rxq = self.queue_events[CONTROL_RXQ_INDEX].as_raw_fd();
125+
let control_txq = self.queue_events[CONTROL_TXQ_INDEX].as_raw_fd();
126+
let control_rxq_control = self.control.queue_evt().as_raw_fd();
127+
123128
let mut raise_irq = false;
124129

125130
if source == control_txq {

0 commit comments

Comments
 (0)