Messages in this thread | | | Date | Tue, 26 Jun 2018 13:38:07 -0400 (EDT) | From | Mathieu Desnoyers <> | Subject | rseq: How to test for compat task at signal delivery |
| |
Hi Andy,
I would like to make the behavior rseq on compat tasks more robust by ensuring that kernel/rseq.c:rseq_get_rseq_cs() clears the high bits of rseq_cs->abort_ip, rseq_cs->start_ip and rseq_cs->post_commit_offset when a 32-bit binary is run on a 64-bit kernel.
The intent here is that if user-space has garbage rather than zeroes in its struct rseq_cs fields padding, the behavior will be the same whether the binary is run on 32-bit or 64 kernels.
I know that internally, the kernel is making a transition from is_compat_task() to in_compat_syscall().
I'm fine with using in_compat_syscall() when rseq_get_rseq_cs() is invoked from a system call, but is it OK to call it when it is invoked from signal delivery ? AFAIU, signals can be delivered upon return from interrupt as well.
If not, what strategy do you recommend for arch-agnostic code ?
Thanks,
Mathieu
-- Mathieu Desnoyers EfficiOS Inc. http://www.efficios.com
| |