[Libvir] [PATCH] Guard a negative value of "virsh setmem" and "virsh setmexmem"

Masayuki Sunou fj1826dm at aa.jp.fujitsu.com
Mon Mar 19 00:48:03 UTC 2007


Hi Daniel

> This kind of errors must be caught when calling the API, if one casts 
> from a signed to the unsigned long a check must be done at that point
> for negative value by the caller. I'm unsure in what environment you
> got the problem, but that's not the right way to fix it :-)
> 
This patch intends to add a check of the "bytes" value on virsh.

Signed-off-by: Masayuki Sunou <fj1826dm at aa.jp.fujitsu.com>

Thanks,
Masayuki Sunou.

-------------------------------------------------------------------------------
Index: src/virsh.c
===================================================================
RCS file: /data/cvs/libvirt/src/virsh.c,v
retrieving revision 1.64
diff -u -p -r1.64 virsh.c
--- src/virsh.c	15 Mar 2007 17:24:57 -0000	1.64
+++ src/virsh.c	19 Mar 2007 00:14:12 -0000
@@ -1459,7 +1459,7 @@ cmdSetmem(vshControl * ctl, vshCmd * cmd
         return FALSE;
 
     bytes = vshCommandOptInt(cmd, "bytes", &bytes);
-    if (!bytes) {
+    if (bytes <= 0) {
         virDomainFree(dom);
         return FALSE;
     }
@@ -1502,7 +1502,7 @@ cmdSetmaxmem(vshControl * ctl, vshCmd * 
         return FALSE;
 
     bytes = vshCommandOptInt(cmd, "bytes", &bytes);
-    if (!bytes) {
+    if (bytes <= 0) {
         virDomainFree(dom);
         return FALSE;
     }
-------------------------------------------------------------------------------

In message <20070316103843.GP3127 at redhat.com>
   "Re: [Libvir] [PATCH] Guard a negative value of "virsh setmem" and "virsh setmexmem""
   "Daniel Veillard <veillard at redhat.com>" wrote:

> On Fri, Mar 16, 2007 at 12:26:18PM +0900, Masayuki Sunou wrote:
> > Hi
> > 
> > "virsh setmem" and "virsh setmexmem" have the problem of setting a very
> > big value in the domain when -1 is set in the domain. 
> > 
> > As a result, I detected the problem of doing abnormal operation of Xen
> > in 64bit machine. (virsh setmem)
> > 
> > Therefore, I contribute the patch that corrects the argument of the
> > function to guard a negative value. 
> [...]
> >  unsigned long		virDomainGetMaxMemory	(virDomainPtr domain);
> >  int			virDomainSetMaxMemory	(virDomainPtr domain,
> > -						 unsigned long memory);
> > +						 int memory);
> >  int			virDomainSetMemory	(virDomainPtr domain,
> > -						 unsigned long memory);
> > +						 int memory);
> >  int			virDomainGetMaxVcpus	(virDomainPtr domain);
> 
>   Sorry you really cannot do that:
>     - it breaks the API (by changing a public interface)
>     - it breaks the ABI (by changing the parameter size on 64bit boxes)
>     - and it makes Set and Get routines inconsistent.
> 
> This kind of errors must be caught when calling the API, if one casts 
> from a signed to the unsigned long a check must be done at that point
> for negative value by the caller. I'm unsure in what environment you
> got the problem, but that's not the right way to fix it :-)
> 
> Daniel
> 
> -- 
> Red Hat Virtualization group http://redhat.com/virtualization/
> Daniel Veillard      | virtualization library  http://libvirt.org/
> veillard at redhat.com  | libxml GNOME XML XSLT toolkit  http://xmlsoft.org/
> http://veillard.com/ | Rpmfind RPM search engine  http://rpmfind.net/
> 




More information about the libvir-list mailing list