Signed-off-by: Khem Raj <[email protected]>
---
 .../libldb/libldb/c23_memset_explicit.patch   | 248 ++++++++++++++++++
 .../recipes-support/libldb/libldb_2.8.2.bb    |   1 +
 2 files changed, 249 insertions(+)
 create mode 100644 
meta-networking/recipes-support/libldb/libldb/c23_memset_explicit.patch

diff --git 
a/meta-networking/recipes-support/libldb/libldb/c23_memset_explicit.patch 
b/meta-networking/recipes-support/libldb/libldb/c23_memset_explicit.patch
new file mode 100644
index 0000000000..bd817d8cf5
--- /dev/null
+++ b/meta-networking/recipes-support/libldb/libldb/c23_memset_explicit.patch
@@ -0,0 +1,248 @@
+C23 introduced memset_explicit with the same parameters as
+memset (3 args). New glibc implements it, so the symbol now
+exists in the global namespace with that prototype, causing
+“too many arguments” when your code passes 4 args.
+
+Provide a compatibility macro to address the problem
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <[email protected]>
+--- a/lib/replace/replace.c
++++ b/lib/replace/replace.c
+@@ -1,4 +1,4 @@
+-/*
++/*
+    Unix SMB/CIFS implementation.
+    replacement routines for broken systems
+    Copyright (C) Andrew Tridgell 1992-1998
+@@ -8,7 +8,7 @@
+      ** NOTE! The following LGPL license applies to the replace
+      ** library. This does NOT imply that all of Samba is released
+      ** under the LGPL
+-
++
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+@@ -44,6 +44,18 @@
+ void replace_dummy(void);
+ void replace_dummy(void) {}
+
++#if defined(HAVE_MEMSET_EXPLICIT)
++#  define LDB_MEMSET_EXPLICIT(dest, destsz, ch, n) 
memset_explicit((dest),(ch),(n))
++#elif defined(HAVE_MEMSET_S)
++#  define LDB_MEMSET_EXPLICIT(dest, destsz, ch, n) 
memset_s((dest),(destsz),(ch),(n))
++#else
++#  define LDB_MEMSET_EXPLICIT(dest, destsz, ch, n) do { \
++        volatile unsigned char *p = (volatile unsigned char*)(dest); \
++        size_t _N = (n); unsigned char _CH = (unsigned char)(ch); \
++        for (size_t _i = 0; _i < _N; ++_i) p[_i] = _CH; \
++    } while (0)
++#endif
++
+ #ifndef HAVE_FTRUNCATE
+  /*******************************************************************
+ ftruncate for operating systems that don't have it
+@@ -91,7 +103,7 @@ size_t rep_strlcpy(char *d, const char *
+ #endif
+
+ #ifndef HAVE_STRLCAT
+-/* like strncat but does not 0 fill the buffer and always null
++/* like strncat but does not 0 fill the buffer and always null
+    terminates. bufsize is the length of the buffer, which should
+    be one more than the maximum resulting string length */
+ size_t rep_strlcat(char *d, const char *s, size_t bufsize)
+@@ -116,7 +128,7 @@ size_t rep_strlcat(char *d, const char *
+
+ #ifndef HAVE_MKTIME
+ /*******************************************************************
+-a mktime() replacement for those who don't have it - contributed by
++a mktime() replacement for those who don't have it - contributed by
+ C.A. Lademann <[email protected]>
+ Corrections by [email protected]
+ ********************************************************************/
+@@ -137,7 +149,7 @@ time_t rep_mktime(struct tm *t)
+     return((time_t)-1);
+
+   n = t->tm_year + 1900 - 1;
+-  epoch = (t->tm_year - 70) * YEAR +
++  epoch = (t->tm_year - 70) * YEAR +
+     ((n / 4 - n / 100 + n / 400) - (1969 / 4 - 1969 / 100 + 1969 / 400)) * 
DAY;
+
+   y = t->tm_year + 1900;
+@@ -147,7 +159,7 @@ time_t rep_mktime(struct tm *t)
+     epoch += mon [m] * DAY;
+     if(m == 1 && y % 4 == 0 && (y % 100 != 0 || y % 400 == 0))
+       epoch += DAY;
+-
++
+     if(++m > 11) {
+       m = 0;
+       y++;
+@@ -156,7 +168,7 @@ time_t rep_mktime(struct tm *t)
+
+   epoch += (t->tm_mday - 1) * DAY;
+   epoch += t->tm_hour * HOUR + t->tm_min * MINUTE + t->tm_sec;
+-
++
+   if((u = localtime(&epoch)) != NULL) {
+     t->tm_sec = u->tm_sec;
+     t->tm_min = u->tm_min;
+@@ -176,7 +188,7 @@ time_t rep_mktime(struct tm *t)
+
+ #ifndef HAVE_INITGROUPS
+ /****************************************************************************
+- some systems don't have an initgroups call
++ some systems don't have an initgroups call
+ ****************************************************************************/
+ int rep_initgroups(char *name, gid_t id)
+ {
+@@ -194,7 +206,7 @@ int rep_initgroups(char *name, gid_t id)
+       int    i,j;
+       struct group *g;
+       char   *gr;
+-
++
+       if((grouplst = malloc(sizeof(gid_t) * max_gr)) == NULL) {
+               errno = ENOMEM;
+               return -1;
+@@ -250,9 +262,9 @@ void *rep_memmove(void *dest,const void
+
+       if (d < s) {
+               /* we can forward copy */
+-              if (s-d >= sizeof(int) &&
+-                  !(s%sizeof(int)) &&
+-                  !(d%sizeof(int)) &&
++              if (s-d >= sizeof(int) &&
++                  !(s%sizeof(int)) &&
++                  !(d%sizeof(int)) &&
+                   !(size%sizeof(int))) {
+                       /* do it all as words */
+                       int *idest = (int *)dest;
+@@ -267,9 +279,9 @@ void *rep_memmove(void *dest,const void
+               }
+       } else {
+               /* must backward copy */
+-              if (d-s >= sizeof(int) &&
+-                  !(s%sizeof(int)) &&
+-                  !(d%sizeof(int)) &&
++              if (d-s >= sizeof(int) &&
++                  !(s%sizeof(int)) &&
++                  !(d%sizeof(int)) &&
+                   !(size%sizeof(int))) {
+                       /* do it all as words */
+                       int *idest = (int *)dest;
+@@ -281,7 +293,7 @@ void *rep_memmove(void *dest,const void
+                       char *cdest = (char *)dest;
+                       char *csrc = (char *)src;
+                       for (i=size-1;i>=0;i--) cdest[i] = csrc[i];
+-              }
++              }
+       }
+       return(dest);
+ }
+@@ -334,16 +346,16 @@ void rep_vsyslog (int facility_priority,
+  size_t rep_strnlen(const char *s, size_t max)
+ {
+         size_t len;
+-
++
+         for (len = 0; len < max; len++) {
+                 if (s[len] == '\0') {
+                         break;
+                 }
+         }
+-        return len;
++        return len;
+ }
+ #endif
+-
++
+ #ifndef HAVE_STRNDUP
+ /**
+  Some platforms don't have strndup.
+@@ -351,7 +363,7 @@ void rep_vsyslog (int facility_priority,
+ char *rep_strndup(const char *s, size_t n)
+ {
+       char *ret;
+-
++
+       n = strnlen(s, n);
+       ret = malloc(n+1);
+       if (!ret)
+@@ -407,7 +419,7 @@ int rep_chroot(const char *dname)
+
+ /*****************************************************************
+  Possibly replace mkstemp if it is broken.
+-*****************************************************************/
++*****************************************************************/
+
+ #ifndef HAVE_SECURE_MKSTEMP
+ int rep_mkstemp(char *template)
+@@ -425,7 +437,7 @@ int rep_mkstemp(char *template)
+ char *rep_mkdtemp(char *template)
+ {
+       char *dname;
+-
++
+       if ((dname = mktemp(template))) {
+               if (mkdir(dname, 0700) >= 0) {
+                       return dname;
+@@ -532,7 +544,7 @@ long long int rep_strtoll(const char *st
+ {
+ #ifdef HAVE_STRTOQ
+       return strtoq(str, endptr, base);
+-#elif defined(HAVE___STRTOLL)
++#elif defined(HAVE___STRTOLL)
+       return __strtoll(str, endptr, base);
+ #elif SIZEOF_LONG == SIZEOF_LONG_LONG
+       return (long long int) strtol(str, endptr, base);
+@@ -568,7 +580,7 @@ unsigned long long int rep_strtoull(cons
+ {
+ #ifdef HAVE_STRTOUQ
+       return strtouq(str, endptr, base);
+-#elif defined(HAVE___STRTOULL)
++#elif defined(HAVE___STRTOULL)
+       return __strtoull(str, endptr, base);
+ #elif SIZEOF_LONG == SIZEOF_LONG_LONG
+       return (unsigned long long int) strtoul(str, endptr, base);
+@@ -599,7 +611,7 @@ unsigned long long int rep_strtoull(cons
+ #endif /* HAVE_STRTOULL */
+
+ #ifndef HAVE_SETENV
+-int rep_setenv(const char *name, const char *value, int overwrite)
++int rep_setenv(const char *name, const char *value, int overwrite)
+ {
+       char *p;
+       size_t l1, l2;
+@@ -644,10 +656,10 @@ int rep_unsetenv(const char *name)
+       for (i=0;environ[i];i++) /* noop */ ;
+
+       count=i;
+-
++
+       for (i=0;i<count;) {
+               if (strncmp(environ[i], name, len) == 0 && environ[i][len] == 
'=') {
+-                      /* note: we do _not_ free the old variable here. It is 
unsafe to
++                      /* note: we do _not_ free the old variable here. It is 
unsafe to
+                          do so, as the pointer may not have come from malloc 
*/
+                       memmove(&environ[i], &environ[i+1], 
(count-i)*sizeof(char *));
+                       count--;
+@@ -688,7 +700,7 @@ int rep_utimes(const char *filename, con
+ #endif
+
+ #ifndef HAVE_DUP2
+-int rep_dup2(int oldfd, int newfd)
++int rep_dup2(int oldfd, int newfd)
+ {
+       errno = ENOSYS;
+       return -1;
+@@ -970,7 +982,7 @@ int rep_memset_s(void *dest, size_t dest
+       }
+
+ #if defined(HAVE_MEMSET_EXPLICIT)
+-      memset_explicit(dest, destsz, ch, count);
++      LDB_MEMSET_EXPLICIT(dest, destsz, ch, count);
+ #else /* HAVE_MEMSET_EXPLICIT */
+       memset(dest, ch, count);
+ # if defined(HAVE_GCC_VOLATILE_MEMORY_PROTECTION)
diff --git a/meta-networking/recipes-support/libldb/libldb_2.8.2.bb 
b/meta-networking/recipes-support/libldb/libldb_2.8.2.bb
index 6038066169..016b649cd9 100644
--- a/meta-networking/recipes-support/libldb/libldb_2.8.2.bb
+++ b/meta-networking/recipes-support/libldb/libldb_2.8.2.bb
@@ -13,6 +13,7 @@ SRC_URI = "https://samba.org/ftp/ldb/ldb-${PV}.tar.gz \
            file://0001-do-not-import-target-module-while-cross-compile.patch \
            file://0002-ldb-Add-configure-options-for-packages.patch \
            file://0003-Fix-pyext_PATTERN-for-cross-compilation.patch \
+           file://c23_memset_explicit.patch \
            file://run-ptest \
           "

-=-=-=-=-=-=-=-=-=-=-=-
Links: You receive all messages sent to this group.
View/Reply Online (#121477): 
https://lists.openembedded.org/g/openembedded-devel/message/121477
Mute This Topic: https://lists.openembedded.org/mt/116234055/21656
Group Owner: [email protected]
Unsubscribe: https://lists.openembedded.org/g/openembedded-devel/unsub 
[[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-

Reply via email to