[REGRESSION 3.16.61] x86/vdso: Fix asm constraints on vDSO syscall fallbacks

From: tedheadster
Date: Fri Jan 18 2019 - 21:08:39 EST


I bisected a bug than manifests itself on 32-bit i386 architectures to
commit 4f9007359bcd28bc83c63cb9af38d8b2c8c1670d for long term kernel
3.16.61. It appears as one of two cases, varying by cpu architecture.

All of them fail with an error message variation of "systemd[1]:
Assertion 'clock_gettime(map_clock_id(clock_id), &ts) == 0' ". The
difference is whether it freezes systemd or causes a kernel panic.

I do not see this problem with the upstream kernel, so 3.16 probably
needs a missing upstream patch.

Below are two representative failure messages.

# AMD K5
[ 3.063769] systemd[1]: Assertion
'clock_gettime(map_clock_id(clock_id), &ts) == 0' failed at
../systemd-238/src/basic/time-util.c:69, function now(). Aborting.
[ 3.083821] systemd[1]: Caught <ABRT>, core dump failed (child 40,
code=killed, status=6/ABRT).
[ 3.086399] systemd[1]: Freezing execution.

# Pentium Pro
Assertion 'clock_gettime(map_clock_id(clock_id), &ts) == 0' failed at
../systemd-238/src/basic/time-util.c:69, function now(). Aborting.
[ 29.573184] traps: systemd[1] general protection ip:b7153bb7
sp:bfb43d40 error:0 in libc-2.25.so[b7123000+1bc000]
[ 29.590392] Kernel panic - not syncing: Attempted to kill init!
exitcode=0x0000000b
[ 29.590392]
[ 29.592863] CPU: 1 PID: 1 Comm: systemd Not tainted
3.16.61.bisect-14.pentiumpro-server #221
[ 29.592863] 00000000 00000086 f683be28 c1310eb1 f682c860 f682c860
f683be40 c130fa0d
[ 29.592863] f682c860 f682c860 f682c860 c14eafd0 f683be88 c1026058
c144b48d 0000000b
[ 29.592863] f682cc1e f683be60 c102e537 f682cc1c 00000001 f682c860
c102e896 f682cbc8
[ 29.592863] Call Trace:
[ 29.592863] [<c1310eb1>] dump_stack+0x47/0x5b
[ 29.592863] [<c130fa0d>] panic+0x81/0x190
[ 29.592863] [<c1026058>] do_exit+0x3b2/0x72a
[ 29.592863] [<c102e537>] ? __sigqueue_free+0x32/0x35
[ 29.592863] [<c102e896>] ? recalc_sigpending_tsk+0xa/0x61
[ 29.592863] [<c1026ef9>] do_group_exit+0x37/0x84
[ 29.592863] [<c1030ce0>] get_signal_to_deliver+0x48c/0x4c6
[ 29.592863] [<c1001797>] do_signal+0x35/0x57d
[ 29.592863] [<c10afdc2>] ? slob_alloc.isra.11+0xb6/0x178
[ 29.592863] [<c1044ab7>] ? try_to_wake_up+0x194/0x19e
[ 29.592863] [<c102f677>] ? __send_signal.constprop.26+0x24c/0x256
[ 29.592863] [<c102fc60>] ? force_sig_info+0x96/0xa0
[ 29.592863] [<c1002549>] ? do_alignment_check+0x1a/0x1a
[ 29.592863] [<c1001cf4>] do_notify_resume+0x15/0x3f
[ 29.592863] [<c1314c6d>] work_notifysig+0x1a/0x21
[ 29.592863] [<c1002549>] ? do_alignment_check+0x1a/0x1a
[ 29.592863] Kernel Offset: 0x0 from 0xc1000000 (relocation range:
0xc0000000-0xf7ffdfff)
[ 29.592863] Rebooting in 45 seconds..

- Matthew