oxenstored: Factor out Process.do_reconnect()

The logic flow here is complicated.  In preparation to fix a bug, factor out
reconnecting a xenbus connection, and fold History.reconnect into it's single
caller.

No functional change.

This is part of XSA-512 / CVE-2026-79604.

Signed-off-by: Andrii Sultanov <andriy.sultanov@vates.tech>
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Andrii Sultanov <andriy.sultanov@vates.tech>
This commit is contained in:
Andrii Sultanov authored and Andrew Cooper committed 2026-09-08 12:57:23 +01:00
1 parent ed7e656e6c
commit 9c5a46b120
2 files changed
+10 -11

No files matched your search

-4
View File
@@ -39,10 +39,6 @@ let end_transaction txn con tid commit =
trim ~txn ();
success
let reconnect con =
trim ();
Connection.do_reconnect con
let push (x: history_record) =
let dom = x.con.Connection.dom in
match dom with
+10 -7
View File
@@ -350,6 +350,13 @@ let do_reset_watches con _t _domains cons _data =
Connections.del_watches cons con;
Connection.del_transactions con
let do_reconnect cons con =
let domstr = Connection.get_domstr con in
info "%s requests a reconnect" domstr;
History.trim ();
Connection.do_reconnect con;
info "%s reconnection complete" domstr
(* only in >= xen3.3 *)
let do_set_target con _t _domains cons data =
if not (Connection.is_dom0 con)
@@ -735,9 +742,7 @@ let do_input store cons doms con =
if Connection.can_input con then Connection.do_input con
else None
with Xenbus.Xb.Reconnect ->
info "%s requests a reconnect" (Connection.get_domstr con);
History.reconnect con;
info "%s reconnection complete" (Connection.get_domstr con);
do_reconnect cons con;
None
| Invalid_argument exp | Failure exp ->
error "caught exception %s" exp;
@@ -760,7 +765,7 @@ let do_input store cons doms con =
write_access_log ~ty ~tid ~con:(Connection.get_domstr con) ~data;
Connection.incr_ops con
let do_output _store _cons _doms con =
let do_output _store cons _doms con =
Connection.source_flush_watchevents con;
if Connection.has_output con then (
if Connection.has_new_output con then (
@@ -775,8 +780,6 @@ let do_output _store _cons _doms con =
try
ignore (Connection.do_output con)
with Xenbus.Xb.Reconnect ->
info "%s requests a reconnect" (Connection.get_domstr con);
History.reconnect con;
info "%s reconnection complete" (Connection.get_domstr con)
do_reconnect cons con
)
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.