summaryrefslogtreecommitdiff
path: root/tests/tools_test.c
diff options
context:
space:
mode:
authorArkadiusz Hiler <arkadiusz.hiler@intel.com>2019-11-18 13:56:08 +0200
committerArkadiusz Hiler <arkadiusz.hiler@intel.com>2019-11-19 12:53:22 +0200
commita70013186d3060cfd15d9640fd9a4c360d477c08 (patch)
treef102f4061e8583bd04ca8b323196083d364250f2 /tests/tools_test.c
parent4bb46f08f7cb6485642c4351cecdad93072d27a0 (diff)
tests/tools_test: Use readlink() properly
Turns out that `readlink()` does not NULL-terminate the string and since it resides on the stack we may end up with some junk: `/proc/self/exe point to /opt/igt/libexec/igt-gpu-tools/tools_test7<CD>\t<8A>^?` That in turn confuses `dirname()` and we end up doing `chdir("/")`, which explain the sporadic failures of this test where it was not able to locate the tools. Let's zero out the variable first and allow `readlink()` to write at most `sizeof()-1` bytes to it, so it is always properly terminated. Cc: Petri Latvala <petri.latvala@intel.com> Cc: Tomi Sarvela <tomi.p.sarvela@intel.com> Issue: https://gitlab.freedesktop.org/drm/igt-gpu-tools/issues/12 Signed-off-by: Arkadiusz Hiler <arkadiusz.hiler@intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'tests/tools_test.c')
-rw-r--r--tests/tools_test.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/tests/tools_test.c b/tests/tools_test.c
index e3f73ac2..08b5626f 100644
--- a/tests/tools_test.c
+++ b/tests/tools_test.c
@@ -77,7 +77,8 @@ static bool chdir_to_tools_dir(void)
igt_info("Failed to cd to %s\n", TOOLS);
/* Try TOOLS and install dir relative to test binary */
- if (readlink("/proc/self/exe", path, sizeof(path)) > 0) {
+ memset(path, 0, sizeof(path)); /* readlink() does not append NUL */
+ if (readlink("/proc/self/exe", path, sizeof(path)-1) > 0) {
igt_info("/proc/self/exe point to %s, going to dirname()\n", path);
chdir(dirname(path));
}