The branch, master has been updated
       via  78635d55fb8 audit_logging: Use `json_int_t` instead of `int` for 
`json_add_int` value type
       via  35aa7db6414 audit_logging:tests: Add big_int test for `json_add_int`
       via  b3146763a45 lib:util: prefer mallinfo2() over mallinfo() if 
available
      from  f55a357c6b9 dsgetdcname: do not assume local system uses IPv4

https://git.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 78635d55fb819d422d0c4c32bb63aab95f735e4b
Author: Li Yuxuan <liyuxuan.dar...@bytedance.com>
Date:   Thu Mar 9 11:11:28 2023 +0800

    audit_logging: Use `json_int_t` instead of `int` for `json_add_int` value 
type
    
    Functions like `add_lock_to_json` and `add_profile_item_to_json` pass
    some values to `json_add_int` with `intmax_t` types. This may cause
    arithmetic overflow when the value grows very fast, such as the
    read_bytes profiling data.
    Use `json_add_int` instead of `int` to avoid the overflow.
    
    RN: Make json output show intmax_t value properly
    
    Signed-off-by: Li Yuxuan <liyuxuan.dar...@bytedance.com>
    Reviewed-by: Douglas Bagnall <douglas.bagn...@catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abart...@samba.org>
    
    Autobuild-User(master): Andrew Bartlett <abart...@samba.org>
    Autobuild-Date(master): Thu Mar  9 21:33:43 UTC 2023 on atb-devel-224

commit 35aa7db641484b33ff55a7d8fe2d21c6b411f847
Author: Li Yuxuan <liyuxuan.dar...@bytedance.com>
Date:   Tue Mar 7 10:52:47 2023 +0800

    audit_logging:tests: Add big_int test for `json_add_int`
    
    Show that `json_add_int` can't handle value larger than int32 due to
    overflow.
    
    Add knownfail.
    
    Signed-off-by: Li Yuxuan <liyuxuan.dar...@bytedance.com>
    Reviewed-by: Douglas Bagnall <douglas.bagn...@catalyst.net.nz>
    Reviewed-by: Andrew Bartlett <abart...@samba.org>

commit b3146763a45d3a52ae1f669ad1b37155f67a16e6
Author: Dmitry Antipov <danti...@cloudlinux.com>
Date:   Tue Feb 7 18:09:15 2023 +0300

    lib:util: prefer mallinfo2() over mallinfo() if available
    
    Prefer mallinfo2() with 'size_t' fields over deprecated
    mallinfo() (with 'int' fields which may wrap around zero
    and so be inaccurate on a 64-bit system) and move relevant
    checks to lib/util/wscript_configure because mallinfo()
    is not used beyond 'samba-util'.
    
    Suggested-by: Andreas Schneider <a...@samba.org>
    Signed-off-by: Dmitry Antipov <danti...@cloudlinux.com>
    Reviewed-by: Volker Lendecke <v...@samba.org>
    Reviewed-by: Andrew Bartlett <abart...@samba.org>

-----------------------------------------------------------------------

Summary of changes:
 lib/audit_logging/audit_logging.c            | 14 +++++++-----
 lib/audit_logging/audit_logging.h            |  2 +-
 lib/audit_logging/tests/audit_logging_test.c | 11 +++++++++-
 lib/util/talloc_report_printf.c              | 33 ++++++++++++++++++++++++----
 lib/util/wscript_configure                   | 12 ++++++++++
 source3/wscript                              | 12 ----------
 6 files changed, 60 insertions(+), 24 deletions(-)


Changeset truncated at 500 lines:

diff --git a/lib/audit_logging/audit_logging.c 
b/lib/audit_logging/audit_logging.c
index 43acf9512c9..3ab14b2a187 100644
--- a/lib/audit_logging/audit_logging.c
+++ b/lib/audit_logging/audit_logging.c
@@ -385,31 +385,33 @@ bool json_is_invalid(const struct json_object *object)
  *        -1 the operation failed
  *
  */
-int json_add_int(struct json_object *object, const char *name, const int value)
+int json_add_int(struct json_object *object, const char *name, const 
json_int_t value)
 {
        int ret = 0;
        json_t *integer = NULL;
 
        if (json_is_invalid(object)) {
-               DBG_ERR("Unable to add int [%s] value [%d], "
+               DBG_ERR("Unable to add int [%s] value [%jd], "
                        "target object is invalid\n",
                        name,
-                       value);
+                       (intmax_t)value);
                return JSON_ERROR;
        }
 
        integer = json_integer(value);
        if (integer == NULL) {
-               DBG_ERR("Unable to create integer value [%s] value [%d]\n",
+               DBG_ERR("Unable to create integer value [%s] value [%jd]\n",
                        name,
-                       value);
+                       (intmax_t)value);
                return JSON_ERROR;
        }
 
        ret = json_object_set_new(object->root, name, integer);
        if (ret != 0) {
                json_decref(integer);
-               DBG_ERR("Unable to add int [%s] value [%d]\n", name, value);
+               DBG_ERR("Unable to add int [%s] value [%jd]\n",
+                       name,
+                       (intmax_t)value);
        }
        return ret;
 }
diff --git a/lib/audit_logging/audit_logging.h 
b/lib/audit_logging/audit_logging.h
index 49576ece68d..eb7c103944d 100644
--- a/lib/audit_logging/audit_logging.h
+++ b/lib/audit_logging/audit_logging.h
@@ -58,7 +58,7 @@ _WARN_UNUSED_RESULT_ bool json_is_invalid(const struct 
json_object *object);
 
 _WARN_UNUSED_RESULT_ int json_add_int(struct json_object *object,
                                      const char *name,
-                                     const int value);
+                                     const json_int_t value);
 _WARN_UNUSED_RESULT_ int json_add_bool(struct json_object *object,
                                       const char *name,
                                       const bool value);
diff --git a/lib/audit_logging/tests/audit_logging_test.c 
b/lib/audit_logging/tests/audit_logging_test.c
index 1f871c2e5f4..d393b986cf0 100644
--- a/lib/audit_logging/tests/audit_logging_test.c
+++ b/lib/audit_logging/tests/audit_logging_test.c
@@ -63,8 +63,10 @@ static void test_json_add_int(_UNUSED_ void **state)
 {
        struct json_object object;
        struct json_t *value = NULL;
+       json_int_t m;
        double n;
        int rc = 0;
+       intmax_t big_int = ((intmax_t)1)<<33;
 
        object = json_new_object();
        rc = json_add_int(&object, "positive_one", 1);
@@ -73,8 +75,10 @@ static void test_json_add_int(_UNUSED_ void **state)
        assert_int_equal(0, rc);
        rc = json_add_int(&object, "negative_one", -1);
        assert_int_equal(0, rc);
+       rc = json_add_int(&object, "big_int", big_int);
+       assert_int_equal(0, rc);
 
-       assert_int_equal(3, json_object_size(object.root));
+       assert_int_equal(4, json_object_size(object.root));
 
        value = json_object_get(object.root, "positive_one");
        assert_true(json_is_integer(value));
@@ -91,6 +95,11 @@ static void test_json_add_int(_UNUSED_ void **state)
        n = json_number_value(value);
        assert_true(n == -1.0);
 
+       value = json_object_get(object.root, "big_int");
+       assert_true(json_is_integer(value));
+       m = json_integer_value(value);
+       assert_int_equal(m, big_int);
+
        object.valid = false;
        rc = json_add_int(&object, "should fail 1", 0xf1);
        assert_int_equal(JSON_ERROR, rc);
diff --git a/lib/util/talloc_report_printf.c b/lib/util/talloc_report_printf.c
index cdf75b64913..3011c62536e 100644
--- a/lib/util/talloc_report_printf.c
+++ b/lib/util/talloc_report_printf.c
@@ -76,12 +76,37 @@ static void talloc_report_printf_helper(
 void talloc_full_report_printf(TALLOC_CTX *root, FILE *f)
 {
        talloc_report_depth_cb(root, 0, -1, talloc_report_printf_helper, f);
+#if defined(HAVE_MALLINFO2)
+       {
+               struct mallinfo2 mi2 = mallinfo2();
 
-#ifdef HAVE_MALLINFO
+               fprintf(f,
+                       "mallinfo:\n"
+                       "    arena: %zu\n"
+                       "    ordblks: %zu\n"
+                       "    smblks: %zu\n"
+                       "    hblks: %zu\n"
+                       "    hblkhd: %zu\n"
+                       "    usmblks: %zu\n"
+                       "    fsmblks: %zu\n"
+                       "    uordblks: %zu\n"
+                       "    fordblks: %zu\n"
+                       "    keepcost: %zu\n",
+                       mi2.arena,
+                       mi2.ordblks,
+                       mi2.smblks,
+                       mi2.hblks,
+                       mi2.hblkhd,
+                       mi2.usmblks,
+                       mi2.fsmblks,
+                       mi2.uordblks,
+                       mi2.fordblks,
+                       mi2.keepcost);
+       }
+#elif defined(HAVE_MALLINFO)
        {
-               struct mallinfo mi;
+               struct mallinfo mi = mallinfo();
 
-               mi = mallinfo();
                fprintf(f,
                        "mallinfo:\n"
                        "    arena: %d\n"
@@ -105,5 +130,5 @@ void talloc_full_report_printf(TALLOC_CTX *root, FILE *f)
                        mi.fordblks,
                        mi.keepcost);
        }
-#endif /* HAVE_MALLINFO */
+#endif /* HAVE_MALLINFO2 or HAVE_MALLINFO */
 }
diff --git a/lib/util/wscript_configure b/lib/util/wscript_configure
index fbaeb095dd4..27206e0e85a 100644
--- a/lib/util/wscript_configure
+++ b/lib/util/wscript_configure
@@ -122,6 +122,18 @@ conf.CHECK_CODE('struct statvfs buf; buf.f_flags = 0',
                 local_include=False,
                 execute=False)
 
+# Check for mallinfo2() first and fallback to mallinfo() if not found
+body = '''mi.arena + mi.ordblks + mi.smblks + mi.hblks + mi.hblkhd +
+    mi.usmblks + mi.fsmblks +  mi.uordblks + mi.fordblks + mi.keepcost'''
+if not conf.CHECK_CODE('''struct mallinfo2 mi = mallinfo2(); return %s;'''
+                       % body, 'HAVE_MALLINFO2',
+                       msg="Checking for mallinfo2()",
+                       headers='malloc.h'):
+    conf.CHECK_CODE('''struct mallinfo mi = mallinfo(); return %s;'''
+                    % body, 'HAVE_MALLINFO',
+                    msg="Checking for mallinfo()",
+                    headers='malloc.h')
+
 #
 # systemd removed the libsystemd-daemon and libsystemd-journal libraries. In 
newer
 # versions it is only libsystemd. As waf pkg-config handling does not provide
diff --git a/source3/wscript b/source3/wscript
index 58c7e2aecaf..ebaa29c779b 100644
--- a/source3/wscript
+++ b/source3/wscript
@@ -1649,18 +1649,6 @@ int main(void) {
                     define='HAVE_UNSHARE_CLONE_FS',
                     msg='for Linux unshare(CLONE_FS)')
 
-    # Check for mallinfo
-    conf.CHECK_CODE('''
-    struct mallinfo mi;
-    int tmp;
-
-    mi = mallinfo();
-    tmp = mi.arena + mi.ordblks + mi.smblks + mi.hblks +
-          mi.hblkhd + mi.usmblks + mi.fsmblks +  mi.uordblks +
-          mi.fordblks + mi.keepcost;
-    return tmp;
-    ''', 'HAVE_MALLINFO', msg="Checking for mallinfo()", headers='malloc.h')
-
     #
     # cluster support (CTDB)
     #


-- 
Samba Shared Repository

Reply via email to