diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c index 3f95500a626e4c494ddacc6f22e5d25bc6995bcd..6f2647b17acef86dde924b0d6d7b266d4559912e 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -4670,16 +4670,24 @@ static int syscall_open(struct state *state, struct syscall_spec *syscall, result = open(name, flags); - if (end_syscall(state, syscall, CHECK_FD, result, error)) + if (end_syscall(state, syscall, CHECK_FD, result, error)) { + if (result >= 0) { + close(result); + } return STATUS_ERR; + } if (result >= 0) { live_fd = result; - if (get_s32(syscall->result, &script_fd, error)) + if (get_s32(syscall->result, &script_fd, error)) { + close(live_fd); return STATUS_ERR; + } if (!insert_new_socket(state, 0, 0, - script_fd, live_fd, error)) + script_fd, live_fd, error)) { + close(live_fd); return STATUS_ERR; + } } return STATUS_OK;