Skip to content

Commit 8d33120

Browse files
SyedAbuTalibmibrunin
authored andcommitted
[Backport] Security bug 379715150
Manual cherry-pick of patch originally reviewed on https://chromium-review.googlesource.com/c/chromium/src/+/6032156: [M126-LTS] Use temporary variable to prevent heap-use-after-free There is a UAF in stable as DecoderBuffer::side_data() returns a temporary object. Raw pointers into its owned members will be dangling (seen in next line) Also, this was fixed in https://chromium-review.googlesource.com/c/chromium/src/+/5893004 but that is in M132, not M131. Bug: 379715150 Change-Id: I52e95503c4c5daaed58514a1d007335c1a3cab74 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/6032156 Reviewed-by: Thomas Guilbert <[email protected]> Commit-Queue: Syed AbuTalib <[email protected]> Reviewed-by: Dale Curtis <[email protected]> Cr-Commit-Position: refs/heads/main@{#1385358} (cherry picked from commit b857e972de828077fe6a4595335d27530879191f) Reviewed-on: https://codereview.qt-project.org/c/qt/qtwebengine-chromium/+/615715 Reviewed-by: Anu Aliyas <[email protected]>
1 parent 954d60b commit 8d33120

File tree

1 file changed

+3
-5
lines changed

1 file changed

+3
-5
lines changed

chromium/media/gpu/v4l2/legacy/v4l2_stateful_workaround.cc

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -229,16 +229,14 @@ CreateV4L2StatefulWorkarounds(V4L2Device::Type device_type,
229229

230230
bool AppendVP9SuperFrameIndex(scoped_refptr<DecoderBuffer>& buffer) {
231231
DCHECK(buffer->has_side_data());
232-
DCHECK(!buffer->side_data()->spatial_layers.empty());
232+
std::vector<uint32_t> frame_sizes = buffer->side_data()->spatial_layers;
233+
DCHECK(!frame_sizes.empty());
233234

234-
const size_t num_of_layers = buffer->side_data()->spatial_layers.size();
235-
if (num_of_layers > 3u) {
235+
if (frame_sizes.size() > 3u) {
236236
LOG(ERROR) << "The maximum number of spatial layers in VP9 is three";
237237
return false;
238238
}
239239

240-
const uint32_t* cue_data = buffer->side_data()->spatial_layers.data();
241-
std::vector<uint32_t> frame_sizes(cue_data, cue_data + num_of_layers);
242240
std::vector<uint8_t> superframe_index = CreateSuperFrameIndex(frame_sizes);
243241
const size_t vp9_superframe_size =
244242
buffer->data_size() + superframe_index.size();

0 commit comments

Comments
 (0)