From: Michael Brown Date: Sun, 30 Mar 2025 20:47:34 +0000 (+0100) Subject: [xfer] Use xfer_alloc_iob() for transmit I/O buffers on stream sockets X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d92551a320f32fa5d8fc8b2d2f02b174aa6fab66;p=thirdparty%2Fipxe.git [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 --- diff --git a/src/net/tcp/httpcore.c b/src/net/tcp/httpcore.c index af2a237cf..7052bbbad 100644 --- a/src/net/tcp/httpcore.c +++ b/src/net/tcp/httpcore.c @@ -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; diff --git a/src/net/tcp/oncrpc.c b/src/net/tcp/oncrpc.c index cb66aeb85..64734a808 100644 --- a/src/net/tcp/oncrpc.c +++ b/src/net/tcp/oncrpc.c @@ -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;