diff options
Diffstat (limited to 'simpleperf/cmd_inject.cpp')
-rw-r--r-- | simpleperf/cmd_inject.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/simpleperf/cmd_inject.cpp b/simpleperf/cmd_inject.cpp index f34cc33c..43cfc728 100644 --- a/simpleperf/cmd_inject.cpp +++ b/simpleperf/cmd_inject.cpp @@ -14,6 +14,7 @@ * limitations under the License. */ +#include <stdint.h> #include <stdio.h> #include <unistd.h> @@ -310,13 +311,14 @@ class PerfDataReader { } } else if (r->type() == PERF_RECORD_AUX) { AuxRecord* aux = static_cast<AuxRecord*>(r); - uint64_t aux_size = aux->data->aux_size; + if (aux->data->aux_size > SIZE_MAX) { + LOG(ERROR) << "invalid aux size"; + return false; + } + size_t aux_size = aux->data->aux_size; if (aux_size > 0) { - if (aux_data_buffer_.size() < aux_size) { - aux_data_buffer_.resize(aux_size); - } - if (!record_file_reader_->ReadAuxData(aux->Cpu(), aux->data->aux_offset, - aux_data_buffer_.data(), aux_size)) { + if (!record_file_reader_->ReadAuxData(aux->Cpu(), aux->data->aux_offset, aux_size, + &aux_data_buffer_)) { LOG(ERROR) << "failed to read aux data in " << filename_; return false; } |