diff --git a/contrib/tester-progs/Makefile b/contrib/tester-progs/Makefile index c906352314e..0103194e461 100644 --- a/contrib/tester-progs/Makefile +++ b/contrib/tester-progs/Makefile @@ -20,7 +20,8 @@ PROGS = sigkill-tester \ threads-exit \ killer-tester \ drop-privileges \ - getcpu + getcpu \ + direct-write-tester # For now killer-tester is compiled to 32-bit only on x86_64 as we want # to test 32-bit binaries and system calls compatibility layer. diff --git a/contrib/tester-progs/direct-write-tester.c b/contrib/tester-progs/direct-write-tester.c new file mode 100644 index 00000000000..5a2cf50d034 --- /dev/null +++ b/contrib/tester-progs/direct-write-tester.c @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +// Copyright Authors of Tetragon + +#include +#include +#include +#include +#include +#include +#include + +#define BLOCKSIZE 4096 +#define O_DIRECT 00040000 + +int main(int argc, char **argv) +{ + char *avd = "NEW_MESSAGE\n"; + void *buffer; + int fd; + + if (argc != 2) + exit(-1); + + fd = open(argv[1], O_WRONLY | O_DIRECT | O_CREAT, S_IRWXU | S_IRWXG); + if (fd == -1) { + perror("open"); + exit(-1); + } + + posix_memalign(&buffer, BLOCKSIZE, BLOCKSIZE); + memset(buffer, 0, BLOCKSIZE); + memcpy(buffer, avd, strlen(avd) + 1); + + ssize_t ret = pwrite(fd, buffer, BLOCKSIZE, 0); + if (ret == -1) { + perror("write"); + exit(-1); + } + + close(fd); + free(buffer); + return 0; +}