]> www.infradead.org Git - users/willy/linux.git/commitdiff
mshare.c
authorMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 30 Sep 2020 16:48:24 +0000 (12:48 -0400)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Wed, 30 Sep 2020 16:48:24 +0000 (12:48 -0400)
mshare.c [new file with mode: 0644]

diff --git a/mshare.c b/mshare.c
new file mode 100644 (file)
index 0000000..59e36fe
--- /dev/null
+++ b/mshare.c
@@ -0,0 +1,43 @@
+// gcc -O2 -g -Wall -W mshare.c -o mshare
+#include <errno.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
+#define KB(x)  ((x) * 1024UL)
+#define MB(x)  KB(KB(x))
+#define GB(x)  MB(KB(x))
+#define TB(x)  GB(KB(x))
+
+int main(int argc, char **argv)
+{
+       int fd;
+       char *addr;
+       unsigned long args[2] = {};
+
+       addr = mmap((void *)TB(2), MB(4), PROT_READ | PROT_WRITE,
+                       MAP_SHARED | MAP_ANONYMOUS, -1, 0);
+       if (addr == MAP_FAILED)
+               perror("anon mem");
+       strcpy(addr, "Matthew");
+
+       fd = syscall(449, 1337, TB(2), 0);
+       printf("fd = %d\n", fd);
+       if (fd < 0)
+               perror(argv[0]);
+
+       fd = syscall(449, TB(2), TB(2), 0);
+       printf("fd = %d\n", fd);
+       if (fd < 0)
+               perror(argv[0]);
+
+       read(fd, &args, sizeof(args));
+       printf("addr %lx len %lx\n", args[0], args[1]);
+
+       addr = mmap((void *)TB(4), TB(2), PROT_READ | PROT_WRITE,
+                       MAP_SHARED, fd, 0);
+       if (addr == MAP_FAILED)
+               perror("sharefd");
+       printf("%s\n", addr);
+}