]> xenbits.xensource.com Git - xen.git/commitdiff
tools/ocaml/xenstored: ignore transaction id for [un]watch
authorEdwin Török <edvin.torok@citrix.com>
Tue, 15 Dec 2020 13:43:43 +0000 (14:43 +0100)
committerJan Beulich <jbeulich@suse.com>
Tue, 15 Dec 2020 13:43:43 +0000 (14:43 +0100)
Instead of ignoring the transaction id for XS_WATCH and XS_UNWATCH
commands as it is documented in docs/misc/xenstore.txt, it is tested
for validity today.

Really ignore the transaction id for XS_WATCH and XS_UNWATCH.

This is part of XSA-115.

Signed-off-by: Edwin Török <edvin.torok@citrix.com>
Acked-by: Christian Lindig <christian.lindig@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
tools/ocaml/xenstored/process.ml

index 74c69f869c81b2d3d4d6c546adedd9b39bd16341..0a0e43d1f0fa7079c439eb2f759a81e51a5b8cb9 100644 (file)
@@ -492,12 +492,19 @@ let retain_op_in_history ty =
        | Xenbus.Xb.Op.Reset_watches
        | Xenbus.Xb.Op.Invalid           -> false
 
+let maybe_ignore_transaction = function
+       | Xenbus.Xb.Op.Watch | Xenbus.Xb.Op.Unwatch -> fun tid ->
+               if tid <> Transaction.none then
+                       debug "Ignoring transaction ID %d for watch/unwatch" tid;
+               Transaction.none
+       | _ -> fun x -> x
+
 (**
  * Nothrow guarantee.
  *)
 let process_packet ~store ~cons ~doms ~con ~req =
        let ty = req.Packet.ty in
-       let tid = req.Packet.tid in
+       let tid = maybe_ignore_transaction ty req.Packet.tid in
        let rid = req.Packet.rid in
        try
                let fct = function_of_type ty in