]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[xen] Avoid infinite loop on allocation failure in xenstore_response()
authorMichael Brown <mcb30@ipxe.org>
Tue, 20 Apr 2021 12:28:57 +0000 (13:28 +0100)
committerMichael Brown <mcb30@ipxe.org>
Tue, 20 Apr 2021 12:28:57 +0000 (13:28 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/interface/xen/xenstore.c

index a14881fcd9c7c932fab64f6b3b58610db8067cf2..caeb4e934316a097f520746d7f6d3868eba4a5d7 100644 (file)
@@ -68,14 +68,14 @@ static void xenstore_send ( struct xen_hypervisor *xen, const void *data,
        XENSTORE_RING_IDX cons;
        XENSTORE_RING_IDX idx;
        const char *bytes = data;
-       size_t offset = 0;
+       size_t offset;
        size_t fill;
 
        DBGCP ( intf, "XENSTORE raw request:\n" );
        DBGCP_HDA ( intf, MASK_XENSTORE_IDX ( prod ), data, len );
 
        /* Write one byte at a time */
-       while ( offset < len ) {
+       for ( offset = 0 ; offset < len ; offset++ ) {
 
                /* Wait for space to become available */
                while ( 1 ) {
@@ -90,7 +90,7 @@ static void xenstore_send ( struct xen_hypervisor *xen, const void *data,
 
                /* Write byte */
                idx = MASK_XENSTORE_IDX ( prod++ );
-               writeb ( bytes[offset++], &intf->req[idx] );
+               writeb ( bytes[offset], &intf->req[idx] );
        }
 
        /* Update producer counter */
@@ -125,13 +125,13 @@ static void xenstore_recv ( struct xen_hypervisor *xen, void *data,
        XENSTORE_RING_IDX prod;
        XENSTORE_RING_IDX idx;
        char *bytes = data;
-       size_t offset = 0;
+       size_t offset;
        size_t fill;
 
        DBGCP ( intf, "XENSTORE raw response:\n" );
 
        /* Read one byte at a time */
-       while ( offset < len ) {
+       for ( offset = 0 ; offset < len ; offset++ ) {
 
                /* Wait for data to be ready */
                while ( 1 ) {
@@ -147,7 +147,7 @@ static void xenstore_recv ( struct xen_hypervisor *xen, void *data,
                /* Read byte */
                idx = MASK_XENSTORE_IDX ( cons++ );
                if ( data )
-                       bytes[offset++] = readb ( &intf->rsp[idx] );
+                       bytes[offset] = readb ( &intf->rsp[idx] );
        }
        if ( data )
                DBGCP_HDA ( intf, MASK_XENSTORE_IDX ( cons - len ), data, len );