executor/linux: dump mount information when failed to open kcov file

There are many "lost connection to test machine (5)" reports where the
testing terminated due to ENOENT upon open("/sys/kernel/debug/kcov").

Since some testcase might be unintendedly modifying mount information,
let's start from checking whether/how mount is broken.
This commit might be reverted after the cause is identified and fixed.
This commit is contained in:
Tetsuo Handa 2020-08-11 08:54:04 +09:00 committed by Dmitry Vyukov
parent 1bf9153625
commit bc15f7dbbc

View File

@ -94,8 +94,30 @@ static intptr_t execute_syscall(const call_t* c, intptr_t a[kMaxArgs])
static void cover_open(cover_t* cov, bool extra)
{
int fd = open("/sys/kernel/debug/kcov", O_RDWR);
if (fd == -1)
if (fd == -1) {
const int err = errno;
if (chdir("/sys/"))
fprintf(stderr, "/sys/ does not exist.\n");
else if (chdir("/sys/kernel/"))
fprintf(stderr, "/sys/kernel/ does not exist.\n");
else if (chdir("/sys/kernel/debug/"))
fprintf(stderr, "/sys/kernel/debug/ does not exist.\n");
fd = open("/proc/mounts", O_RDONLY);
if (fd == -1) {
fprintf(stderr, "open of /proc/mounts failed.\n");
if (chdir("/proc/"))
fprintf(stderr, "/proc/ does not exist.\n");
} else {
static char buffer[4096];
int len;
fprintf(stderr, "Content of /proc/mounts\n");
while ((len = read(fd, buffer, sizeof(buffer))) > 0)
fwrite(buffer, 1, len, stderr);
close(fd);
}
errno = err;
fail("open of /sys/kernel/debug/kcov failed");
}
if (dup2(fd, cov->fd) < 0)
fail("filed to dup2(%d, %d) cover fd", fd, cov->fd);
close(fd);