[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Xen-devel] [PATCH v3 4/7] sysctl: Add sysctl interface for querying PCI topology
 
- To: Robert Elz <kre@xxxxxxxxxxxxx>
 
- From: Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>
 
- Date: Tue, 10 Feb 2015 09:37:08 -0500
 
- Cc: keir@xxxxxxx, ian.campbell@xxxxxxxxxx, port-xen@xxxxxxxxxx,	stefano.stabellini@xxxxxxxxxxxxx, andrew.cooper3@xxxxxxxxxx,	dario.faggioli@xxxxxxxxxx, ian.jackson@xxxxxxxxxxxxx,	xen-devel@xxxxxxxxxxxxx, jbeulich@xxxxxxxx, wei.liu2@xxxxxxxxxx,	ufimtseva@xxxxxxxxx
 
- Delivery-date: Tue, 10 Feb 2015 14:37:24 +0000
 
- List-id: Xen developer discussion <xen-devel.lists.xen.org>
 
 
 
On 02/10/2015 05:26 AM, Robert Elz wrote:
 
     Date:        Mon,  9 Feb 2015 15:04:32 -0500
     From:        Boris Ostrovsky <boris.ostrovsky@xxxxxxxxxx>
     Message-ID:  <1423512275-6531-5-git-send-email-boris.ostrovsky@xxxxxxxxxx>
   | +        num_devs = ti->num_devs - ti->first_dev;
   | +
   | +        if ( guest_handle_is_null(ti->devs) ||
   | +             guest_handle_is_null(ti->nodes) ||
   | +             (num_devs <= 0) )
   | +        {
   | +            ret = -EINVAL;
   | +            break;
   | +        }
Does that need a check that ti->first_dev <= ti_num_devs ?
(that is aside from the issue of subtracting one uint from another and hoping
that you'll get a negative signed int if the one subtracted is bigger).
The (num_devs <= 0) test (even if it works - which it should on most
rational architectures) isn't good enough, as it is possible to subtract
a very big uint from a very small unit and end up with an int that is
positive (and potentially, very big, consider (32bit): 2 - 0x80000001).
So, replace the (num_devs <= 0) test by (ti->first_dev <= ti->num_devs)  ??
Or possibly include both tests, just in case ti->num_devs is very large and
ti->first_dev is small (like 0) and when the large unsigned is converted
to signed, it becomes negative - or is all of this just too impossible
to worry about?
 
 For the latter, I'll just keep num_devs as uint32. The only reason I 
declared it as a signed int was for (num_devs <= 0) test.
-boris
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
 
 
    
     |