aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/grpc++/impl/codegen/thrift_serializer.h
diff options
context:
space:
mode:
authorGravatar Harvey Tuch <htuch@google.com>2017-01-20 11:02:11 -0500
committerGravatar Harvey Tuch <htuch@google.com>2017-02-07 15:45:44 -0500
commit5f3cfe960f708a397c4465a3064072dd3b2d7bb7 (patch)
tree363b85675839116c4314dbff8548170d94031acf /include/grpc++/impl/codegen/thrift_serializer.h
parent27ee9d015dff36ebf32e95c80a4d0b37ac7137ba (diff)
Fix read from uninitialized memory bug in GrpcBufferWriter.
This commit fixes an issue in which the following sequence of operations leads to use of uninitialized memory: 1. Caller invokes GrpcBufferWriter::Next(), and then makes use of 8191 bytes in the returned buffer (which is 8192 bytes in size). 2. Caller then returns the unused single byte via GrpcBufferWriter::BackUp(). This method invokes g_core_codegen_interface->grpc_slice_split_tail(), which causes backup_slice_ to be a grpc_slice with one byte. 3. At the next invocation of GrpcBufferWriter::Next(), a reference to the single byte grpc_slice is returned to the caller. The problem here is that the returned reference is to the inlined buffer in the grpc_slice, which is resident in slice_, not the location of the buffer inside slice_buffer_ after g_core_codegen_interface->grpc_slice_buffer_add() in GrpcBufferWriter::Next(). As a result, any data the caller writes to the returned void* data is lost. The solution is to avoid inlined backup slices.
Diffstat (limited to 'include/grpc++/impl/codegen/thrift_serializer.h')
0 files changed, 0 insertions, 0 deletions