summaryrefslogtreecommitdiff
path: root/simpleperf/cmd_inject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'simpleperf/cmd_inject.cpp')
-rw-r--r--simpleperf/cmd_inject.cpp14
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;
}