summary refs log tree commit diff stats
path: root/results/scraper/launchpad-without-comments/1794086
diff options
context:
space:
mode:
Diffstat (limited to 'results/scraper/launchpad-without-comments/1794086')
-rw-r--r--results/scraper/launchpad-without-comments/179408647
1 files changed, 47 insertions, 0 deletions
diff --git a/results/scraper/launchpad-without-comments/1794086 b/results/scraper/launchpad-without-comments/1794086
new file mode 100644
index 000000000..966a72147
--- /dev/null
+++ b/results/scraper/launchpad-without-comments/1794086
@@ -0,0 +1,47 @@
+readlink(2) returns incorrect size for /proc/self/exe
+
+readlink(2) seems to ignore the size of supplied buffer for the resolved name and always returns the actual size of the resolved name instead.
+
+Steps to reproduce:
+
+```bash
+echo '#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int main(int argc, const char** argv)
+{
+    if(argc < 2) exit(1);
+    char buf[1];
+    printf("%d\n", readlink(argv[1], buf, sizeof(buf)));
+}' >test.c
+
+# I used GCC mipsel cross-compiler to reproduce this bug
+mipsel-linux-gnu-gcc-5.5 test.c -o a.out
+
+echo "PWD: `pwd`"
+qemu-mipsel ./a.out /proc/self/exe
+```
+
+Expected output (observed when running a.out natively on Linux 4.17 amd64):
+```
+PWD: /tmp/test
+1
+```
+
+Output observed when running with qemu-mipsel 2.1.2:
+```
+PWD: /tmp/test
+15
+```
+
+According to POSIX description of readlink [1], the function shall return the number of bytes written to the supplied buffer, which obviously cannot exceed size of the buffer.
+
+Note that the bug is only reproduced with links within /proc filesystem; links to the regular files within /home are resolved normally.
+
+The bug is present in qemu-mipsel 2.1.2:
+
+# qemu-mipsel -version
+qemu-mipsel version 2.1.2 (Debian 1:2.1+dfsg-12+deb8u6), Copyright (c) 2003-2008 Fabrice Bellard
+
+[1]: http://pubs.opengroup.org/onlinepubs/009695399/functions/readlink.html
\ No newline at end of file