51 lines
1.6 KiB
Diff
51 lines
1.6 KiB
Diff
From da9bdf36c357826f4dd25cf1121dfdbba3ed1dd2 Mon Sep 17 00:00:00 2001
|
|
From: Stefan Metzmacher <metze@samba.org>
|
|
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 <metze@samba.org>
|
|
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
|
|
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
|
|
|
|
(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
|