⬢ DragonFlyBSD Kernel Audit
DF-4459 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/drm/drm_gem.c
+++ b/sys/dev/drm/drm_gem.c
@@ -138,18 +138,21 @@
 
 	mm = kzalloc(sizeof(struct drm_gem_mm), GFP_KERNEL);
 	vma_offset_manager = kzalloc(sizeof(*vma_offset_manager), GFP_KERNEL);
-	if (!vma_offset_manager) {
+	if (!mm || !vma_offset_manager) {
+		kfree(vma_offset_manager);
+		kfree(mm);
 		DRM_ERROR("out of memory\n");
 		return -ENOMEM;
 	}
 
-	dev->mm_private = mm;
-
 	if (drm_ht_create(&mm->offset_hash, 12)) {
+		kfree(vma_offset_manager);
 		kfree(mm);
 		return -ENOMEM;
 	}
 
+	dev->mm_private = mm;
+
 	mm->idxunr = new_unrhdr(0, DRM_GEM_MAX_IDX, NULL);
 	drm_mm_init(&mm->offset_manager, DRM_FILE_PAGE_OFFSET_START,
 		    DRM_FILE_PAGE_OFFSET_SIZE);