mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
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>
(cherry picked from commit 9c5a46b120)
This commit is contained in:
1 parent
391bc11a86
commit
b414b465a6
2 files changed
+10
-11
No files matched your search
@@ -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
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||