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