diff options
author | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2019-11-18 12:07:11 +0200 |
---|---|---|
committer | Tomi Valkeinen <tomi.valkeinen@ti.com> | 2019-11-18 12:12:39 +0200 |
commit | 7a52c7d720398da7df242aeef7be652b54290e94 (patch) | |
tree | 4d3b3b6de8358ec3b19a4c7959ecbf9cea67b755 /kms++/src/dmabufframebuffer.cpp | |
parent | d6dc724f16672cbb3eed382815514f4c9a0246d4 (diff) |
fbs: check params and ensure drmModeAddFB2 is passed correctly sized arrays
Check that parameter vectors are of the same size, and match the number
of planes.
Extend the vectors to 4, as drmModeAddFB2() expects to get arrays of 4
elements.
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Reported-by: Matt Hoosier <matt.hoosier@garmin.com>
Diffstat (limited to 'kms++/src/dmabufframebuffer.cpp')
-rw-r--r-- | kms++/src/dmabufframebuffer.cpp | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/kms++/src/dmabufframebuffer.cpp b/kms++/src/dmabufframebuffer.cpp index 00ab94e..feac116 100644 --- a/kms++/src/dmabufframebuffer.cpp +++ b/kms++/src/dmabufframebuffer.cpp @@ -28,6 +28,9 @@ DmabufFramebuffer::DmabufFramebuffer(Card& card, uint32_t width, uint32_t height m_num_planes = format_info.num_planes; + if (fds.size() != m_num_planes || pitches.size() != m_num_planes || offsets.size() != m_num_planes) + throw std::invalid_argument("the size of fds, pitches and offsets has to match number of planes"); + for (int i = 0; i < format_info.num_planes; ++i) { FramebufferPlane& plane = m_planes[i]; @@ -45,6 +48,8 @@ DmabufFramebuffer::DmabufFramebuffer(Card& card, uint32_t width, uint32_t height uint32_t id; uint32_t bo_handles[4] = { m_planes[0].handle, m_planes[1].handle, m_planes[2].handle, m_planes[3].handle }; + pitches.resize(4); + offsets.resize(4); r = drmModeAddFB2(card.fd(), width, height, (uint32_t)format, bo_handles, pitches.data(), offsets.data(), &id, 0); if (r) |