aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Robbie Shade <robbie.shade@gmail.com>2017-03-07 13:54:30 -0500
committerGravatar GitHub <noreply@github.com>2017-03-07 13:54:30 -0500
commit73c33541b5eaf6a44e0e14e1382ab19f25538873 (patch)
treeb5fe171252008037beb26391199a0f2237b5508b
parent1462063d9d7cb29e0c648017f3faab7259ded9b7 (diff)
parent9cf08b6bea66a801506f66193389822d3049c112 (diff)
Merge pull request #10015 from rjshade/use_after_free
Fix flaky use-after-free in udp_server
-rw-r--r--src/core/lib/iomgr/udp_server.c6
m---------third_party/gflags0
2 files changed, 5 insertions, 1 deletions
diff --git a/src/core/lib/iomgr/udp_server.c b/src/core/lib/iomgr/udp_server.c
index 2a1c8d39fa..d1bcd89af1 100644
--- a/src/core/lib/iomgr/udp_server.c
+++ b/src/core/lib/iomgr/udp_server.c
@@ -485,7 +485,11 @@ void grpc_udp_server_start(grpc_exec_ctx *exec_ctx, grpc_udp_server *s,
grpc_schedule_on_exec_ctx);
grpc_fd_notify_on_write(exec_ctx, sp->emfd, &sp->write_closure);
- s->active_ports++;
+ /* Registered for both read and write callbacks: increment active_ports
+ * twice to account for this, and delay free-ing of memory until both
+ * on_read and on_write have fired. */
+ s->active_ports += 2;
+
sp = sp->next;
}
diff --git a/third_party/gflags b/third_party/gflags
-Subproject 30dbc81fb5ffdc98ea9b14b1918bfe4e8779b26
+Subproject f8a0efe03aa69b3336d8e228b37d4ccb17324b8