From da9bdf36c357826f4dd25cf1121dfdbba3ed1dd2 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Thu, 16 Mar 2023 09:57:43 +0100 Subject: [PATCH 14/28] CVE-2023-4154 replace: add ARRAY_INSERT_ELEMENT() helper BUG: https://bugzilla.samba.org/show_bug.cgi?id=15424 Signed-off-by: Stefan Metzmacher Reviewed-by: Andrew Bartlett Reviewed-by: Douglas Bagnall (cherry picked from commit 9d8ff0d1e0b2ba7c84af36e1931f5bc99902a44b) Conflict: NA Reference: https://download.samba.org/pub/samba/patches/security/samba-4.18.8-security-2023-10-10.patch [PATCH 14/28] CVE-2023-4154 replace: add ARRAY_INSERT_ELEMENT() helper --- lib/replace/replace.h | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/lib/replace/replace.h b/lib/replace/replace.h index b15f3d14c8a..25e6e145eeb 100644 --- a/lib/replace/replace.h +++ b/lib/replace/replace.h @@ -885,6 +885,21 @@ typedef unsigned long long ptrdiff_t ; #define ARRAY_DEL_ELEMENT(a,i,n) \ if((i)<((n)-1)){memmove(&((a)[(i)]),&((a)[(i)+1]),(sizeof(*(a))*((n)-(i)-1)));} +/** + * Insert an array element by moving the rest one up + * + */ +#define ARRAY_INSERT_ELEMENT(__array,__old_last_idx,__new_elem,__new_idx) do { \ + if ((__new_idx) < (__old_last_idx)) { \ + const void *__src = &((__array)[(__new_idx)]); \ + void *__dst = &((__array)[(__new_idx)+1]); \ + size_t __num = (__old_last_idx)-(__new_idx); \ + size_t __len = sizeof(*(__array)) * __num; \ + memmove(__dst, __src, __len); \ + } \ + (__array)[(__new_idx)] = (__new_elem); \ +} while(0) + /** * Pointer difference macro */ -- 2.34.1