diff --git a/lib/drmtest.c b/lib/drmtest.c
index 813c315..133a153 100644
--- a/lib/drmtest.c
+++ b/lib/drmtest.c
@@ -302,10 +302,10 @@ static void quiescent_gpu_at_exit_render(int sig)
 /**
  * drm_open_any:
  *
- * Open an i915 drm legacy device node.
+ * Open an i915 drm legacy device node. This function always returns a valid
+ * file descriptor.
  *
- * Returns:
- * The i915 drm file descriptor or -1 on error
+ * Returns: a i915 drm file descriptor
  */
 int drm_open_any(void)
 {
diff --git a/lib/igt.cocci b/lib/igt.cocci
index 0d337bf..fd4ad25 100644
--- a/lib/igt.cocci
+++ b/lib/igt.cocci
@@ -127,3 +127,17 @@ expression b;
 - ((a) >= (b) ? (a) : (b))
 + max(a, b)
 )
+
+// drm_open_any always returns a valid file descriptor
+@@
+expression a;
+@@
+a = drm_open_any();
+(
+- igt_assert(a >= 0);
+|
+- if (a < 0) {
+- ...
+- return ...;
+- }
+)
diff --git a/tests/gem_alive.c b/tests/gem_alive.c
index f87b1cb..d2bcf2a 100644
--- a/tests/gem_alive.c
+++ b/tests/gem_alive.c
@@ -15,8 +15,6 @@ int main(void)
 	signal(SIGALRM, SIG_IGN);
 
 	fd = drm_open_any();
-	if (fd < 0)
-		return IGT_EXIT_SKIP;
 
 	alarm(1);
 	if (ioctl(fd, DRM_IOCTL_I915_GEM_SW_FINISH, &arg) == 0)
diff --git a/tests/gem_flink_race.c b/tests/gem_flink_race.c
index c2a5d81..26f3258 100644
--- a/tests/gem_flink_race.c
+++ b/tests/gem_flink_race.c
@@ -103,7 +103,6 @@ static void test_flink_name(void)
 	threads = calloc(num_threads, sizeof(pthread_t));
 
 	fd = drm_open_any();
-	igt_assert(fd >= 0);
 
 	for (i = 0; i < num_threads; i++) {
 		r = pthread_create(&threads[i], NULL,
@@ -173,7 +172,6 @@ static void test_flink_close(void)
 	threads = calloc(num_threads, sizeof(pthread_t));
 
 	fd = drm_open_any();
-	igt_assert(fd >= 0);
 
 	for (i = 0; i < num_threads; i++) {
 		r = pthread_create(&threads[i], NULL,
diff --git a/tests/gem_reset_stats.c b/tests/gem_reset_stats.c
index ab8728a..646d6da 100644
--- a/tests/gem_reset_stats.c
+++ b/tests/gem_reset_stats.c
@@ -520,10 +520,8 @@ static void test_ban(void)
 	struct local_drm_i915_reset_stats rs_bad, rs_good;
 
 	fd_bad = drm_open_any();
-	igt_assert(fd_bad >= 0);
 
 	fd_good = drm_open_any();
-	igt_assert(fd_good >= 0);
 
 	assert_reset_status(fd_bad, 0, RS_NO_ERROR);
 	assert_reset_status(fd_good, 0, RS_NO_ERROR);
@@ -609,7 +607,6 @@ static void test_ban_ctx(void)
 	struct local_drm_i915_reset_stats rs_bad, rs_good;
 
 	fd = drm_open_any();
-	igt_assert(fd >= 0);
 
 	assert_reset_status(fd, 0, RS_NO_ERROR);
 
@@ -749,7 +746,6 @@ static void test_close_pending_ctx(void)
 	uint32_t ctx;
 
 	fd = drm_open_any();
-	igt_assert(fd >= 0);
 	ctx = context_create(fd);
 
 	assert_reset_status(fd, ctx, RS_NO_ERROR);
@@ -768,7 +764,6 @@ static void test_close_pending(void)
 	int fd, h;
 
 	fd = drm_open_any();
-	igt_assert(fd >= 0);
 
 	assert_reset_status(fd, 0, RS_NO_ERROR);
 
@@ -831,7 +826,6 @@ static void test_close_pending_fork(const bool reverse)
 	int fd, h;
 
 	fd = drm_open_any();
-	igt_assert(fd >= 0);
 
 	assert_reset_status(fd, 0, RS_NO_ERROR);
 
@@ -871,7 +865,6 @@ static void test_close_pending_fork(const bool reverse)
 
 	/* Then we just wait on hang to happen */
 	fd = drm_open_any();
-	igt_assert(fd >= 0);
 
 	h = exec_valid(fd, 0);
 	igt_assert(h >= 0);
@@ -887,7 +880,6 @@ static void test_reset_count(const bool create_ctx)
 	long c1, c2;
 
 	fd = drm_open_any();
-	igt_assert(fd >= 0);
 	if (create_ctx)
 		ctx = context_create(fd);
 	else
@@ -998,7 +990,6 @@ static void test_params_ctx(void)
 	int fd, ctx;
 
 	fd = drm_open_any();
-	igt_assert(fd >= 0);
 	ctx = context_create(fd);
 
 	_test_param(fd, ctx);
@@ -1011,7 +1002,6 @@ static void test_params(void)
 	int fd;
 
 	fd = drm_open_any();
-	igt_assert(fd >= 0);
 
 	_test_param(fd, 0);
 
@@ -1025,7 +1015,6 @@ static void defer_hangcheck(int ring_num)
 	int seconds = 30;
 	const struct target_ring *next_ring;
 	fd = drm_open_any();
-	igt_assert(fd >= 0);
 
 	do {
 		next_ring = &rings[(++ring_num) % NUM_RINGS];
diff --git a/tests/gem_seqno_wrap.c b/tests/gem_seqno_wrap.c
index 7da7fdf..42493ef 100644
--- a/tests/gem_seqno_wrap.c
+++ b/tests/gem_seqno_wrap.c
@@ -187,7 +187,6 @@ static void run_sync_test(int num_buffers, bool verify)
 	struct igt_buf *s_src, *s_dst;
 
 	fd = drm_open_any();
-	igt_assert(fd >= 0);
 
 	gem_quiescent_gpu(fd);
 
diff --git a/tests/prime_self_import.c b/tests/prime_self_import.c
index 9cb0780..1eb5a04 100644
--- a/tests/prime_self_import.c
+++ b/tests/prime_self_import.c
@@ -269,7 +269,6 @@ static void test_reimport_close_race(void)
 	threads = calloc(num_threads, sizeof(pthread_t));
 
 	fds[0] = drm_open_any();
-	igt_assert(fds[0] >= 0);
 
 	handle = gem_create(fds[0], BO_SIZE);
 
@@ -349,7 +348,6 @@ static void test_export_close_race(void)
 	threads = calloc(num_threads, sizeof(pthread_t));
 
 	fd = drm_open_any();
-	igt_assert(fd >= 0);
 
 	obj_count = get_object_count();
 
