From 6ae6fc7a797d1629fb8ceba4c5b8792f7c24c4a3 Mon Sep 17 00:00:00 2001 From: Craig Tiller <ctiller@google.com> Date: Wed, 1 Jun 2016 16:28:00 -0700 Subject: [PATCH] Fix server side memory leak If clients send GOAWAY followed by HEADER --- .../chttp2/transport/chttp2_transport.c | 6 +- .../23f261e44d54a2736f6e288128d98db9e5015206 | Bin 0 -> 100 bytes .../552199651d942e7220141a93ec33dd8256210a18 | Bin 0 -> 46 bytes .../7a946bf3cd91b63001f2cf3f40c515c747f2ecde | Bin 0 -> 696 bytes .../7d25c28298fb4d0fe41209d0d14307e4aa67c59e | Bin 0 -> 47 bytes .../8138b18a9a743659befc2f2b23d23cb9c3086a09 | Bin 0 -> 348 bytes .../925011abb99fd56bb0f425ae5e0d92e6d341f804 | Bin 0 -> 49 bytes ...h-c1f66840627e3bfdedf2e4c225bc4de0c267ed37 | Bin 0 -> 100 bytes .../d6bed9cc3c10338a8c5f41064ff8bec0bbc267ce | Bin 0 -> 48 bytes .../dda9643679f8c8b796e64232a7d153e447d64991 | Bin 0 -> 650 bytes .../e7b08e36420fa107f0aee652e62158af85a4ef15 | Bin 0 -> 1091 bytes tools/run_tests/tests.json | 170 ++++++++++++++++++ 12 files changed, 174 insertions(+), 2 deletions(-) create mode 100644 test/core/end2end/fuzzers/server_fuzzer_corpus/23f261e44d54a2736f6e288128d98db9e5015206 create mode 100644 test/core/end2end/fuzzers/server_fuzzer_corpus/552199651d942e7220141a93ec33dd8256210a18 create mode 100644 test/core/end2end/fuzzers/server_fuzzer_corpus/7a946bf3cd91b63001f2cf3f40c515c747f2ecde create mode 100644 test/core/end2end/fuzzers/server_fuzzer_corpus/7d25c28298fb4d0fe41209d0d14307e4aa67c59e create mode 100644 test/core/end2end/fuzzers/server_fuzzer_corpus/8138b18a9a743659befc2f2b23d23cb9c3086a09 create mode 100644 test/core/end2end/fuzzers/server_fuzzer_corpus/925011abb99fd56bb0f425ae5e0d92e6d341f804 create mode 100644 test/core/end2end/fuzzers/server_fuzzer_corpus/crash-c1f66840627e3bfdedf2e4c225bc4de0c267ed37 create mode 100644 test/core/end2end/fuzzers/server_fuzzer_corpus/d6bed9cc3c10338a8c5f41064ff8bec0bbc267ce create mode 100644 test/core/end2end/fuzzers/server_fuzzer_corpus/dda9643679f8c8b796e64232a7d153e447d64991 create mode 100644 test/core/end2end/fuzzers/server_fuzzer_corpus/e7b08e36420fa107f0aee652e62158af85a4ef15 diff --git a/src/core/ext/transport/chttp2/transport/chttp2_transport.c b/src/core/ext/transport/chttp2/transport/chttp2_transport.c index b6886a2201..d531d215e9 100644 --- a/src/core/ext/transport/chttp2/transport/chttp2_transport.c +++ b/src/core/ext/transport/chttp2/transport/chttp2_transport.c @@ -804,8 +804,10 @@ void grpc_chttp2_add_incoming_goaway( gpr_free(msg); gpr_slice_unref(goaway_text); transport_global->seen_goaway = 1; - connectivity_state_set(exec_ctx, transport_global, GRPC_CHANNEL_FATAL_FAILURE, - "got_goaway"); + /* lie: use transient failure from the transport to indicate goaway has been + * received */ + connectivity_state_set(exec_ctx, transport_global, + GRPC_CHANNEL_TRANSIENT_FAILURE, "got_goaway"); } static void maybe_start_some_streams( diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/23f261e44d54a2736f6e288128d98db9e5015206 b/test/core/end2end/fuzzers/server_fuzzer_corpus/23f261e44d54a2736f6e288128d98db9e5015206 new file mode 100644 index 0000000000000000000000000000000000000000..1452256ec7f7ec1680e657f27704cebbd1f0e69a GIT binary patch literal 100 zcmWFt@>I}L@CXSB&^OXE;N{}w3ibt&3=9k`3=km62x2h`@T3<NB<q%B=BDPCmT(#R d8srzJrYIyAGcZ6@Fr%q3Q7BGL&d*CJ1^{y06*B+; literal 0 HcmV?d00001 diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/552199651d942e7220141a93ec33dd8256210a18 b/test/core/end2end/fuzzers/server_fuzzer_corpus/552199651d942e7220141a93ec33dd8256210a18 new file mode 100644 index 0000000000000000000000000000000000000000..c8c54f443d7d31d3d2032246c16aa4ecee8999c7 GIT binary patch literal 46 ucmWFt@>I}L@CXSB&^OXE;N{}w3ibt&3=9k%EDRu^$-vGCVln==Y5)MRg$B$3 literal 0 HcmV?d00001 diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/7a946bf3cd91b63001f2cf3f40c515c747f2ecde b/test/core/end2end/fuzzers/server_fuzzer_corpus/7a946bf3cd91b63001f2cf3f40c515c747f2ecde new file mode 100644 index 0000000000000000000000000000000000000000..8ef1b0ad7e9b1b0296610b941a573b75fe88bdef GIT binary patch literal 696 zcmWFt@>I}L@CXSB&^OXE;N{}w3ibt&3=9k`3}C>-z{ujjz`!WLYE_U}lEI;$mY=Vm zlvpIdZdII|k(!&zl2KApAi!>wn_7~QpTZIl93sGFl~`JmkzbTqQpuT<pPZPJkzZUQ zz>}PxSCX1nqFYi~kSdT^P>_?EoLG{XpQoQ*RFEtn0wQ%2lao^mN_126lJiqC^U_6A zQqyu0OHy?*Q&RIvGD|9T(yKBH1ei)vIZBEWGjmdliUqhzi&Kkq6Vp@kN(g(0;R_=J z3j-qq%sWa+i7C3tIhm<>B?@2%B<maK85-#s=ou(z<YeZRR%kNV{{e>tBbcN=!3}m- zaY<rHX)&WArv2!iMyTKg>x6|R2P_N`3g9e^Sj9{T3@nT+3=E74_77PY(Bs@cI7EO2 e6v>e2h8s&9<3AK&Q7w-w2C_haCz&BXj{yMXKz`Ez literal 0 HcmV?d00001 diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/7d25c28298fb4d0fe41209d0d14307e4aa67c59e b/test/core/end2end/fuzzers/server_fuzzer_corpus/7d25c28298fb4d0fe41209d0d14307e4aa67c59e new file mode 100644 index 0000000000000000000000000000000000000000..a323f7a1abda4f8abefe0567cf1dc458074b05fb GIT binary patch literal 47 xcmWFt@>I}L@CXSB&^OXE;N{}w3ibt&3=9k%EDRu^$-vIY!fe98z`*#w0RXk92FU;b literal 0 HcmV?d00001 diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/8138b18a9a743659befc2f2b23d23cb9c3086a09 b/test/core/end2end/fuzzers/server_fuzzer_corpus/8138b18a9a743659befc2f2b23d23cb9c3086a09 new file mode 100644 index 0000000000000000000000000000000000000000..2bcef177a33a9a2a32faf6b1f48afd791eaedcda GIT binary patch literal 348 zcmWFt@>I}L@CXSB&^OXE;N{}w3ibt&3=9k`3=r^@5yWB?V6`epEXm-|Ps`8OPf9Ej zV7Dqx&PdHoWyvThDG*?{%1tfF$WLJj@DC0V;Ic|AEy>6)$}Fkm%*jtq%*n_vE)n2K z&d)1J%`4F@sVqnpNGvGG$xKcx$;{8wPcJG+77ziEx{1ljsRbpvsd>ryDVcfcqM0eF zc_o=8l{zV@X*r1{sXFOZnFRv8V6`wsGL`wIx+(d2CA!&p`Q^G9`Q^GL`MN3jx+NKz z#R5zvsT?ImiJ3X6Ma2SKrNya5x{2wjc_m6oi7C3tIhm<>B}l<wj3XEr7+DyY85kKD o6c`x6mM7~Q=ouR6fdhxZK+ixyBPUZKue3swfq_wzfq{V$0EqrxTL1t6 literal 0 HcmV?d00001 diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/925011abb99fd56bb0f425ae5e0d92e6d341f804 b/test/core/end2end/fuzzers/server_fuzzer_corpus/925011abb99fd56bb0f425ae5e0d92e6d341f804 new file mode 100644 index 0000000000000000000000000000000000000000..948d5fafa33dd00337d84bfac9cd398ff5b479d1 GIT binary patch literal 49 zcmWFt@>I}L@CXSB&^OXE;N{}w3ibt&3=9k%EDRu^$-vIY!faw-!oa}5_`d-F!zBkT literal 0 HcmV?d00001 diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/crash-c1f66840627e3bfdedf2e4c225bc4de0c267ed37 b/test/core/end2end/fuzzers/server_fuzzer_corpus/crash-c1f66840627e3bfdedf2e4c225bc4de0c267ed37 new file mode 100644 index 0000000000000000000000000000000000000000..a7fa57e78e8f55481508a7dac448104bf386bb47 GIT binary patch literal 100 zcmWFt@>I}L@CXSB&^OXE;N{}w3ibt&3=9k`3=km64q`D1@T3<NB<q%B=BDPCmT(#R f8srzJrYIyAGcZUpf>bc0sW4F}PEF3wODP5bbX*lV literal 0 HcmV?d00001 diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/d6bed9cc3c10338a8c5f41064ff8bec0bbc267ce b/test/core/end2end/fuzzers/server_fuzzer_corpus/d6bed9cc3c10338a8c5f41064ff8bec0bbc267ce new file mode 100644 index 0000000000000000000000000000000000000000..2b3424a332f810bbcc6519bc6a07ca4d729b8b0e GIT binary patch literal 48 ycmWFt@>I}L@CXSB&^OXE;N{}w3ibt&3=9k%EDRu^$-vIY!fax~z`(%xzX1TeTn7CB literal 0 HcmV?d00001 diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/dda9643679f8c8b796e64232a7d153e447d64991 b/test/core/end2end/fuzzers/server_fuzzer_corpus/dda9643679f8c8b796e64232a7d153e447d64991 new file mode 100644 index 0000000000000000000000000000000000000000..b8ba07b16bf2aed5df8bc97fc570043ea4589b13 GIT binary patch literal 650 zcmWFt@>I}L@CXSB&^OXE;N{}w3ibt&3=9k`3}C>-zzAY73b0xgB$i}w=%?l9>n9}^ z39wrgCugMQrm|#|loSZCTji#fWaOu?1o#Js2yj^?mX>7X7iE@Ia^~bGC+1|N7nca| zB<JUqq~?|AmQ)s`3M3X3<YXo%mSpDV>8BSJBnyauNZrKb<kW%^-PF9~{FKbRbkUU5 zw4B6}RGrL})Vva%lFX{i%Jc#Orjk^SlA^@SoYbOX241j6m=2cos>}l1{$cpS$iTwD z$N=+?Qc_}yZgNg$YF>!~*qmg213g0{Jp(-h1&y4{ywVCy2KzstpkM?MsMrdX%fP_! z9||xeC=lQVyQ{b)v81$^F&UphybNrq6$PouB@Cdj;{b<QW=$m)Eks2lOGbWi2_yp1 djSxT=K;c6J;XjHX3daG=%g_fW3x@nW1^@x4fr|hD literal 0 HcmV?d00001 diff --git a/test/core/end2end/fuzzers/server_fuzzer_corpus/e7b08e36420fa107f0aee652e62158af85a4ef15 b/test/core/end2end/fuzzers/server_fuzzer_corpus/e7b08e36420fa107f0aee652e62158af85a4ef15 new file mode 100644 index 0000000000000000000000000000000000000000..523c785612efbb325e6812d8beac59ad13bc6832 GIT binary patch literal 1091 zcmWFt@>I}L@CXSB&^OXE;N{}w3ibt&3=9k`3=nXL5zOLEFDgjZP0dTrPsz+n=g3S+ z%`3?)smx7f$tWo)5MZ~;O)bgDPhko04-OIFvPvv1$;dCtEUDzo$xlwq$;dA*5#UMA z&nrpIE7AQ@S&+(El3G!s&%ka~T#{H)TFh)>V33?zPy)9>6lQ}?N@`k8Vo9n_dR1nD z08>dSM@dm)W=?8Ru>e<TacYrnVtQ&`iBeKxif(dFW@=suVLvf3fc?ZMz-m>HSdzh^ zpO&AmpOjc6z;0EXoRNy;CnC&ZhL~j!Qc8RflvEa^3M3X3<YXo%mSpDV>4Sn-Km<hU zCMKhX1S|mHA%Zs~K<<D>sUeOi{Q_|^%=<`TrvP?9vc7?yp^=_}o`Hf!PG(+dg(idj zA8=}51e3HPNHU!p>{LkVA>Bc^qZ}y?SwP7al7I=>prwEm?%1*tmORD`&tn*-b0C>! y42eZ8w4BKXjzq9dNEXGKoWb(Q1SowY^BF*X6yQP2#>ou%c?_Vuj4MGP@;CrC_|tCy literal 0 HcmV?d00001 diff --git a/tools/run_tests/tests.json b/tools/run_tests/tests.json index 850f9474ae..c171d05354 100644 --- a/tools/run_tests/tests.json +++ b/tools/run_tests/tests.json @@ -70513,6 +70513,23 @@ ], "uses_polling": false }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/23f261e44d54a2736f6e288128d98db9e5015206" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, { "args": [ "test/core/end2end/fuzzers/server_fuzzer_corpus/2463aea879c5ab49f8409d0e5c062c7e086b034b" @@ -71941,6 +71958,23 @@ ], "uses_polling": false }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/552199651d942e7220141a93ec33dd8256210a18" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, { "args": [ "test/core/end2end/fuzzers/server_fuzzer_corpus/55af20415ead0ddd417f37fa91a4c767b749ee34" @@ -72706,6 +72740,23 @@ ], "uses_polling": false }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/7a946bf3cd91b63001f2cf3f40c515c747f2ecde" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, { "args": [ "test/core/end2end/fuzzers/server_fuzzer_corpus/7b453adcb9c4bf31dbc448ff32c2bc90ebcbdf0f" @@ -72723,6 +72774,23 @@ ], "uses_polling": false }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/7d25c28298fb4d0fe41209d0d14307e4aa67c59e" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, { "args": [ "test/core/end2end/fuzzers/server_fuzzer_corpus/7ddfac7d7845b424bf670070781ca6ff8586c63b" @@ -72774,6 +72842,23 @@ ], "uses_polling": false }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/8138b18a9a743659befc2f2b23d23cb9c3086a09" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, { "args": [ "test/core/end2end/fuzzers/server_fuzzer_corpus/8164d3c4af043c47cfd6966873bccd2353d072bf" @@ -73182,6 +73267,23 @@ ], "uses_polling": false }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/925011abb99fd56bb0f425ae5e0d92e6d341f804" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, { "args": [ "test/core/end2end/fuzzers/server_fuzzer_corpus/93beeba2.bin" @@ -74593,6 +74695,23 @@ ], "uses_polling": false }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-c1f66840627e3bfdedf2e4c225bc4de0c267ed37" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, { "args": [ "test/core/end2end/fuzzers/server_fuzzer_corpus/crash-dae0f07934a527989f23f06e630710ff6ca8c809" @@ -74695,6 +74814,23 @@ ], "uses_polling": false }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/d6bed9cc3c10338a8c5f41064ff8bec0bbc267ce" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, { "args": [ "test/core/end2end/fuzzers/server_fuzzer_corpus/d8a1d141a9e3876b71c7decbe6e3affccf6de397" @@ -74848,6 +74984,23 @@ ], "uses_polling": false }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/dda9643679f8c8b796e64232a7d153e447d64991" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, { "args": [ "test/core/end2end/fuzzers/server_fuzzer_corpus/df5d3cf5f05eab65ef9d385e263780ae73c42b19" @@ -74950,6 +75103,23 @@ ], "uses_polling": false }, + { + "args": [ + "test/core/end2end/fuzzers/server_fuzzer_corpus/e7b08e36420fa107f0aee652e62158af85a4ef15" + ], + "ci_platforms": [ + "linux" + ], + "cpu_cost": 0.1, + "exclude_configs": [], + "flaky": false, + "language": "c", + "name": "server_fuzzer_one_entry", + "platforms": [ + "linux" + ], + "uses_polling": false + }, { "args": [ "test/core/end2end/fuzzers/server_fuzzer_corpus/e96ad9c17795e52edc810a08d4fc61fe8790002a" -- GitLab