From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: Re: [PATCH for Xen 4.5 v2 1/2] xen: sanity check input and serialization in sched_rt.c Date: Mon, 10 Nov 2014 12:54:18 +0000 Message-ID: <5460B57A.5050601@eu.citrix.com> References: <1414246599-3914-1-git-send-email-mengxu@cis.upenn.edu> <1414246599-3914-2-git-send-email-mengxu@cis.upenn.edu> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1414246599-3914-2-git-send-email-mengxu@cis.upenn.edu> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Meng Xu , xen-devel@lists.xen.org Cc: ian.campbell@citrix.com, stefano.stabellini@eu.citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, xumengpanda@gmail.com, JBeulich@suse.com List-Id: xen-devel@lists.xenproject.org On 10/25/2014 03:16 PM, Meng Xu wrote: > Sanity check input params in rt_dom_cntl(); > Serialize rt_dom_cntl() against the global lock. > > Signed-off-by: Meng Xu Reviewed-by: George Dunlap Thanks, -George > --- > xen/common/sched_rt.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/xen/common/sched_rt.c b/xen/common/sched_rt.c > index 6c8faeb..b87c95b 100644 > --- a/xen/common/sched_rt.c > +++ b/xen/common/sched_rt.c > @@ -1042,9 +1042,11 @@ rt_dom_cntl( > struct domain *d, > struct xen_domctl_scheduler_op *op) > { > + struct rt_private *prv = rt_priv(ops); > struct rt_dom * const sdom = rt_dom(d); > struct rt_vcpu *svc; > struct list_head *iter; > + unsigned long flags; > int rc = 0; > > switch ( op->cmd ) > @@ -1055,12 +1057,19 @@ rt_dom_cntl( > op->u.rtds.budget = svc->budget / MICROSECS(1); > break; > case XEN_DOMCTL_SCHEDOP_putinfo: > + if ( op->u.rtds.period == 0 || op->u.rtds.budget == 0 ) > + { > + rc = -EINVAL; > + break; > + } > + spin_lock_irqsave(&prv->lock, flags); > list_for_each( iter, &sdom->vcpu ) > { > struct rt_vcpu * svc = list_entry(iter, struct rt_vcpu, sdom_elem); > svc->period = MICROSECS(op->u.rtds.period); /* transfer to nanosec */ > svc->budget = MICROSECS(op->u.rtds.budget); > } > + spin_unlock_irqrestore(&prv->lock, flags); > break; > } >