[PATCH 7/8] checkpoint: __SI_KILL does not use si_ptr

Nathan Lynch ntl at pobox.com
Tue Jul 13 08:44:23 PDT 2010


Handle __SI_KILL in its own case during siginfo save/restore; grouping
it with __SI_RT and __SI_MESGQ doesn't make sense as si_ptr use is not
implied.  See copy_siginfo_to_user, signalfd_copyinfo.

Signed-off-by: Nathan Lynch <ntl at pobox.com>
---
 kernel/signal.c |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/kernel/signal.c b/kernel/signal.c
index fccf9b6..85757e1 100644
--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -2922,6 +2922,10 @@ static void fill_siginfo(struct ckpt_siginfo *si, const siginfo_t *info)
 	/* TODO: convert info->si_uid to uid_objref */
 
 	switch (info->si_code & __SI_MASK) {
+	case __SI_KILL:
+		si->csi_pid = info->si_pid;
+		si->csi_uid = info->si_uid;
+		break;
 	case __SI_TIMER:
 		si->csi_tid = info->si_tid;
 		si->csi_overrun = info->si_overrun;
@@ -2945,12 +2949,11 @@ static void fill_siginfo(struct ckpt_siginfo *si, const siginfo_t *info)
 		si->csi_stime = info->si_stime;
 		si->csi_utime = info->si_utime;
 		break;
-	case __SI_KILL:
 	case __SI_RT:
 	case __SI_MESGQ:
 		si->csi_pid = info->si_pid;
 		si->csi_uid = info->si_uid;
-		si->csi_ptr = (unsigned long) info->si_ptr;
+		si->csi_ptr = (unsigned long)info->si_ptr;
 		break;
 	default:
 		BUG();
@@ -2971,6 +2974,10 @@ static int load_siginfo(siginfo_t *info, const struct ckpt_siginfo *si)
 	/* TODO: validate remaining signal fields */
 
 	switch (info->si_code & __SI_MASK) {
+	case __SI_KILL:
+		info->si_pid = si->csi_pid;
+		info->si_uid = si->csi_uid;
+		break;
 	case __SI_TIMER:
 		info->si_tid = si->csi_tid;
 		info->si_overrun = si->csi_overrun;
@@ -2994,12 +3001,11 @@ static int load_siginfo(siginfo_t *info, const struct ckpt_siginfo *si)
 		info->si_stime = si->csi_stime;
 		info->si_utime = si->csi_utime;
 		break;
-	case __SI_KILL:
 	case __SI_RT:
 	case __SI_MESGQ:
 		info->si_pid = si->csi_pid;
 		info->si_uid = si->csi_uid;
-		info->si_ptr = (void __user *) (unsigned long) si->csi_ptr;
+		info->si_ptr = (void __user *)(unsigned long)si->csi_ptr;
 		break;
 	default:
 		return -EINVAL;
-- 
1.7.1.1



More information about the Containers mailing list