tools/oxenstored: Fix quota calculation for mkdir EEXIST
authorEdwin Török <edvin.torok@citrix.com>
Fri, 15 Jan 2021 19:11:32 +0000 (19:11 +0000)
committerIan Jackson <iwj@xenproject.org>
Fri, 19 Mar 2021 13:43:36 +0000 (13:43 +0000)
We increment the domain's quota on mkdir even when the node already exists.
This results in a quota inconsistency after live update, where reconstructing
the tree from scratch results in a different quota.

Not a security issue because the domain uses up quota faster, so it will only
get a Quota error sooner than it should.

Found by the structured fuzzer.

Signed-off-by: Edwin Török <edvin.torok@citrix.com>
Acked-by: Christian Lindig <christian.lindig@citrix.com>
Release-Acked-by: Ian Jackson <iwj@xenproject.org>
(cherry picked from commit c8b96708252a436da44005307f7c195d699bd7c5)

tools/ocaml/xenstored/store.ml

index e20767372f0245447d2b8c5fb25fd5bcc50f3920..328d3a51984ff0e816c64cc5772810fdb3347de5 100644 (file)
@@ -421,6 +421,7 @@ let mkdir store perm path =
        (* It's upt to the mkdir logic to decide what to do with existing path *)
        if not (existing || (Perms.Connection.is_dom0 perm)) then Quota.check store.quota owner 0;
        store.root <- path_mkdir store perm path;
+       if not existing then
        Quota.add_entry store.quota owner
 
 let rm store perm path =