Add a field to ckpt_siginfo corresponding to the si_sys_private siginfo field. Stop overloading unrelated fields and use the appropriate members for timer id and overrun. si_int is a member of union sigval, whose other member is a pointer; saving and restoring si_int will work for 32- but not 64-bit architectures. Save and restore the si_ptr field instead, which will cover the whole union. Signed-off-by: Nathan Lynch <ntl@xxxxxxxxx> --- include/linux/checkpoint_hdr.h | 1 + kernel/signal.c | 16 ++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/include/linux/checkpoint_hdr.h b/include/linux/checkpoint_hdr.h index b46d586..16b1723 100644 --- a/include/linux/checkpoint_hdr.h +++ b/include/linux/checkpoint_hdr.h @@ -936,6 +936,7 @@ struct ckpt_siginfo { __u64 csi_utime; __u64 csi_stime; __u64 csi_addr; + __s32 csi_sys_private; /* POSIX.1b timers */ } __attribute__((aligned(8))); struct ckpt_hdr_sigpending { diff --git a/kernel/signal.c b/kernel/signal.c index 13ab68e..e78a08e 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -2923,10 +2923,10 @@ static void fill_siginfo(struct ckpt_siginfo *si, const siginfo_t *info) switch (info->si_code & __SI_MASK) { case __SI_TIMER: - si->csi_pid = info->si_tid; - si->csi_uid = info->si_overrun; - si->csi_int = info->si_int; - si->csi_utime = info->si_sys_private; + si->csi_tid = info->si_tid; + si->csi_overrun = info->si_overrun; + si->csi_ptr = (unsigned long)info->si_ptr; + si->csi_sys_private = info->si_sys_private; break; case __SI_POLL: si->csi_pid = info->si_band; @@ -2972,10 +2972,10 @@ static int load_siginfo(siginfo_t *info, const struct ckpt_siginfo *si) switch (info->si_code & __SI_MASK) { case __SI_TIMER: - info->si_tid = si->csi_pid; - info->si_overrun = si->csi_uid; - info->si_int = si->csi_int; - info->si_sys_private = si->csi_utime; + info->si_tid = si->csi_tid; + info->si_overrun = si->csi_overrun; + info->si_ptr = (void __user *)(unsigned long)si->csi_ptr; + info->si_sys_private = si->csi_sys_private; break; case __SI_POLL: info->si_band = si->csi_pid; -- 1.7.1.1 _______________________________________________ Containers mailing list Containers@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/containers