Thread (21 messages) 21 messages, 3 authors, 2021-07-22

Re: [PATCH v2 0/9] ARM: remove set_fs callers and implementation

From: Arnd Bergmann <arnd@arndb.de>
Date: 2020-09-25 14:08:53
Also in: linux-arch, linux-mm, lkml

On Sat, Sep 19, 2020 at 10:19 AM Russell King - ARM Linux admin
[off-list ref] wrote:
On Fri, Sep 18, 2020 at 02:46:15PM +0200, Arnd Bergmann wrote:
quoted
Hi Christoph, Russell,

Here is an updated series for removing set_fs() from arch/arm,
based on the previous feedback.

I have tested the oabi-compat changes using the LTP tests for the three
modified syscalls using an Armv7 kernel and a Debian 5 OABI user space,
and I have lightly tested the get_kernel_nofault infrastructure by
loading the test_lockup.ko module after setting CONFIG_DEBUG_SPINLOCK.
I'm not too keen on always saving the syscall number, but for the gain
of getting rid of set_fs() I think it's worth it. However...

I think there are some things to check - what value do you end up
with as the first number in /proc/self/syscall when you do:

strace cat /proc/self/syscall

?
It should be 3, not 0x900003. I suspect you're getting the latter
with these changes.  IIRC, task_thread_info(task)->syscall needs to
be the value _without_ the offset, otherwise tracing will break.
It seems broken in different ways, depending on the combination
of kernel and userland:

1. EABI armv5-versatile kernel, EABI Debian 5:
$ cat /proc/self/syscall
0 0x1500000000003 0x1500000000400 0x1500000000400 0x60000013c7800480
0xc0008668c0112f8c 0xc0112d14c68e1f68 0xbeab06f8 0xb6e80d4c
$ strace -f cat /proc/self/syscall
execve("/bin/cat", ["cat", "/proc/self/syscall"], [/* 16 vars */]) =
-1 EINTR (Interrupted system call)
dup(2)                                  = -1 EINTR (Interrupted system call)
write(2, "strace: exec: Interrupted system "..., 38) = -1 EINTR
(Interrupted system call)
exit_group(1)                           = ?

2. EABI kernel, OABI Debian 5:
$ cat /proc/self/syscall
3 0x1500000000003 0x13ccc00000400 0x1500000000400 0x60000013c7800480
0xc0008de0c0112f8c 0xc0112d14c7313f68 0xbeed27d0 0xb6eab324
$ strace cat /proc/self/syscall
execve("/bin/cat", ["cat", "/proc/self/syscall"], [/* 16 vars */]) = -1090648236
--- SIGILL (Illegal instruction) @ 0 (0) ---
+++ killed by SIGILL +++
3. OABI kernel, OABI Debian 5:
 cat /proc/self/syscall
9437187 0x1500000000003 0x13ccc00000400 0x1500000000400 0x100060000013
0x15000c72cff6c 0xc72cfe9000000000 0xbece27d0 0xb6f2f324
$ strace cat /proc/self/syscall
execve("/bin/cat", ["cat", "/proc/self/syscall"], [/* 16 vars */]) = -1095141548
--- SIGILL (Illegal instruction) @ 0 (0) ---
+++ killed by SIGILL +++
I suspect the OABI strace in Debian is broken since it crashes on
both kernels. I'll look into fixing the output without strace first then.

       Arnd

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help