From 7333836f830412775e0655478c389230c7424e24 Mon Sep 17 00:00:00 2001 From: Hans Verkuil Date: Mon, 17 Feb 2014 18:32:53 +0100 Subject: [PATCH] v4l2-compliance: test for invalid dmabuf file descriptors. Test what happens if PREPARE_BUF or QBUF is given invalid m.fd values. Signed-off-by: Hans Verkuil --- utils/v4l2-compliance/v4l2-test-buffers.cpp | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/utils/v4l2-compliance/v4l2-test-buffers.cpp b/utils/v4l2-compliance/v4l2-test-buffers.cpp index 6845a8a..6d61740 100644 --- a/utils/v4l2-compliance/v4l2-test-buffers.cpp +++ b/utils/v4l2-compliance/v4l2-test-buffers.cpp @@ -823,17 +823,24 @@ static int setupDmaBuf(struct node *expbuf_node, struct node *node, expbuf.flags = O_RDWR; fail_on_test(doioctl(expbuf_node, VIDIOC_EXPBUF, &expbuf)); - dmabufs[i][0] = buf.m.fd = expbuf.fd; + dmabufs[i][0] = expbuf.fd; ptrs[i][0] = mmap(NULL, buf.length, PROT_READ | PROT_WRITE, MAP_SHARED, expbuf.fd, 0); fail_on_test(ptrs[i][0] == MAP_FAILED); + buf.m.fd = 0xdeadbeef + expbuf.fd; ret = doioctl(node, VIDIOC_PREPARE_BUF, &buf); - fail_on_test(ret && ret != ENOTTY); - if (ret == 0) { + fail_on_test(!ret); + if (ret != ENOTTY) { + buf.m.fd = expbuf.fd; + ret = doioctl(node, VIDIOC_PREPARE_BUF, &buf); + fail_on_test(ret); fail_on_test(doioctl(node, VIDIOC_QUERYBUF, &buf)); fail_on_test(checkQueryBuf(node, buf, bufs.type, bufs.memory, i, Prepared)); + } else { + fail_on_test(!doioctl(node, VIDIOC_QBUF, &buf)); + buf.m.fd = expbuf.fd; } fail_on_test(doioctl(node, VIDIOC_QBUF, &buf)); -- 2.7.4