diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c
index 5457c70580d851771f3834e2507778f75881e714..6330bdd83f743c253d7f9845614d3de4720799fd 100644
--- a/gtests/net/packetdrill/run_system_call.c
+++ b/gtests/net/packetdrill/run_system_call.c
@@ -514,6 +514,7 @@ static void begin_syscall(struct state *state, struct syscall_spec *syscall)
 enum result_check_t {
 	CHECK_EXACT,		/* check that result matches exactly */
 	CHECK_NON_NEGATIVE,	/* check that result is non-negative */
+	CHECK_ALLOW_MAPPING,	/* checks for results after accept-syscall */
 };
 static int end_syscall(struct state *state, struct syscall_spec *syscall,
 		       enum result_check_t mode, int actual, char **error)
@@ -557,6 +558,20 @@ static int end_syscall(struct state *state, struct syscall_spec *syscall,
 					 expected, actual);
 			return STATUS_ERR;
 		}
+	} else if (mode == CHECK_ALLOW_MAPPING) {
+		if ((expected >= 0)  && (actual < 0)) {
+			asprintf(error,
+				 "Expected non-negative result but got %d "
+				 "with errno %d (%s)",
+				 actual, actual_errno, strerror(actual_errno));
+			return STATUS_ERR;
+		}
+		else if ((expected < 0) && (actual != expected)) {
+			asprintf(error,
+				 "Expected result %d but got %d",
+				 expected, actual);
+			return STATUS_ERR;
+		}
 	} else {
 		assert(!"bad mode");
 	}
@@ -994,7 +1009,7 @@ static int syscall_accept(struct state *state, struct syscall_spec *syscall,
 
 	result = accept(live_fd, (struct sockaddr *)&live_addr, &live_addrlen);
 
-	if (end_syscall(state, syscall, CHECK_NON_NEGATIVE, result, error))
+	if (end_syscall(state, syscall, CHECK_ALLOW_MAPPING, result, error))
 		return STATUS_ERR;
 
 	if (result >= 0) {