diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c
index 3b4a81066a162039231a7d1692805ffecb24a902..8a71505f52c667ee310421e372647fea75387169 100644
--- a/gtests/net/packetdrill/run_system_call.c
+++ b/gtests/net/packetdrill/run_system_call.c
@@ -3554,7 +3554,7 @@ static int check_sctp_rcvinfo(struct sctp_rcvinfo_expr *expr,
 		}
 		if (sctp_rcvinfo->rcv_ppid != rcv_ppid) {
 			asprintf(error, "sctp_rcvinfo.rcv_ppid: expected: %u actual: %u",
-				 rcv_ppid, sctp_rcvinfo->rcv_ppid);
+				 htonl(rcv_ppid), htonl(sctp_rcvinfo->rcv_ppid));
 			return STATUS_ERR;
 		}
 	}
@@ -3683,14 +3683,13 @@ static int syscall_sctp_recvv(struct state *state, struct syscall_spec *syscall,
 			      char **error)
 {
 #if defined(__FreeBSD__)
-	int flags, iovlen, script_fd, live_fd, result_val, result = STATUS_OK;
+	int flags, iovlen, script_fd, live_fd, result;
 	size_t script_iovec_list_len = 0;
 	unsigned int infotype = 0;
 	socklen_t infolen, fromlen;
 	void *info;
 	struct iovec *iov;
 	struct sockaddr *from = NULL;
-	begin_syscall(state, syscall);
 	struct expression *iovec_expr_list, *iovcnt_expr, *addr_expr, *fromlen_expr;
 	struct expression *infolen_expr, *info_expr, *infotype_expr, *flags_expr;
 	struct expression *infolen_list_expr, *infotype_list_expr, *flags_list_expr;
@@ -3745,11 +3744,11 @@ static int syscall_sctp_recvv(struct state *state, struct syscall_spec *syscall,
 
 	begin_syscall(state, syscall);
 
-	result_val = sctp_recvv(live_fd, iov, iovlen, (struct sockaddr *)from, &fromlen, info, &infolen, &infotype, &flags);
+	result = sctp_recvv(live_fd, iov, iovlen, (struct sockaddr *)from, &fromlen, info, &infolen, &infotype, &flags);
 
 	iovec_free(iov, script_iovec_list_len);
 	
-	if (end_syscall(state, syscall, CHECK_EXACT, result_val, error)) {
+	if (end_syscall(state, syscall, CHECK_EXACT, result, error)) {
 		free(from);
 		return STATUS_ERR;
 	}
@@ -3777,39 +3776,42 @@ static int syscall_sctp_recvv(struct state *state, struct syscall_spec *syscall,
 			return STATUS_ERR;
 		}
 	}
-	switch(infotype){
+	switch(infotype) {
 	case SCTP_RECVV_NOINFO:
-		if (infolen != 0){
+		if (infolen != 0) {
 			asprintf(error, "infolen returned bad size for null. expected 0, actual %u", infolen);
 			return STATUS_ERR;
 		}
 		break;
 	case SCTP_RECVV_RCVINFO:
-		if (infolen != sizeof(struct sctp_rcvinfo)){
+		if (infolen != sizeof(struct sctp_rcvinfo)) {
 			asprintf(error, "infolen returned bad size for sctp_rcvinfo. expected %u, actual %u",
 				 sizeof(struct sctp_rcvinfo), infolen);
 			return STATUS_ERR;
 		}
-		result = check_sctp_rcvinfo(info_expr->value.sctp_rcvinfo, info, error);
+		if (check_sctp_rcvinfo(info_expr->value.sctp_rcvinfo, info, error))
+			return STATUS_ERR;
 		break;
 	case SCTP_RECVV_NXTINFO:
-		if (infolen != sizeof(struct sctp_nxtinfo)){
+		if (infolen != sizeof(struct sctp_nxtinfo)) {
 			asprintf(error, "infolen returned bad size for sctp_nxtinfo. expected %u, actual %u",
 				 sizeof(struct sctp_nxtinfo), infolen);
 			return STATUS_ERR;
 		}
-		result = check_sctp_nxtinfo(info_expr->value.sctp_nxtinfo, info, error);
+		if (check_sctp_nxtinfo(info_expr->value.sctp_nxtinfo, info, error))
+			return STATUS_ERR;
 		break;
 	case SCTP_RECVV_RN:
-		if (infolen != sizeof(struct sctp_recvv_rn)){
+		if (infolen != sizeof(struct sctp_recvv_rn)) {
 			asprintf(error, "infolen returned bad size for sctp_recvv_rn. expected %u, actual %u",
 				 sizeof(struct sctp_recvv_rn), infolen);
 			return STATUS_ERR;
 		}
-		result = check_sctp_recvv_rn(info_expr->value.sctp_recvv_rn, info, error);
+		if (check_sctp_recvv_rn(info_expr->value.sctp_recvv_rn, info, error))
+			return STATUS_ERR;
 		break;
 	default:
-		result = STATUS_ERR;
+		return STATUS_ERR;
 		break;
 	}
 	flags_list_expr = get_arg(args, 8, error);
@@ -3824,7 +3826,7 @@ static int syscall_sctp_recvv(struct state *state, struct syscall_spec *syscall,
 			return STATUS_ERR;
 		}
 	}
-	return result;
+	return STATUS_OK;
 #else
 	asprintf(error, "sctp_recvv is not supported");
 	return STATUS_ERR;