diff --git a/gtests/net/packetdrill/run_system_call.c b/gtests/net/packetdrill/run_system_call.c index 5e298013eb32d1798b19f4cc02b08f546098aa9e..0462434378419ecf09f3e23350931b278b0662bc 100644 --- a/gtests/net/packetdrill/run_system_call.c +++ b/gtests/net/packetdrill/run_system_call.c @@ -3456,6 +3456,7 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, live_result = getsockopt(live_fd, level, optname, live_optval, &live_optlen); if (end_syscall(state, syscall, CHECK_EXACT, live_result, error)) { + free(live_optval); return STATUS_ERR; } @@ -3466,6 +3467,11 @@ static int syscall_getsockopt(struct state *state, struct syscall_spec *syscall, return STATUS_ERR; } + if (live_result != 0) { + free(live_optval); + return STATUS_OK; + } + switch (val_expression->type) { case EXPR_LINGER: result = check_linger(val_expression->value.linger, live_optval, error);