DragonFlyBSD Kernel Audit
DF-1662 / fix.diff
← back to finding ↓ download raw
diff --git a/sys/dev/drm/i915/i915_gem_context.c b/sys/dev/drm/i915/i915_gem_context.c
--- a/sys/dev/drm/i915/i915_gem_context.c
+++ b/sys/dev/drm/i915/i915_gem_context.c
@@ -828,18 +828,19 @@
 	if (args->ctx_id == DEFAULT_CONTEXT_HANDLE)
 		return -ENOENT;
 
-	ctx = i915_gem_context_lookup(file_priv, args->ctx_id);
-	if (!ctx)
-		return -ENOENT;
-
 	ret = mutex_lock_interruptible(&dev->struct_mutex);
 	if (ret)
-		goto out;
+		return ret;
+
+	ctx = i915_gem_context_lookup(file_priv, args->ctx_id);
+	if (!ctx) {
+		mutex_unlock(&dev->struct_mutex);
+		return -ENOENT;
+	}
 
 	__destroy_hw_context(ctx, file_priv);
 	mutex_unlock(&dev->struct_mutex);
 
-out:
 	i915_gem_context_put(ctx);
 	return 0;
 }