v4l2-compliance: test for invalid dmabuf file descriptors.
authorHans Verkuil <hans.verkuil@cisco.com>
Mon, 17 Feb 2014 17:32:53 +0000 (18:32 +0100)
committerHans Verkuil <hans.verkuil@cisco.com>
Mon, 17 Feb 2014 17:32:53 +0000 (18:32 +0100)
Test what happens if PREPARE_BUF or QBUF is given invalid m.fd values.

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
utils/v4l2-compliance/v4l2-test-buffers.cpp

index 6845a8a..6d61740 100644 (file)
@@ -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));