diff --git a/src/core/proto/grpc/lb/v0/load_balancer.pb.c b/src/core/proto/grpc/lb/v0/load_balancer.pb.c
index abd4b1cefc67ca6a452fe16e6ec4f8643b894c59..59aae30cff97c35d1b98b7bb7613199b53c725f7 100644
--- a/src/core/proto/grpc/lb/v0/load_balancer.pb.c
+++ b/src/core/proto/grpc/lb/v0/load_balancer.pb.c
@@ -31,7 +31,7 @@
  *
  */
 /* Automatically generated nanopb constant definitions */
-/* Generated by nanopb-0.3.4-dev */
+/* Generated by nanopb-0.3.5-dev */
 
 #include "src/core/proto/grpc/lb/v0/load_balancer.pb.h"
 
diff --git a/src/core/proto/grpc/lb/v0/load_balancer.pb.h b/src/core/proto/grpc/lb/v0/load_balancer.pb.h
index 8703721399840ddd2b35cff939c657e7227cb790..3599f881bb17e328389f01ce9493cd42f4184490 100644
--- a/src/core/proto/grpc/lb/v0/load_balancer.pb.h
+++ b/src/core/proto/grpc/lb/v0/load_balancer.pb.h
@@ -31,7 +31,7 @@
  *
  */
 /* Automatically generated nanopb header */
-/* Generated by nanopb-0.3.4-dev */
+/* Generated by nanopb-0.3.5-dev */
 
 #ifndef PB_LOAD_BALANCER_PB_H_INCLUDED
 #define PB_LOAD_BALANCER_PB_H_INCLUDED
@@ -44,7 +44,6 @@
 extern "C" {
 #endif
 
-/* Enum definitions */
 /* Struct definitions */
 typedef struct _grpc_lb_v0_ClientStats {
     bool has_total_requests;
@@ -164,6 +163,7 @@ extern const pb_field_t grpc_lb_v0_Server_fields[5];
 #define grpc_lb_v0_LoadBalanceRequest_size       169
 #define grpc_lb_v0_InitialLoadBalanceRequest_size 131
 #define grpc_lb_v0_ClientStats_size              33
+#define grpc_lb_v0_LoadBalanceResponse_size      (165 + grpc_lb_v0_ServerList_size)
 #define grpc_lb_v0_InitialLoadBalanceResponse_size 156
 #define grpc_lb_v0_Server_size                   127
 
diff --git a/third_party/nanopb b/third_party/nanopb
index 5497a1dfc91a86965383cdd1652e348345400435..f8ac463766281625ad710900479130c7fcb4d63b 160000
--- a/third_party/nanopb
+++ b/third_party/nanopb
@@ -1 +1 @@
-Subproject commit 5497a1dfc91a86965383cdd1652e348345400435
+Subproject commit f8ac463766281625ad710900479130c7fcb4d63b
diff --git a/tools/distrib/check_nanopb_output.sh b/tools/distrib/check_nanopb_output.sh
index 9cb7581d87fc44e23d5fe2d77d4418ae1cf7e0b3..5f49ebb93e645981c3e15c2c624866eea2e7c1b9 100755
--- a/tools/distrib/check_nanopb_output.sh
+++ b/tools/distrib/check_nanopb_output.sh
@@ -32,7 +32,7 @@ set -ex
 
 apt-get install -y autoconf automake libtool curl python-virtualenv
 
-readonly NANOPB_TMP_OUTPUT="${LOCAL_GIT_ROOT}/gens/src/proto/grpc/lb/v0"
+readonly NANOPB_TMP_OUTPUT="$(mktemp -d)"
 
 # install protoc version 3
 pushd third_party/protobuf
@@ -62,8 +62,7 @@ PATH="$PROTOC_PATH:$PATH" ./tools/codegen/core/gen_load_balancing_proto.sh \
   $NANOPB_TMP_OUTPUT
 
 # compare outputs to checked compiled code
-diff -rq $NANOPB_TMP_OUTPUT src/core/proto/grpc/lb/v0
-if [ $? != 0 ]; then
+if ! diff -r $NANOPB_TMP_OUTPUT src/core/proto/grpc/lb/v0; then
   echo "Outputs differ: $NANOPB_TMP_OUTPUT vs src/core/proto/grpc/lb/v0"
-  exit 1
+  exit 2
 fi
diff --git a/tools/run_tests/sanity/check_submodules.sh b/tools/run_tests/sanity/check_submodules.sh
index c08b382638fbd4f4e14be9be6f67dfd262301b88..3c6dbb9ea1f1a18f51b33c8d889c901496d12153 100755
--- a/tools/run_tests/sanity/check_submodules.sh
+++ b/tools/run_tests/sanity/check_submodules.sh
@@ -44,7 +44,7 @@ cat << EOF | awk '{ print $1 }' | sort > $want_submodules
  9f897b25800d2f54f5c442ef01a60721aeca6d87 third_party/boringssl (version_for_cocoapods_1.0-67-g9f897b2)
  05b155ff59114735ec8cd089f669c4c3d8f59029 third_party/gflags (v2.1.0-45-g05b155f)
  c99458533a9b4c743ed51537e25989ea55944908 third_party/googletest (release-1.7.0)
- 5497a1dfc91a86965383cdd1652e348345400435 third_party/nanopb (nanopb-0.3.3-10-g5497a1d)
+ f8ac463766281625ad710900479130c7fcb4d63b third_party/nanopb (nanopb-0.3.4-29-gf8ac463)
  d5fb408ddc281ffcadeb08699e65bb694656d0bd third_party/protobuf (v3.0.0-beta-2)
  50893291621658f355bc5b4d450a8d06a563053d third_party/zlib (v1.2.8)
 EOF