Re: [PATCH v3 2/4] virt: tdx-guest: Calculate the Quote buffer size safely

From: Kuppuswamy Sathyanarayanan

Date: Wed Jul 29 2026 - 14:45:07 EST


Hi,

On 7/29/2026 5:29 AM, Peter Fang wrote:
> struct tdx_quote_buf has a trailing flexible array member.
> struct_size_t() calculates the size of this kind of struct safely. It
> handles overflow, which is an important property since the Quote size
> comes from the host.
>
> Use it in place of the fixed length limit.
>
> Signed-off-by: Peter Fang <peter.fang@xxxxxxxxx>
> ---
> v3:
> - Split out the use of struct_size_t() for buffer length from the v2
> "Allocate Quote buffer dynamically" patch to refactor first. [Dave]
> - Drop the Reviewed-by tags from v2 (Kiryl, Binbin) as the patch was
> reworked.
> ---

Reviewed-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@xxxxxxxxxxxxxxx>


> drivers/virt/coco/tdx-guest/tdx-guest.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/virt/coco/tdx-guest/tdx-guest.c b/drivers/virt/coco/tdx-guest/tdx-guest.c
> index d0303e31e816..f47c5429d002 100644
> --- a/drivers/virt/coco/tdx-guest/tdx-guest.c
> +++ b/drivers/virt/coco/tdx-guest/tdx-guest.c
> @@ -170,7 +170,7 @@ static void tdx_mr_deinit(const struct attribute_group *mr_grp)
> #define GET_QUOTE_SUCCESS 0
> #define GET_QUOTE_IN_FLIGHT 0xffffffffffffffff
>
> -#define TDX_QUOTE_MAX_LEN (GET_QUOTE_BUF_SIZE - sizeof(struct tdx_quote_buf))
> +#define TDX_QUOTE_BUF_LEN(n) struct_size_t(struct tdx_quote_buf, data, n)
>
> /* struct tdx_quote_buf: Format of Quote request buffer.
> * @version: Quote format version, filled by TD.
> @@ -315,7 +315,7 @@ static int tdx_report_new_locked(struct tsm_report *report, void *data)
>
> out_len = READ_ONCE(quote_buf->out_len);
>
> - if (out_len > TDX_QUOTE_MAX_LEN)
> + if (TDX_QUOTE_BUF_LEN(out_len) > GET_QUOTE_BUF_SIZE)
> return -EFBIG;
>
> buf = kvmemdup(quote_buf->data, out_len, GFP_KERNEL);

--
Sathyanarayanan Kuppuswamy
Linux Kernel Developer