All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2/2] proc: test /proc/self/syscall
@ 2018-02-26 21:21 Alexey Dobriyan
  2018-05-14 19:04 ` Naresh Kamboju
  0 siblings, 1 reply; 4+ messages in thread
From: Alexey Dobriyan @ 2018-02-26 21:21 UTC (permalink / raw)
  To: akpm; +Cc: linux-kernel

Read from /proc/self/syscall should yield read system call and correct
args in the output as current is reading /proc/self/syscall.

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
---

 tools/testing/selftests/proc/.gitignore          |    3 +
 tools/testing/selftests/proc/Makefile            |    1 
 tools/testing/selftests/proc/proc-self-syscall.c |   45 +++++++++++++++++++++++
 3 files changed, 48 insertions(+), 1 deletion(-)

--- a/tools/testing/selftests/proc/.gitignore
+++ b/tools/testing/selftests/proc/.gitignore
@@ -1 +1,2 @@
-/proc-self-wchan
+/proc-self-mem
+/proc-self-syscall
--- a/tools/testing/selftests/proc/Makefile
+++ b/tools/testing/selftests/proc/Makefile
@@ -1,6 +1,7 @@
 CFLAGS += -Wall -O2
 
 TEST_GEN_PROGS :=
+TEST_GEN_PROGS += proc-self-syscall
 TEST_GEN_PROGS += proc-self-wchan
 
 include ../lib.mk
new file mode 100644
--- /dev/null
+++ b/tools/testing/selftests/proc/proc-self-syscall.c
@@ -0,0 +1,45 @@
+#define _GNU_SOURCE
+#include <unistd.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+
+static inline ssize_t sys_read(int fd, void *buf, size_t len)
+{
+	return syscall(SYS_read, fd, buf, len);
+}
+
+int main(void)
+{
+	char buf1[64];
+	char buf2[64];
+	int fd;
+	ssize_t rv;
+
+	fd = open("/proc/self/syscall", O_RDONLY);
+	if (fd == -1) {
+		if (errno == ENOENT)
+			return 2;
+		return 1;
+	}
+
+	/* Do direct system call as libc can wrap anything. */
+	snprintf(buf1, sizeof(buf1), "%ld 0x%lx 0x%lx 0x%lx",
+		 (long)SYS_read, (long)fd, (long)buf2, (long)sizeof(buf2));
+
+	memset(buf2, 0, sizeof(buf2));
+	rv = sys_read(fd, buf2, sizeof(buf2));
+	if (rv < 0)
+		return 1;
+	if (rv < strlen(buf1))
+		return 1;
+	if (strncmp(buf1, buf2, strlen(buf1)) != 0)
+		return 1;
+
+	return 0;
+}

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] proc: test /proc/self/syscall
  2018-02-26 21:21 [PATCH 2/2] proc: test /proc/self/syscall Alexey Dobriyan
@ 2018-05-14 19:04 ` Naresh Kamboju
  2018-05-14 20:03   ` Alexey Dobriyan
  0 siblings, 1 reply; 4+ messages in thread
From: Naresh Kamboju @ 2018-05-14 19:04 UTC (permalink / raw)
  To: Alexey Dobriyan; +Cc: Andrew Morton, open list

Hi Alexey,

On 27 February 2018 at 02:51, Alexey Dobriyan <adobriyan@gmail.com> wrote:
> Read from /proc/self/syscall should yield read system call and correct
> args in the output as current is reading /proc/self/syscall.

Is this test expected to work on arm32 bit architecture ?
I have tested on arm32 devices and it returns 1 and reported as FAIL.

Strace output:
<snip>
munmap(0xb6f4a000, 13514)               = 0
open("/proc/self/syscall", O_RDONLY)    = 3
read(3, "3 0x3 0xbeacfbe0 0x40 0x3 0xbeac"..., 64) = 64
exit_group(0)                           = ?
+++ exited with 0 +++

Ref:
selftests: proc-self-syscall failed on arm32
https://bugs.linaro.org/show_bug.cgi?id=3783

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] proc: test /proc/self/syscall
  2018-05-14 19:04 ` Naresh Kamboju
@ 2018-05-14 20:03   ` Alexey Dobriyan
  2018-05-18  8:52     ` Naresh Kamboju
  0 siblings, 1 reply; 4+ messages in thread
From: Alexey Dobriyan @ 2018-05-14 20:03 UTC (permalink / raw)
  To: Naresh Kamboju; +Cc: Andrew Morton, open list

On Tue, May 15, 2018 at 12:34:18AM +0530, Naresh Kamboju wrote:
> Hi Alexey,
> 
> On 27 February 2018 at 02:51, Alexey Dobriyan <adobriyan@gmail.com> wrote:
> > Read from /proc/self/syscall should yield read system call and correct
> > args in the output as current is reading /proc/self/syscall.
> 
> Is this test expected to work on arm32 bit architecture ?
> I have tested on arm32 devices and it returns 1 and reported as FAIL.
> 
> Strace output:
> <snip>
> munmap(0xb6f4a000, 13514)               = 0
> open("/proc/self/syscall", O_RDONLY)    = 3
> read(3, "3 0x3 0xbeacfbe0 0x40 0x3 0xbeac"..., 64) = 64

Yes! Obviously, it was tested on x86_64 only.

arch/arm/tools/syscall.tbl shows read is #3
and pointer looks 32-bit, so what's wrong?

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 2/2] proc: test /proc/self/syscall
  2018-05-14 20:03   ` Alexey Dobriyan
@ 2018-05-18  8:52     ` Naresh Kamboju
  0 siblings, 0 replies; 4+ messages in thread
From: Naresh Kamboju @ 2018-05-18  8:52 UTC (permalink / raw)
  To: Alexey Dobriyan; +Cc: Andrew Morton, open list

On 15 May 2018 at 01:33, Alexey Dobriyan <adobriyan@gmail.com> wrote:
> On Tue, May 15, 2018 at 12:34:18AM +0530, Naresh Kamboju wrote:
>> Hi Alexey,
>>
>> On 27 February 2018 at 02:51, Alexey Dobriyan <adobriyan@gmail.com> wrote:
>> > Read from /proc/self/syscall should yield read system call and correct
>> > args in the output as current is reading /proc/self/syscall.
>>
>> Is this test expected to work on arm32 bit architecture ?
>> I have tested on arm32 devices and it returns 1 and reported as FAIL.
>>
>> Strace output:
>> <snip>
>> munmap(0xb6f4a000, 13514)               = 0
>> open("/proc/self/syscall", O_RDONLY)    = 3
>> read(3, "3 0x3 0xbeacfbe0 0x40 0x3 0xbeac"..., 64) = 64
>
> Yes! Obviously, it was tested on x86_64 only.
>
> arch/arm/tools/syscall.tbl shows read is #3
> and pointer looks 32-bit, so what's wrong?

Please ignore the strace output because test return 0 for strace process.

Here is the modified test case with more prints, which shows test case failed
due to third condition is true.
strncmp() return 3.
Is strncmp() implementation different on 32 and 64 bit architecture in glibc ?

Test case and output:
https://pastebin.com/grL2TUzs

- Naresh

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2018-05-18  8:54 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-02-26 21:21 [PATCH 2/2] proc: test /proc/self/syscall Alexey Dobriyan
2018-05-14 19:04 ` Naresh Kamboju
2018-05-14 20:03   ` Alexey Dobriyan
2018-05-18  8:52     ` Naresh Kamboju

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.