Linux Container Development
 help / color / mirror / Atom feed
From: Dan Smith <danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
To: Oren Laadan <orenl-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org>
Cc: Luis Rilling
	<Louis.Rilling-aw0BnHfMbSpBDgjK7y7TUQ@public.gmane.org>,
	containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
Subject: Re: [PATCH 3/4] c/r: [signal] pending signals (private, shared)
Date: Mon, 17 Aug 2009 09:47:32 -0700	[thread overview]
Message-ID: <87vdkm5qvv.fsf@caffeine.danplanet.com> (raw)
In-Reply-To: <1250287636-16463-4-git-send-email-orenl-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org> (Oren Laadan's message of "Fri\, 14 Aug 2009 18\:07\:15 -0400")

OL> +static int load_siginfo(siginfo_t *info, struct ckpt_hdr_siginfo *si)
OL> +{
OL> +	if (!valid_signal(si->signo))
OL> +		return -EINVAL;
OL> +
OL> +	info->si_signo = si->signo;
OL> +	info->si_errno = si->_errno;
OL> +	info->si_code = si->code;
OL> +
OL> +	/* TODO: validate remaining signal fields */
OL> +
OL> +	switch(info->si_code & __SI_MASK) {
OL> +	case __SI_TIMER:
OL> +		info->si_tid = si->pid;
OL> +		info->si_overrun = si->uid;
OL> +		info->si_int = si->sigval_int;
OL> +		info->si_sys_private = si->utime;
OL> +		break;
OL> +	case __SI_POLL:
OL> +		info->si_band = si->pid;
OL> +		info->si_fd = si->sigval_int;
OL> +		break;
OL> +	case __SI_FAULT:
OL> +		info->si_addr = (void __user *) (unsigned long) si->sigval_ptr;
OL> +#ifdef __ARCH_SI_TRAPNO
OL> +		info->si_trapno = si->sigval_int;
OL> +#endif
OL> +		break;
OL> +	case __SI_CHLD:
OL> +		info->si_pid = si->pid;
OL> +		info->si_uid = si->uid;
OL> +		info->si_status = si->sigval_int;
OL> +		info->si_stime = si->stime;
OL> +		info->si_utime = si->utime;
OL> +		break;
OL> +	case __SI_KILL:
OL> +	case __SI_RT:
OL> +	case __SI_MESGQ:
OL> +		info->si_pid = si->pid;
OL> +		info->si_uid = si->uid;
OL> +		info->si_ptr = (void __user *) (unsigned long) si->sigval_ptr;
OL> +		break;
OL> +	default:
OL> +		return -EINVAL;
OL> +	}
OL> +
OL> +	return 0;
OL> +}
OL> +

This seems like a perfect place to use the CKPT_COPY() macros, if
we're going to have them.  This and the save equivalent could be
almost identical.

OL> +static int restore_sigpending(struct ckpt_ctx *ctx, struct sigpending *pending)
OL> +{
OL> +	struct ckpt_hdr_sigpending *h;
OL> +	struct ckpt_hdr_siginfo *si;
OL> +	struct sigqueue *q;
OL> +	int ret = 0;
OL> +
OL> +	h = ckpt_read_buf_type(ctx, 0, CKPT_HDR_SIGPENDING);
OL> +	if (IS_ERR(h))
OL> +		return PTR_ERR(h);
OL> +
OL> +	INIT_LIST_HEAD(&pending->list);
OL> +	load_sigset(&pending->signal, &h->signal);
OL> +
OL> +	si = h->siginfo;
OL> +	while (h->nr_pending--) {
OL> +		q = sigqueue_alloc();
OL> +		if (!q) {
OL> +			ret = -ENOMEM;
OL> +			break;
OL> +		}
OL> +
OL> +		ret = load_siginfo(&q->info, si++);

I think there should be a sanity check here, no?  The checkpoint
stream claims h->nr_pending structures in h->siginfo, but we can't
trust that we're not going to march through memory to a segv unless we
check that the header length matches your calculation in
checkpoint_sigpending().

-- 
Dan Smith
IBM Linux Technology Center
email: danms-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org

  parent reply	other threads:[~2009-08-17 16:47 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-14 22:07 c/r: support for pending signals (v3) Oren Laadan
     [not found] ` <1250287636-16463-1-git-send-email-orenl-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org>
2009-08-14 22:07   ` [PATCH 1/4] c/r: [signal] blocked and template for shared signals Oren Laadan
2009-08-14 22:07   ` [PATCH 2/4] c/r: [signal] checkpoint/restart of rlimit Oren Laadan
2009-08-14 22:07   ` [PATCH 3/4] c/r: [signal] pending signals (private, shared) Oren Laadan
     [not found]     ` <1250287636-16463-4-git-send-email-orenl-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org>
2009-08-17 16:47       ` Dan Smith [this message]
     [not found]         ` <87vdkm5qvv.fsf-FLMGYpZoEPULwtHQx/6qkW3U47Q5hpJU@public.gmane.org>
2009-08-17 20:14           ` Oren Laadan
2009-08-14 22:07   ` [PATCH 4/4] c/r: [signal] support for real/virt/prof itimers Oren Laadan
2009-08-19  9:12   ` c/r: support for pending signals (v3) Louis Rilling

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87vdkm5qvv.fsf@caffeine.danplanet.com \
    --to=danms-r/jw6+rmf7hqt0dzr+alfa@public.gmane.org \
    --cc=Louis.Rilling-aw0BnHfMbSpBDgjK7y7TUQ@public.gmane.org \
    --cc=containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
    --cc=orenl-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox