Skip to content

Commit

Permalink
qom: code hardening - have bound checking while looping with integer …
Browse files Browse the repository at this point in the history
…value

Object property insertion code iterates over an integer to get an unused
index that can be used as an unique name for an object property. This loop
increments the integer value indefinitely. Although very unlikely, this can
still cause an integer overflow.
In this change, we fix the above code by checking against INT16_MAX and making
sure that the interger index does not overflow beyond that value. If no
available index is found, the code would cause an assertion failure. This
assertion failure is necessary because the callers of the function do not check
the return value for NULL.

Signed-off-by: Ani Sinha <ani@anisinha.ca>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20200921093325.25617-1-ani@anisinha.ca>
Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
  • Loading branch information
ani-sinha authored and ehabkost committed Dec 10, 2020
1 parent 2ecfc06 commit 1bf8b88
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions qom/object.c
Original file line number Diff line number Diff line change
Expand Up @@ -1196,11 +1196,11 @@ object_property_try_add(Object *obj, const char *name, const char *type,

if (name_len >= 3 && !memcmp(name + name_len - 3, "[*]", 4)) {
int i;
ObjectProperty *ret;
ObjectProperty *ret = NULL;
char *name_no_array = g_strdup(name);

name_no_array[name_len - 3] = '\0';
for (i = 0; ; ++i) {
for (i = 0; i < INT16_MAX; ++i) {
char *full_name = g_strdup_printf("%s[%d]", name_no_array, i);

ret = object_property_try_add(obj, full_name, type, get, set,
Expand All @@ -1211,6 +1211,7 @@ object_property_try_add(Object *obj, const char *name, const char *type,
}
}
g_free(name_no_array);
assert(ret);
return ret;
}

Expand Down

0 comments on commit 1bf8b88

Please sign in to comment.