summaryrefslogtreecommitdiffstats
path: root/src/core/xfer.c
diff options
context:
space:
mode:
authorMichael Brown2009-02-15 09:41:46 +0100
committerMichael Brown2009-02-15 09:44:22 +0100
commit8ae1cac0502c2a4d946f7bafa15a944bb1ef48a2 (patch)
treee271a28b9cb1ecb3749df8fc33e0d6f54eee8c8e /src/core/xfer.c
parent[umalloc] Avoid problems when _textdata_memsz is a multiple of 4kB (diff)
downloadipxe-8ae1cac0502c2a4d946f7bafa15a944bb1ef48a2.tar.gz
ipxe-8ae1cac0502c2a4d946f7bafa15a944bb1ef48a2.tar.xz
ipxe-8ae1cac0502c2a4d946f7bafa15a944bb1ef48a2.zip
[xfer] Make consistent assumptions that xfer metadata can never be NULL
The documentation in xfer.h and xfer.c does not say that the metadata parameter is optional in calls such as xfer_deliver_iob_meta() and the deliver_iob() method. However, some code in net/ is prepared to accept a NULL pointer, and xfer_deliver_as_iob() passes a NULL pointer directly to the deliver_iob() method. Fix this mess of conflicting assumptions by making everything assume that the metadata parameter is mandatory, and fixing xfer_deliver_as_iob() to pass in a dummy metadata structure (as is already done in xfer_deliver_iob()).
Diffstat (limited to 'src/core/xfer.c')
-rw-r--r--src/core/xfer.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/core/xfer.c b/src/core/xfer.c
index 14c77d64..9ed19da2 100644
--- a/src/core/xfer.c
+++ b/src/core/xfer.c
@@ -28,6 +28,14 @@
*/
/**
+ * Dummy transfer metadata
+ *
+ * This gets passed to xfer_interface::deliver_iob() and equivalents
+ * when no metadata is available.
+ */
+static struct xfer_metadata dummy_metadata;
+
+/**
* Close data transfer interface
*
* @v xfer Data transfer interface
@@ -159,7 +167,6 @@ int xfer_deliver_iob_meta ( struct xfer_interface *xfer,
*/
int xfer_deliver_iob ( struct xfer_interface *xfer,
struct io_buffer *iobuf ) {
- static struct xfer_metadata dummy_metadata;
return xfer_deliver_iob_meta ( xfer, iobuf, &dummy_metadata );
}
@@ -366,7 +373,7 @@ int xfer_deliver_as_iob ( struct xfer_interface *xfer,
return -ENOMEM;
memcpy ( iob_put ( iobuf, len ), data, len );
- return xfer->op->deliver_iob ( xfer, iobuf, NULL );
+ return xfer->op->deliver_iob ( xfer, iobuf, &dummy_metadata );
}
/**