mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-22 01:51:51 +00:00
cr-restore: rseq: use glibc-specific way to unregister only as fallback
Let's use dynamic approach to detect built-in *libc rseq in all cases, and "old" static approach as a fallback path if the user kernel lacks support of ptrace_get_rseq_conf feature. Suggested-by: Florian Weimer <fweimer@redhat.com> Signed-off-by: Alexander Mikhalitsyn <alexander.mikhalitsyn@virtuozzo.com>
This commit is contained in:
parent
cacddf19da
commit
f7972a3f04
@ -3088,7 +3088,6 @@ static int prep_rseq(struct rst_rseq_param *rseq, ThreadCoreEntry *tc)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if defined(__GLIBC__) && defined(RSEQ_SIG)
|
||||
static void prep_libc_rseq_info(struct rst_rseq_param *rseq)
|
||||
{
|
||||
if (!kdat.has_rseq) {
|
||||
@ -3096,15 +3095,14 @@ static void prep_libc_rseq_info(struct rst_rseq_param *rseq)
|
||||
return;
|
||||
}
|
||||
|
||||
rseq->rseq_abi_pointer = encode_pointer(__criu_thread_pointer() + __rseq_offset);
|
||||
rseq->rseq_abi_size = __rseq_size;
|
||||
rseq->signature = RSEQ_SIG;
|
||||
}
|
||||
if (!kdat.has_ptrace_get_rseq_conf) {
|
||||
#if defined(__GLIBC__) && defined(RSEQ_SIG)
|
||||
rseq->rseq_abi_pointer = encode_pointer(__criu_thread_pointer() + __rseq_offset);
|
||||
rseq->rseq_abi_size = __rseq_size;
|
||||
rseq->signature = RSEQ_SIG;
|
||||
#else
|
||||
static void prep_libc_rseq_info(struct rst_rseq_param *rseq)
|
||||
{
|
||||
if (!kdat.has_rseq || !kdat.has_ptrace_get_rseq_conf) {
|
||||
rseq->rseq_abi_pointer = 0;
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
@ -3112,7 +3110,6 @@ static void prep_libc_rseq_info(struct rst_rseq_param *rseq)
|
||||
rseq->rseq_abi_size = kdat.libc_rseq_conf.rseq_abi_size;
|
||||
rseq->signature = kdat.libc_rseq_conf.signature;
|
||||
}
|
||||
#endif
|
||||
|
||||
static rlim_t decode_rlim(rlim_t ival)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user