From 7a52c7d720398da7df242aeef7be652b54290e94 Mon Sep 17 00:00:00 2001 From: Tomi Valkeinen Date: Mon, 18 Nov 2019 12:07:11 +0200 Subject: 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 Reported-by: Matt Hoosier --- kms++/src/dmabufframebuffer.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'kms++/src/dmabufframebuffer.cpp') 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) -- cgit v1.2.3