Patchwork [5/5] qemu-ga: ga_get_fd_handle(): abort if fd_counter overflows

login
register
mail settings
Submitter Michael Roth
Date April 2, 2013, 2:13 p.m.
Message ID <1364911993-31042-6-git-send-email-mdroth@linux.vnet.ibm.com>
Download mbox | patch
Permalink /patch/233011/
State New
Headers show

Comments

Michael Roth - April 2, 2013, 2:13 p.m.
From: Luiz Capitulino <lcapitulino@redhat.com>

Today we reset fd_counter if it wraps, but it's better to abort()
instead, as fd_counter should never reach INT64_MAX.

Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>

*fixed typo: s/resonable/reasonable/

Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
---
 qga/main.c |    8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

Patch

diff --git a/qga/main.c b/qga/main.c
index 74ef788..1841759 100644
--- a/qga/main.c
+++ b/qga/main.c
@@ -889,9 +889,13 @@  int64_t ga_get_fd_handle(GAState *s, Error **errp)
     g_assert(!ga_is_frozen(s));
 
     handle = s->pstate.fd_counter++;
-    if (s->pstate.fd_counter < 0) {
-        s->pstate.fd_counter = 0;
+
+    /* This should never happen on a reasonable timeframe, as guest-file-open
+     * would have to be issued 2^63 times */
+    if (s->pstate.fd_counter == INT64_MAX) {
+        abort();
     }
+
     if (!write_persistent_state(&s->pstate, s->pstate_filepath)) {
         error_setg(errp, "failed to commit persistent state to disk");
     }