From 3194c8ad0acd56206e60cba040425c28ca428fa5 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Wed, 25 Feb 2026 00:00:28 +0000 Subject: [PATCH] [xferbuf] Record maximum required size Record the maximum size required when writing into a data transfer buffer. This allows the maximum size to be determined even if allocation fails (e.g. due to a fixed-size buffer or an out-of-memory condition). In the case of a fixed-size buffer (which may already be larger than required), this allows the caller to determine the actual size used for written data. Signed-off-by: Michael Brown --- src/core/xferbuf.c | 5 +++++ src/include/ipxe/xferbuf.h | 2 ++ 2 files changed, 7 insertions(+) diff --git a/src/core/xferbuf.c b/src/core/xferbuf.c index ca3baaab5..a313c625a 100644 --- a/src/core/xferbuf.c +++ b/src/core/xferbuf.c @@ -63,6 +63,7 @@ void xferbuf_detach ( struct xfer_buffer *xferbuf ) { xferbuf->data = NULL; xferbuf->len = 0; + xferbuf->max = 0; xferbuf->pos = 0; } @@ -87,6 +88,10 @@ void xferbuf_free ( struct xfer_buffer *xferbuf ) { static int xferbuf_ensure_size ( struct xfer_buffer *xferbuf, size_t len ) { int rc; + /* Record maximum required size */ + if ( len > xferbuf->max ) + xferbuf->max = len; + /* If buffer is already large enough, do nothing */ if ( len <= xferbuf->len ) return 0; diff --git a/src/include/ipxe/xferbuf.h b/src/include/ipxe/xferbuf.h index aa0b2471f..5d637d72e 100644 --- a/src/include/ipxe/xferbuf.h +++ b/src/include/ipxe/xferbuf.h @@ -21,6 +21,8 @@ struct xfer_buffer { void *data; /** Size of data */ size_t len; + /** Maximum required size of data */ + size_t max; /** Current offset within data */ size_t pos; /** Data transfer buffer operations */