2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-25 15:07:05 +00:00

ovsdb: Fix reference to table's row on condition_add|remove_clause

Use struct uuid * on [add|remove]_clause on columns which are references to
tables. That prevents use-after-free errors.

Signed-off-by: Liran Schour <lirans@il.ibm.com>
Signed-off-by: Ben Pfaff <blp@ovn.org>
This commit is contained in:
Liran Schour
2016-08-16 09:06:58 +03:00
committed by Ben Pfaff
parent f850c889d9
commit 4bb7f5680b
2 changed files with 30 additions and 23 deletions

View File

@@ -339,8 +339,11 @@ class BaseType(object):
return english
def toCType(self, prefix):
def toCType(self, prefix, refTable=True):
if self.ref_table_name:
if not refTable:
assert self.type == UuidType
return 'struct uuid *'
return "struct %s%s *" % (prefix, self.ref_table_name.lower())
else:
return {IntegerType: 'int64_t ',
@@ -352,18 +355,22 @@ class BaseType(object):
def toAtomicType(self):
return "OVSDB_TYPE_%s" % self.type.to_string().upper()
def copyCValue(self, dst, src):
def copyCValue(self, dst, src, refTable=True):
args = {'dst': dst, 'src': src}
if self.ref_table_name:
if not refTable:
return "%(dst)s = *%(src)s;" % args
return ("%(dst)s = %(src)s->header_.uuid;") % args
elif self.type == StringType:
return "%(dst)s = xstrdup(%(src)s);" % args
else:
return "%(dst)s = %(src)s;" % args
def assign_c_value_casting_away_const(self, dst, src):
def assign_c_value_casting_away_const(self, dst, src, refTable=True):
args = {'dst': dst, 'src': src}
if self.ref_table_name:
if not refTable:
return "%(dst)s = *%(src)s;" % args
return ("%(dst)s = %(src)s->header_.uuid;") % args
elif self.type == StringType:
return "%(dst)s = CONST_CAST(char *, %(src)s);" % args