summaryrefslogtreecommitdiff
path: root/src/util/virportallocator.c
diff options
context:
space:
mode:
authorDaniel P. Berrange <berrange@redhat.com>2013-01-17 12:07:53 +0000
committerDaniel P. Berrange <berrange@redhat.com>2013-01-17 13:52:33 +0000
commitda5a8aee2b20f207bf30ceb9ca182e42ff3903ea (patch)
treebc9cd4a74fbc2d21637bb49addde51f42cf23754 /src/util/virportallocator.c
parent4909bcbbc12c825ed234982b980ddf0154acb923 (diff)
downloadlibvirt-da5a8aee2b20f207bf30ceb9ca182e42ff3903ea.tar.gz
Avoid integer wrap on remotePortMax in QEMU driver
The QEMU driver default max port is 65535, but it then increments this by 1 to 65536. This maps to 0 in an unsigned short :-( This was apparently done so that for() loops could use "< max" instead of "<= max". Remove this insanity and just make the loop do the right thing.
Diffstat (limited to 'src/util/virportallocator.c')
-rw-r--r--src/util/virportallocator.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/util/virportallocator.c b/src/util/virportallocator.c
index 033aee4702..d80347ad8b 100644
--- a/src/util/virportallocator.c
+++ b/src/util/virportallocator.c
@@ -84,7 +84,7 @@ virPortAllocatorPtr virPortAllocatorNew(unsigned short start,
pa->start = start;
pa->end = end;
- if (!(pa->bitmap = virBitmapNew(end-start))) {
+ if (!(pa->bitmap = virBitmapNew((end-start)+1))) {
virReportOOMError();
virObjectUnref(pa);
return NULL;
@@ -103,7 +103,7 @@ int virPortAllocatorAcquire(virPortAllocatorPtr pa,
*port = 0;
virObjectLock(pa);
- for (i = pa->start ; i < pa->end && !*port; i++) {
+ for (i = pa->start ; i <= pa->end && !*port; i++) {
int reuse = 1;
struct sockaddr_in addr;
bool used = false;
@@ -168,7 +168,7 @@ int virPortAllocatorRelease(virPortAllocatorPtr pa,
virObjectLock(pa);
if (port < pa->start ||
- port >= pa->end) {
+ port > pa->end) {
virReportInvalidArg(port, "port %d must be in range (%d, %d)",
port, pa->start, pa->end);
goto cleanup;