summaryrefslogtreecommitdiff
path: root/tests/i915
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2019-03-19 17:00:53 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2019-03-19 17:17:16 +0000
commit964e39159c640c215ab2c11478dc99cb2bf34570 (patch)
tree1669e42eac06f1bad8346ad4a1cb518b2058cc20 /tests/i915
parent212f34d27085085446ed7adfcc7fe9172f89df89 (diff)
tests/i915/gem_mmap: Add invalid parameters tests
Add a couple of tests that supply invalid parameters to the mmap IOCTL. v2: - Expand test space. (Chris) Signed-off-by: Antonio Argenziano <antonio.argenziano@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tests/i915')
-rw-r--r--tests/i915/gem_mmap.c108
1 files changed, 92 insertions, 16 deletions
diff --git a/tests/i915/gem_mmap.c b/tests/i915/gem_mmap.c
index 0ed15878..6aaa3e8c 100644
--- a/tests/i915/gem_mmap.c
+++ b/tests/i915/gem_mmap.c
@@ -116,32 +116,105 @@ test_huge_bo(int huge)
free(cpu_pattern);
}
+static int mmap_ioctl(int i915, struct drm_i915_gem_mmap *arg)
+{
+ int err = 0;
+
+ if (igt_ioctl(i915, DRM_IOCTL_I915_GEM_MMAP, arg))
+ err = -errno;
+
+ errno = 0;
+ return err;
+}
+
igt_main
{
- struct drm_i915_gem_mmap arg;
uint8_t expected[OBJECT_SIZE];
uint8_t buf[OBJECT_SIZE];
uint8_t *addr;
- int ret;
igt_fixture
fd = drm_open_driver(DRIVER_INTEL);
igt_subtest("bad-object") {
- memset(&arg, 0, sizeof(arg));
- arg.handle = 0x10101010;
- arg.offset = 0;
- arg.size = 4096;
- ret = ioctl(fd, DRM_IOCTL_I915_GEM_MMAP, &arg);
- igt_assert(ret == -1 && errno == ENOENT);
+ uint32_t real_handle = gem_create(fd, 4096);
+ uint32_t handles[20];
+ int i = 0;
+
+ handles[i++] = 0xdeadbeef;
+ for(int bit = 0; bit < 16; bit++)
+ handles[i++] = real_handle | (1 << (bit + 16));
+ handles[i] = real_handle + 1;
+
+ for (; i < 0; i--) {
+ struct drm_i915_gem_mmap arg = {
+ .handle = handles[i],
+ .size = 4096,
+ };
+
+ igt_debug("Trying MMAP IOCTL with handle %x\n", handles[i]);
+ igt_assert_eq(mmap_ioctl(fd, &arg), -EINVAL);
+ }
+
+ gem_close(fd, real_handle);
+ }
+
+ igt_subtest("bad-offset") {
+ struct bad_offset {
+ uint64_t size;
+ uint64_t offset;
+ } bad_offsets[] = {
+ {4096, 4096 + 1},
+ {4096, -4096},
+ { 2 * 4096, -4096},
+ { 4096, ~0},
+ {}
+ };
+
+ for (int i = 0; i < ARRAY_SIZE(bad_offsets); i++) {
+ struct drm_i915_gem_mmap arg = {
+ .handle = gem_create(fd, 4096),
+ .offset = bad_offsets[i].offset,
+ .size = bad_offsets[i].size,
+ };
+
+ igt_debug("Trying to mmap bad offset; size: %'"PRIu64", offset: %'"PRIu64"\n",
+ bad_offsets[i].size, bad_offsets[i].offset);
+
+ igt_assert_eq(mmap_ioctl(fd, &arg), -EINVAL);
+ gem_close(fd, arg.handle);
+ }
+ }
+
+ igt_subtest("bad-size") {
+ uint64_t bad_size[] = {
+ 0,
+ -4096,
+ 4096 + 1,
+ 2 * 4096,
+ ~0,
+ };
+
+ for (int i = 0; i < ARRAY_SIZE(bad_size); i++) {
+ struct drm_i915_gem_mmap arg = {
+ .handle = gem_create(fd, 4096),
+ .offset = 4096,
+ .size = bad_size[i],
+ };
+
+ igt_debug("Trying to mmap bad size; size: %'"PRIu64"\n", bad_size[i]);
+ igt_assert_eq(mmap_ioctl(fd, &arg), -EINVAL);
+
+ gem_close(fd, arg.handle);
+ }
}
igt_subtest("basic") {
- arg.handle = gem_create(fd, OBJECT_SIZE);
- arg.offset = 0;
- arg.size = OBJECT_SIZE;
- ret = ioctl(fd, DRM_IOCTL_I915_GEM_MMAP, &arg);
- igt_assert(ret == 0);
+ struct drm_i915_gem_mmap arg = {
+ .handle = gem_create(fd, OBJECT_SIZE),
+ .size = OBJECT_SIZE,
+ };
+ igt_assert_eq(mmap_ioctl(fd, &arg), 0);
addr = from_user_pointer(arg.addr_ptr);
igt_info("Testing contents of newly created object.\n");
@@ -164,12 +237,15 @@ igt_main
}
igt_subtest("short-mmap") {
+ uint32_t handle = gem_create(fd, OBJECT_SIZE);
+
igt_assert(OBJECT_SIZE > 4096);
- arg.handle = gem_create(fd, OBJECT_SIZE);
- addr = gem_mmap__cpu(fd, arg.handle, 0, 4096, PROT_WRITE);
+
+ addr = gem_mmap__cpu(fd, handle, 0, 4096, PROT_WRITE);
memset(addr, 0, 4096);
munmap(addr, 4096);
- gem_close(fd, arg.handle);
+
+ gem_close(fd, handle);
}
igt_subtest("basic-small-bo")