fixing heap use after free bug due to mismanaged ref counting in passthru endpoint (#28417)

* fixing heap use after free bug due to mismanaged ref counting in passthru endpoint

* fix sanity checks
pull/28450/head
Vignesh Babu 3 years ago committed by GitHub
parent f6d392b623
commit 0dda706907
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 400
      test/core/end2end/fuzzers/api_fuzzer_corpus/testcase-4825725484269568
  2. 4
      test/core/util/passthru_endpoint.cc

@ -0,0 +1,400 @@
actions {
create_server {
}
}
actions {
create_channel {
target: "dns:server"
channel_actions {
add_n_bytes_writable: 1320
add_n_bytes_readable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 20
wait_ms: 20
}
channel_actions {
add_n_bytes_writable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_readable: 20
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 20
add_n_bytes_readable: 20
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 20
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 532
add_n_bytes_readable: 20
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 1000
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 532
add_n_bytes_readable: 20
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 16400
add_n_bytes_readable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 20
add_n_bytes_readable: 20
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 10
}
channel_actions {
add_n_bytes_writable: 20
add_n_bytes_readable: 20
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_readable: 20
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 20
add_n_bytes_readable: 2338333577814474752
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 20
add_n_bytes_readable: 20
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 20
add_n_bytes_readable: 20
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 10
}
channel_actions {
add_n_bytes_writable: 20
add_n_bytes_readable: 20
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 20
add_n_bytes_readable: 34359738388
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 20
add_n_bytes_readable: 20
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 20
add_n_bytes_readable: 20
wait_ms: 20
}
channel_actions {
add_n_bytes_writable: 10
add_n_bytes_readable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 20
add_n_bytes_readable: 1000
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 20
add_n_bytes_readable: 10
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 20
add_n_bytes_readable: 20
wait_ms: 1000
}
channel_actions {
add_n_bytes_writable: 10
wait_ms: 1000
}
}
}
actions {
create_call {
propagation_mask: 536870912
method {
value: "/voo"
}
timeout: 1000000000
}
}
actions {
queue_batch {
operations {
send_initial_metadata {
}
}
operations {
receive_initial_metadata {
}
}
}
}
actions {
request_call {
}
}
actions {
advance_time: 1000000
}
actions {
advance_time: 1000000
}
actions {
advance_time: 16960
}
actions {
advance_time: 1000000
}
actions {
advance_time: 1000000
}
actions {
advance_time: 1000000
}
actions {
advance_time: 1000000
}
actions {
advance_time: 1000000
}
actions {
advance_time: 1000000
}
actions {
advance_time: 1000000
}
actions {
advance_time: 1000000
}
actions {
advance_time: 1000000
}
actions {
advance_time: 1000000
}
actions {
advance_time: 1000000
}
actions {
poll_cq {
}
}
actions {
change_active_call {
}
}
actions {
queue_batch {
operations {
send_initial_metadata {
}
}
}
}
actions {
change_active_call {
}
}
actions {
queue_batch {
operations {
send_message {
message {
value: "hello wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwworld"
}
}
}
}
}
actions {
advance_time: 1000000
}
actions {
poll_cq {
}
}
actions {
advance_time: 1000000
}
actions {
poll_cq {
}
}
actions {
advance_time: 1000000
}
actions {
poll_cq {
}
}
actions {
advance_time: 1000000
}
actions {
poll_cq {
}
}
actions {
queue_batch {
operations {
receive_message {
}
}
operations {
send_message {
message {
value: "hello wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb00\\000\\000\\000\\000\\000\"\n }\n channel_args {\n str: \"\"\n }\n channel_args {\n str: \"\"\n }\n channel_args {\n }\n channel_args {\n str:\337\"\"\n }\n channel_args {\n str: \"\"\n }\n channel_args {\n }\n channel_args {\n str: \"\"\n }\n channel_args {\n key: \"\\022\"\n str: \"\"\n }\n channel_args {\n resource_quota {\n }\n }\n channel_args {\n str: \"\"\n }\n channel_args {\n str: \"\"\n }\n channel_args {\n }\n channel_args {\n key: \"xds_clustes {\\n create_server {\\n r_resolver_e\"\n str: \"http\"\n }\n channel_args {\n str: \"\"\n }\n channel_args {\n }\n channel_args {\n }\n channel_args {\n }\n channel_args {\n str: \"\"\n }\n channel_args {\n str: \"\"\n }\n channel_args {\n str: \"\"\n }\n }\n}\nactions {\n create_channel {\n channel_args {\n key: \"http\"\n str: \"\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031\\031wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwworld"
}
}
}
}
}
actions {
change_active_call {
}
}
actions {
advance_time: 1000000
}
actions {
poll_cq {
}
}
actions {
advance_time: 1000000
}
actions {
poll_cq {
}
}
actions {
change_active_call {
}
}
actions {
queue_batch {
operations {
send_close_from_client {
}
}
operations {
receive_status_on_client {
}
}
}
}
actions {
change_active_call {
}
}
actions {
queue_batch {
operations {
send_message {
message {
value: "hello"
}
}
}
}
}
actions {
queue_batch {
operations {
send_status_from_server {
}
}
}
}
actions {
advance_time: 1000000
}
actions {
poll_cq {
}
}
actions {
queue_batch {
operations {
receive_message {
}
}
}
}

@ -99,8 +99,8 @@ static void do_pending_read_op_locked(half* m, grpc_error_handle error) {
m->read_buffer.length,
m->parent->channel_effects->allowed_read_bytes - m->bytes_read_so_far);
GPR_ASSERT(readable_length > 0);
grpc_slice_buffer_move_first_no_ref(&m->read_buffer, readable_length,
m->pending_read_op.slices);
grpc_slice_buffer_move_first(&m->read_buffer, readable_length,
m->pending_read_op.slices);
grpc_core::ExecCtx::Run(DEBUG_LOCATION, m->pending_read_op.cb, error);
if (m->parent->simulate_channel_actions) {
m->bytes_read_so_far += readable_length;

Loading…
Cancel
Save