summaryrefslogtreecommitdiff
path: root/backport-avoid-infinite-loop-on-allocation-failure-in.patch
diff options
context:
space:
mode:
Diffstat (limited to 'backport-avoid-infinite-loop-on-allocation-failure-in.patch')
-rw-r--r--backport-avoid-infinite-loop-on-allocation-failure-in.patch69
1 files changed, 69 insertions, 0 deletions
diff --git a/backport-avoid-infinite-loop-on-allocation-failure-in.patch b/backport-avoid-infinite-loop-on-allocation-failure-in.patch
new file mode 100644
index 0000000..8dffce5
--- /dev/null
+++ b/backport-avoid-infinite-loop-on-allocation-failure-in.patch
@@ -0,0 +1,69 @@
+From 614d99eba149d0fafc64dfdddc7ef04970e0d86c Mon Sep 17 00:00:00 2001
+From: Michael Brown <mcb30@ipxe.org>
+Date: Tue, 20 Apr 2021 13:28:57 +0100
+Subject: [PATCH] [xen] Avoid infinite loop on allocation failure in
+ xenstore_response()
+Signed-off-by: Michael Brown <mcb30@ipxe.org>
+Conflict:NA
+Reference:https://github.com/ipxe/ipxe/commit/614d99eba149d0fafc64dfdddc7ef04970e0d86c
+---
+ src/interface/xen/xenstore.c | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+diff --git a/src/interface/xen/xenstore.c b/src/interface/xen/xenstore.c
+index a14881f..c2da532 100644
+--- a/src/interface/xen/xenstore.c
++++ b/src/interface/xen/xenstore.c
+@@ -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 );
+--
+2.23.0
+