mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-07-31 14:07:16 +00:00
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.
This commit is contained in:
parent
4909bcbbc1
commit
da5a8aee2b
@ -233,10 +233,6 @@ int qemuLoadDriverConfig(virQEMUDriverPtr driver,
|
|||||||
filename, QEMU_REMOTE_PORT_MAX);
|
filename, QEMU_REMOTE_PORT_MAX);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
/* increasing the value by 1 makes all the loops going through
|
|
||||||
the bitmap (i = remotePortMin; i < remotePortMax; i++), work as
|
|
||||||
expected. */
|
|
||||||
driver->remotePortMax++;
|
|
||||||
|
|
||||||
if (driver->remotePortMin > driver->remotePortMax) {
|
if (driver->remotePortMin > driver->remotePortMax) {
|
||||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||||
|
@ -84,7 +84,7 @@ virPortAllocatorPtr virPortAllocatorNew(unsigned short start,
|
|||||||
pa->start = start;
|
pa->start = start;
|
||||||
pa->end = end;
|
pa->end = end;
|
||||||
|
|
||||||
if (!(pa->bitmap = virBitmapNew(end-start))) {
|
if (!(pa->bitmap = virBitmapNew((end-start)+1))) {
|
||||||
virReportOOMError();
|
virReportOOMError();
|
||||||
virObjectUnref(pa);
|
virObjectUnref(pa);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -103,7 +103,7 @@ int virPortAllocatorAcquire(virPortAllocatorPtr pa,
|
|||||||
*port = 0;
|
*port = 0;
|
||||||
virObjectLock(pa);
|
virObjectLock(pa);
|
||||||
|
|
||||||
for (i = pa->start ; i < pa->end && !*port; i++) {
|
for (i = pa->start ; i <= pa->end && !*port; i++) {
|
||||||
int reuse = 1;
|
int reuse = 1;
|
||||||
struct sockaddr_in addr;
|
struct sockaddr_in addr;
|
||||||
bool used = false;
|
bool used = false;
|
||||||
@ -168,7 +168,7 @@ int virPortAllocatorRelease(virPortAllocatorPtr pa,
|
|||||||
virObjectLock(pa);
|
virObjectLock(pa);
|
||||||
|
|
||||||
if (port < pa->start ||
|
if (port < pa->start ||
|
||||||
port >= pa->end) {
|
port > pa->end) {
|
||||||
virReportInvalidArg(port, "port %d must be in range (%d, %d)",
|
virReportInvalidArg(port, "port %d must be in range (%d, %d)",
|
||||||
port, pa->start, pa->end);
|
port, pa->start, pa->end);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
@ -59,7 +59,7 @@ int bind(int sockfd ATTRIBUTE_UNUSED,
|
|||||||
|
|
||||||
static int testAllocAll(const void *args ATTRIBUTE_UNUSED)
|
static int testAllocAll(const void *args ATTRIBUTE_UNUSED)
|
||||||
{
|
{
|
||||||
virPortAllocatorPtr alloc = virPortAllocatorNew(5900, 5910);
|
virPortAllocatorPtr alloc = virPortAllocatorNew(5900, 5909);
|
||||||
int ret = -1;
|
int ret = -1;
|
||||||
unsigned short p1, p2, p3, p4, p5, p6, p7;
|
unsigned short p1, p2, p3, p4, p5, p6, p7;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user