From 664eb193432e01dae3c26c083f745d16f0fd5c3d Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 29 Aug 2024 13:26:04 +0200 Subject: [PATCH] librpc/ndr: avoid alignment allocation in ndr_push_DATA_BLOB() Pair-Programmed-With: Volker Lendecke Signed-off-by: Stefan Metzmacher Signed-off-by: Volker Lendecke Reviewed-by: Volker Lendecke --- librpc/ndr/ndr_basic.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/librpc/ndr/ndr_basic.c b/librpc/ndr/ndr_basic.c index 5fd15730a74..8b4b85b9c81 100644 --- a/librpc/ndr/ndr_basic.c +++ b/librpc/ndr/ndr_basic.c @@ -1404,18 +1404,23 @@ _PUBLIC_ void ndr_print_DATA_BLOB(struct ndr_print *ndr, const char *name, DATA_ */ _PUBLIC_ enum ndr_err_code ndr_push_DATA_BLOB(struct ndr_push *ndr, ndr_flags_type ndr_flags, DATA_BLOB blob) { + static const uint8_t padding[8] = { 0, }; + if (ndr->flags & LIBNDR_FLAG_REMAINING) { /* nothing to do */ } else if (ndr->flags & (LIBNDR_ALIGN_FLAGS & ~LIBNDR_FLAG_NOALIGN)) { + blob.data = discard_const_p(uint8_t, padding); if (ndr->flags & LIBNDR_FLAG_ALIGN2) { blob.length = NDR_ALIGN(ndr, 2); } else if (ndr->flags & LIBNDR_FLAG_ALIGN4) { blob.length = NDR_ALIGN(ndr, 4); } else if (ndr->flags & LIBNDR_FLAG_ALIGN8) { blob.length = NDR_ALIGN(ndr, 8); + } else { + return ndr_push_error(ndr, + NDR_ERR_LENGTH, + "Invalid align flags"); } - NDR_PUSH_ALLOC_SIZE(ndr, blob.data, blob.length); - data_blob_clear(&blob); } else { NDR_CHECK(ndr_push_uint3264(ndr, NDR_SCALARS, blob.length)); } -- 2.47.3