[Intel-gfx] [PATCH 5/9] external/drm: Validate function return value
Praveen Paneri
praveen.paneri at intel.com
Thu Mar 5 21:45:10 PST 2015
Return value of drmHashCreate() and drmGetEntry() functions
can be NULL. It should be validated before being used.
Signed-off-by: Praveen Paneri <praveen.paneri at intel.com>
---
xf86drm.c | 24 ++++++++++++++++++------
1 file changed, 18 insertions(+), 6 deletions(-)
diff --git a/xf86drm.c b/xf86drm.c
index 73e0665..60663d4 100644
--- a/xf86drm.c
+++ b/xf86drm.c
@@ -186,18 +186,23 @@ static unsigned long drmGetKeyFromFd(int fd)
drmHashEntry *drmGetEntry(int fd)
{
unsigned long key = drmGetKeyFromFd(fd);
- void *value;
+ void *value = NULL;
drmHashEntry *entry;
if (!drmHashTable)
drmHashTable = drmHashCreate();
- if (drmHashLookup(drmHashTable, key, &value)) {
+ if (drmHashTable && drmHashLookup(drmHashTable, key, &value)) {
entry = drmMalloc(sizeof(*entry));
entry->fd = fd;
entry->f = NULL;
entry->tagTable = drmHashCreate();
- drmHashInsert(drmHashTable, key, entry);
+ if (entry->tagTable) {
+ drmHashInsert(drmHashTable, key, entry);
+ } else {
+ drmFree(entry);
+ entry = NULL;
+ }
} else {
entry = value;
}
@@ -1099,6 +1104,8 @@ int drmClose(int fd)
{
unsigned long key = drmGetKeyFromFd(fd);
drmHashEntry *entry = drmGetEntry(fd);
+ if(!entry)
+ return -ENOMEM;
drmHashDestroy(entry->tagTable);
entry->fd = 0;
@@ -2088,7 +2095,7 @@ int drmAddContextTag(int fd, drm_context_t context, void *tag)
{
drmHashEntry *entry = drmGetEntry(fd);
- if (drmHashInsert(entry->tagTable, context, tag)) {
+ if (entry && drmHashInsert(entry->tagTable, context, tag)) {
drmHashDelete(entry->tagTable, context);
drmHashInsert(entry->tagTable, context, tag);
}
@@ -2099,13 +2106,18 @@ int drmDelContextTag(int fd, drm_context_t context)
{
drmHashEntry *entry = drmGetEntry(fd);
- return drmHashDelete(entry->tagTable, context);
+ if (entry)
+ return drmHashDelete(entry->tagTable, context);
+ return -ENOMEM;
}
void *drmGetContextTag(int fd, drm_context_t context)
{
- drmHashEntry *entry = drmGetEntry(fd);
void *value;
+ drmHashEntry *entry = drmGetEntry(fd);
+
+ if (!entry)
+ return NULL;
if (drmHashLookup(entry->tagTable, context, &value))
return NULL;
--
1.9.1
More information about the Intel-gfx
mailing list