Even if a vgem device is configured in, we will skip the import_vgem_fd() test almost every time.
TAP version 13 1..11 # Testing heap: system # ======================================= # Testing allocation and importing: ok 1 # SKIP Could not open vgem -1
The problem is that we use the DRM_IOCTL_VERSION ioctl to query the driver version information but leave the name field a non-null-terminated string. Terminate it properly to actually test against the vgem device.
Signed-off-by: Zenghui Yu yuzenghui@huawei.com --- tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c index 5f541522364f..2fcc74998fa9 100644 --- a/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c +++ b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c @@ -32,6 +32,8 @@ static int check_vgem(int fd) if (ret) return 0;
+ name[4] = '\0'; + return !strcmp(name, "vgem"); }
On Mon, Jul 8, 2024 at 6:47 AM Zenghui Yu yuzenghui@huawei.com wrote:
Even if a vgem device is configured in, we will skip the import_vgem_fd() test almost every time.
TAP version 13 1..11 # Testing heap: system # ======================================= # Testing allocation and importing: ok 1 # SKIP Could not open vgem -1
The problem is that we use the DRM_IOCTL_VERSION ioctl to query the driver version information but leave the name field a non-null-terminated string. Terminate it properly to actually test against the vgem device.
Hm yeah. Looks like drm_copy_field resets version.name to the actual size of the name in the case of truncation, so maybe worth checking that too in case there is a name like "vgemfoo" that gets converted to "vgem\0" by this?
Signed-off-by: Zenghui Yu yuzenghui@huawei.com
tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c index 5f541522364f..2fcc74998fa9 100644 --- a/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c +++ b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c @@ -32,6 +32,8 @@ static int check_vgem(int fd) if (ret) return 0;
name[4] = '\0';
return !strcmp(name, "vgem");
}
-- 2.33.0
On 2024/7/9 1:49, T.J. Mercier wrote:
On Mon, Jul 8, 2024 at 6:47 AM Zenghui Yu yuzenghui@huawei.com wrote:
Even if a vgem device is configured in, we will skip the import_vgem_fd() test almost every time.
TAP version 13 1..11 # Testing heap: system # ======================================= # Testing allocation and importing: ok 1 # SKIP Could not open vgem -1
The problem is that we use the DRM_IOCTL_VERSION ioctl to query the driver version information but leave the name field a non-null-terminated string. Terminate it properly to actually test against the vgem device.
Hm yeah. Looks like drm_copy_field resets version.name to the actual size of the name in the case of truncation, so maybe worth checking that too in case there is a name like "vgemfoo" that gets converted to "vgem\0" by this?
Given that drm_copy_field() would set version.name_len to the exact length of the driver name, this can be addressed by
diff --git a/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c index 2fcc74998fa9..5d0a809dc2df 100644 --- a/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c +++ b/tools/testing/selftests/dmabuf-heaps/dmabuf-heap.c @@ -29,7 +29,7 @@ static int check_vgem(int fd) version.name = name;
ret = ioctl(fd, DRM_IOCTL_VERSION, &version); - if (ret) + if (ret || version.name_len != 4) return 0;
name[4] = '\0';
on top of this patch. What do you think?
Thanks, Zenghui
linux-kselftest-mirror@lists.linaro.org