summaryrefslogtreecommitdiff
path: root/qga/guest-agent-core.h
diff options
context:
space:
mode:
authorMichael Roth <mdroth@linux.vnet.ibm.com>2013-03-01 11:40:27 -0600
committerMichael Roth <mdroth@linux.vnet.ibm.com>2013-03-11 18:53:47 -0500
commit39097daf15c42243742667607d2cad2c9dc4f764 (patch)
tree168d41fb814c5d2f528e5382a8bb36eee1bd694c /qga/guest-agent-core.h
parentc5dcb6ae23a3ed7a01bae1cd75ce02abea31db5e (diff)
downloadqemu-39097daf15c42243742667607d2cad2c9dc4f764.tar.gz
qemu-ga: use key-value store to avoid recycling fd handles after restart
Hosts hold on to handles provided by guest-file-open for periods that can span beyond the life of the qemu-ga process that issued them. Since these are issued starting from 0 on every restart, we run the risk of issuing duplicate handles after restarts/reboots. As a result, users with a stale copy of these handles may end up reading/writing corrupted data due to their existing handles effectively being re-assigned to an unexpected file or offset. We unfortunately do not issue handles as strings, but as integers, so a solution such as using UUIDs can't be implemented without introducing a new interface. As a workaround, we fix this by implementing a persistent key-value store that will be used to track the value of the last handle that was issued across restarts/reboots to avoid issuing duplicates. The store is automatically written to the same directory we currently set via --statedir to track fsfreeze state, and so should be applicable for stable releases where this flag is supported. A follow-up can use this same store for handling fsfreeze state, but that change is cosmetic and left out for now. Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com> Cc: qemu-stable@nongnu.org * fixed guest_file_handle_add() return value from uint64_t to int64_t
Diffstat (limited to 'qga/guest-agent-core.h')
-rw-r--r--qga/guest-agent-core.h1
1 files changed, 1 insertions, 0 deletions
diff --git a/qga/guest-agent-core.h b/qga/guest-agent-core.h
index 3354598362..624a559d94 100644
--- a/qga/guest-agent-core.h
+++ b/qga/guest-agent-core.h
@@ -35,6 +35,7 @@ bool ga_is_frozen(GAState *s);
void ga_set_frozen(GAState *s);
void ga_unset_frozen(GAState *s);
const char *ga_fsfreeze_hook(GAState *s);
+int64_t ga_get_fd_handle(GAState *s, Error **errp);
#ifndef _WIN32
void reopen_fd_to_null(int fd);