[xfer] Use xfer_alloc_iob() for transmit I/O buffers on stream sockets

Datagram sockets such as UDP, ICMP, and fibre channel tend to provide
a custom xfer_alloc_iob() handler to ensure that transmit I/O buffers
contain sufficient headroom to accommodate any required protocol
headers.

Stream sockets such as TCP and TLS do not typically provide a custom
xfer_alloc_iob() handler at present.  The default handler simply calls
alloc_iob(), and so stream socket consumers can therefore get away
with using alloc_iob() rather than xfer_alloc_iob().

Fix the HTTP and ONC RPC protocols to use xfer_alloc_iob() where
relevant, in order to operate correctly if the underlying stream
socket chooses to provide a custom xfer_alloc_iob() handler.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
pull/1437/head
Michael Brown 2025-03-30 21:47:34 +01:00
parent 3937c893ae
commit d92551a320
2 changed files with 3 additions and 2 deletions

View File

@ -1090,7 +1090,8 @@ static int http_tx_request ( struct http_transaction *http ) {
}
/* Allocate I/O buffer */
iobuf = alloc_iob ( len + 1 /* NUL */ + http->request.content.len );
iobuf = xfer_alloc_iob ( &http->conn, ( len + 1 /* NUL */ +
http->request.content.len ) );
if ( ! iobuf ) {
rc = -ENOMEM;
goto err_alloc;

View File

@ -150,7 +150,7 @@ int oncrpc_call ( struct interface *intf, struct oncrpc_session *session,
frame_size = oncrpc_compute_size ( header );
frame_size += oncrpc_compute_size ( fields );
io_buf = alloc_iob ( frame_size );
io_buf = xfer_alloc_iob ( intf, frame_size );
if ( ! io_buf )
return -ENOBUFS;