• M
    qemu-ga: use key-value store to avoid recycling fd handles after restart · 39097daf
    Michael Roth 提交于
    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: NMichael Roth <mdroth@linux.vnet.ibm.com>
    Cc: qemu-stable@nongnu.org
    
    * fixed guest_file_handle_add() return value from uint64_t to int64_t
    39097daf
commands-posix.c 28.3 KB