From patchwork Mon Sep 8 21:06:55 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Khem Raj X-Patchwork-Id: 69828 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 501BFCA1016 for ; Mon, 8 Sep 2025 21:07:09 +0000 (UTC) Received: from mail-pf1-f169.google.com (mail-pf1-f169.google.com [209.85.210.169]) by mx.groups.io with SMTP id smtpd.web11.6070.1757365621307148049 for ; Mon, 08 Sep 2025 14:07:01 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20230601 header.b=Wdd5LyXO; spf=pass (domain: gmail.com, ip: 209.85.210.169, mailfrom: raj.khem@gmail.com) Received: by mail-pf1-f169.google.com with SMTP id d2e1a72fcca58-7728a8862ccso4223620b3a.0 for ; Mon, 08 Sep 2025 14:07:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757365620; x=1757970420; darn=lists.openembedded.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=xckOJbFvSE2ki7Rge8e8Es1yX0IOnDyQhSkvTlTit0Y=; b=Wdd5LyXOFHQ/uuCrixiF/pRIZC1MHpGwTJPD5XBNv72PK9wnOMLS2+IEaOHuajTbA8 Uu7xaCgCs1wFFQCk2ReXBluiZZbHLC8n4N4pbbvVCimkT4iRE/ZY/5kONKsFveDlztlz RCir99HFoS13Num+bOxxhGPwT6QWPGns9EIPy5N2SVM1cI6a4HKM0c2H7vJ3Uz5BcNoJ a0wMvwHgh9YlF0DxoThP5csgJ9UB6QeVe7R+8P1bFo69TKD1Oq6CE5R84d4QUIK2NQie SxahtUbV9Lj7bWACKUOTdOT0lO88qz1sGHFxHiV1+/CjdCDNtaKhucrr2hOFrk0mR2EA f89A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757365620; x=1757970420; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=xckOJbFvSE2ki7Rge8e8Es1yX0IOnDyQhSkvTlTit0Y=; b=i7+UIwSdyE5AurhMlUMt+b9XdG25igCckwnHVdKLAWYuMVf+HFPcZOUlpdsA6LS5vW R7sbPANLQaFdqAMbjfqOqljg5HY81iKSLspA0yPBRqcpUO4LCsxlzYpEXoMX+cYALWja BPql3RDpChDl53QAQhpgKLIlgc5X4h99QmN3xgTWilC9D9tsYEURHwxxR555dOOtEZ8p cwplt7CGWdOsmNbwdmvDxDZ7lO2L3b7NRZGBKSlkJiP5vsI+WCtmvwA9meVC0x/B26MN zuAzgGskmqmL27pucDpp5gPg0Y6Glm1km+Tt3rx/Av185VvoUlmPh3VoZR0D/brMfxtY FI9Q== X-Gm-Message-State: AOJu0YyTApkAYm/zNt36ks1XND+TcDBAdXBKjRo7DrnWZKEVeLzp/nfo 81GbrA2p2U0du1BAFM4l2Es4xkxTOcyFVOIbbsM4L5eN8S15UFnQRSuncOxMhUCj X-Gm-Gg: ASbGnctupbbvidqwnZONr/oZsCzRYyFOuyI8kwn2INrn5UZtKUfg1JnTVytV+XWkSVl kk3HMsI0C01CWhRJcWcwlY6rMgLSKJJjosXIe/Xf18wIB9Ni2Y1nAxlZ4+IEq8TDvhVKgIiQQ3g fw+H7LtZtKDeL2DubM0hL2CdQdoLD3O4Es1D7xKMF5gf89eeNGJ6rZOlvsfYPLM5Z5wIE70zGbz nlwWPpdUS2sra96JnS4Mk0kGJfuGixXZTrJe/Wj8Kxc9xLHjUDmursDTP+/qa6XK2/hmrowg1D7 37ClJWjAGPf67ElrzXoO+TAiZoAGXIN++GZiBLyjrktTriUrGLLAIWivVnyT+3oHsuUNlCvsPN9 LW/QmGSet4bdOq1UZ7zZ33x6zdOC/bapwqZLNfG8+T9B2r40fvy1bb/DxGeVX7t7HZjdbBvZdI5 zqrn+XB6rr4fupmGEyhF2k4IJ3O3Ew6R+jkti06LSP X-Google-Smtp-Source: AGHT+IFpXVhqCrbZFvCgUIQ7uXtXMNpy0oZDCw5zh2rIwAhTw+d26KPXt0Q1k3iW0+Hv04QVLgJweQ== X-Received: by 2002:a05:6a20:7291:b0:243:78a:82d1 with SMTP id adf61e73a8af0-2537ef037afmr13117075637.30.1757365619972; Mon, 08 Sep 2025 14:06:59 -0700 (PDT) Received: from apollo.tail3ccdd3.ts.net ([2601:646:8201:fd20::fe29]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-32bdbef7f2csm9982888a91.27.2025.09.08.14.06.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Sep 2025 14:06:59 -0700 (PDT) From: Khem Raj To: openembedded-core@lists.openembedded.org Cc: Khem Raj Subject: [PATCH v4 1/3] kea: Fix build with clang/libc++ 21 Date: Mon, 8 Sep 2025 14:06:55 -0700 Message-ID: <20250908210657.2959408-1-raj.khem@gmail.com> X-Mailer: git-send-email 2.51.0 MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Mon, 08 Sep 2025 21:07:09 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/223080 Clang with libc++ hardening on, rejects Boost’s enum trait probe which is ill-formed for scoped/limited enums whose valid range does not include −1 (e.g. enums with values [0..3]) Signed-off-by: Khem Raj --- v3: No change v4: No change ...s-dhcpsrv-Avoid-Boost-lexical_cast-o.patch | 348 ++++++++++++++++++ meta/recipes-connectivity/kea/kea_3.0.1.bb | 1 + 2 files changed, 349 insertions(+) create mode 100644 meta/recipes-connectivity/kea/files/0001-d2-dhcp-46-radius-dhcpsrv-Avoid-Boost-lexical_cast-o.patch diff --git a/meta/recipes-connectivity/kea/files/0001-d2-dhcp-46-radius-dhcpsrv-Avoid-Boost-lexical_cast-o.patch b/meta/recipes-connectivity/kea/files/0001-d2-dhcp-46-radius-dhcpsrv-Avoid-Boost-lexical_cast-o.patch new file mode 100644 index 00000000000..6facc4d32d7 --- /dev/null +++ b/meta/recipes-connectivity/kea/files/0001-d2-dhcp-46-radius-dhcpsrv-Avoid-Boost-lexical_cast-o.patch @@ -0,0 +1,348 @@ +From e3a0d181a279334c7d7a10c5b09fd1610384101c Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Wed, 3 Sep 2025 12:52:51 -0700 +Subject: [PATCH] d2/dhcp[46]/radius/dhcpsrv: Avoid Boost lexical_cast on enums +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Clang with libc++ hardening (-D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST) +rejects Boost's enum trait probe used by `boost::lexical_cast`: +`boost::type_traits::is_signed/is_unsigned` defines +`static const T minus_one = (T)-1;`, which is ill-formed for scoped/limited +enums whose valid range does not include −1 (e.g. enums with values [0..3]). +When an enum is passed to `lexical_cast`, this triggers errors like: + + error: in-class initializer for static data member is not a constant expression + ... minus_one = (static_cast(-1)); + +In Kea this surfaced via logging `.arg(enum_value)` and when writing +`Lease6::type_` to CSV. + +This change makes all such call sites avoid `lexical_cast` on enums: + +* d2 transactions (`check_exists_*`, `nc_*`, `simple_*`): + cast `getDnsUpdateStatus()` to `int` before passing to `.arg(...)`. + +* d2 queue manager (`d2_queue_mgr.cc`): + cast `mgr_state_` to `int` before logging. + +* DHCPv4/6 servers (`dhcp4_srv.cc`, `dhcp6_srv.cc`): + cast `dhcp_ddns::NameChangeSender::Result` to `int` before logging. + +* RADIUS hook (`radius_accounting.cc`): + cast `env.event_` to `int` for the numeric field; we still log the textual + form via `eventToText(event_)` in the next argument. + +* DHCPv6 CSV writer (`csv_lease_file6.cc`): + write `lease_type` using `isc::dhcp::Lease::typeToText(lease.type_)` + instead of passing the enum directly. This is human-readable and uses Kea’s + own canonical stringifier, while avoiding the Boost enum path entirely. + +why: + +- Prevents Boost from instantiating enum trait checks that cast −1 to an enum. +- Unblocks builds with recent Clang/libc++ hardening. +- Keeps log output stable (numeric codes retained) and improves CSV clarity + for lease type by using the provided textual converter. + +No functional/ABI changes; only formatting of certain log/CSV values. +If a downstream consumer expects a numeric `lease_type`, it can be adjusted +to parse the textual value or the change can be trivially flipped to +`static_cast(lease.type_)`. + +Upstream-Status: Submitted [https://gitlab.isc.org/isc-projects/kea/-/issues/4100] +Signed-off-by: Khem Raj +--- + src/bin/d2/check_exists_add.cc | 6 +++--- + src/bin/d2/check_exists_remove.cc | 6 +++--- + src/bin/d2/d2_queue_mgr.cc | 2 +- + src/bin/d2/nc_add.cc | 6 +++--- + src/bin/d2/nc_remove.cc | 6 +++--- + src/bin/d2/simple_add.cc | 4 ++-- + src/bin/d2/simple_add_without_dhcid.cc | 4 ++-- + src/bin/d2/simple_remove.cc | 4 ++-- + src/bin/d2/simple_remove_without_dhcid.cc | 4 ++-- + src/bin/dhcp4/dhcp4_srv.cc | 2 +- + src/bin/dhcp6/dhcp6_srv.cc | 2 +- + src/hooks/dhcp/radius/radius_accounting.cc | 2 +- + src/lib/dhcpsrv/csv_lease_file6.cc | 2 +- + 13 files changed, 25 insertions(+), 25 deletions(-) + +diff --git a/src/bin/d2/check_exists_add.cc b/src/bin/d2/check_exists_add.cc +index 11bb29f..edfef31 100644 +--- a/src/bin/d2/check_exists_add.cc ++++ b/src/bin/d2/check_exists_add.cc +@@ -270,7 +270,7 @@ CheckExistsAddTransaction::addingFwdAddrsHandler() { + // bigger is wrong. + LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_ADD_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +@@ -397,7 +397,7 @@ CheckExistsAddTransaction::replacingFwdAddrsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_FORWARD_REPLACE_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +@@ -541,7 +541,7 @@ CheckExistsAddTransaction::replacingRevPtrsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_REVERSE_REPLACE_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +diff --git a/src/bin/d2/check_exists_remove.cc b/src/bin/d2/check_exists_remove.cc +index 8ae5296..8b6b221 100644 +--- a/src/bin/d2/check_exists_remove.cc ++++ b/src/bin/d2/check_exists_remove.cc +@@ -268,7 +268,7 @@ CheckExistsRemoveTransaction::removingFwdAddrsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_FORWARD_REMOVE_ADDRS_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +@@ -404,7 +404,7 @@ CheckExistsRemoveTransaction::removingFwdRRsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_FORWARD_REMOVE_RRS_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +@@ -556,7 +556,7 @@ CheckExistsRemoveTransaction::removingRevPtrsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_REVERSE_REMOVE_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +diff --git a/src/bin/d2/d2_queue_mgr.cc b/src/bin/d2/d2_queue_mgr.cc +index f902b22..effa56b 100644 +--- a/src/bin/d2/d2_queue_mgr.cc ++++ b/src/bin/d2/d2_queue_mgr.cc +@@ -78,7 +78,7 @@ D2QueueMgr::operator()(const dhcp_ddns::NameChangeListener::Result result, + // this is unexpected so we will treat it as a receive error. + // This is most likely an unforeseen programmatic issue. + LOG_ERROR(dhcp_to_d2_logger, DHCP_DDNS_QUEUE_MGR_UNEXPECTED_STOP) +- .arg(mgr_state_); ++ .arg(static_cast(mgr_state_)); + stopListening(STOPPED_RECV_ERROR); + } + +diff --git a/src/bin/d2/nc_add.cc b/src/bin/d2/nc_add.cc +index 7bffc16..1d17bb2 100644 +--- a/src/bin/d2/nc_add.cc ++++ b/src/bin/d2/nc_add.cc +@@ -272,7 +272,7 @@ NameAddTransaction::addingFwdAddrsHandler() { + // bigger is wrong. + LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_ADD_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +@@ -399,7 +399,7 @@ NameAddTransaction::replacingFwdAddrsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_FORWARD_REPLACE_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +@@ -542,7 +542,7 @@ NameAddTransaction::replacingRevPtrsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_REVERSE_REPLACE_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +diff --git a/src/bin/d2/nc_remove.cc b/src/bin/d2/nc_remove.cc +index 874e43b..182343c 100644 +--- a/src/bin/d2/nc_remove.cc ++++ b/src/bin/d2/nc_remove.cc +@@ -268,7 +268,7 @@ NameRemoveTransaction::removingFwdAddrsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_FORWARD_REMOVE_ADDRS_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +@@ -404,7 +404,7 @@ NameRemoveTransaction::removingFwdRRsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_FORWARD_REMOVE_RRS_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +@@ -555,7 +555,7 @@ NameRemoveTransaction::removingRevPtrsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_REVERSE_REMOVE_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +diff --git a/src/bin/d2/simple_add.cc b/src/bin/d2/simple_add.cc +index 6113b4d..73aa5b4 100644 +--- a/src/bin/d2/simple_add.cc ++++ b/src/bin/d2/simple_add.cc +@@ -259,7 +259,7 @@ SimpleAddTransaction::replacingFwdAddrsHandler() { + // bigger is wrong. + LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_ADD_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +@@ -404,7 +404,7 @@ SimpleAddTransaction::replacingRevPtrsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_REVERSE_REPLACE_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +diff --git a/src/bin/d2/simple_add_without_dhcid.cc b/src/bin/d2/simple_add_without_dhcid.cc +index ccea83a..97918ad 100644 +--- a/src/bin/d2/simple_add_without_dhcid.cc ++++ b/src/bin/d2/simple_add_without_dhcid.cc +@@ -260,7 +260,7 @@ SimpleAddWithoutDHCIDTransaction::replacingFwdAddrsHandler() { + // bigger is wrong. + LOG_ERROR(d2_to_dns_logger, DHCP_DDNS_FORWARD_ADD_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +@@ -406,7 +406,7 @@ SimpleAddWithoutDHCIDTransaction::replacingRevPtrsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_REVERSE_REPLACE_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +diff --git a/src/bin/d2/simple_remove.cc b/src/bin/d2/simple_remove.cc +index e1d9a78..14f416b 100644 +--- a/src/bin/d2/simple_remove.cc ++++ b/src/bin/d2/simple_remove.cc +@@ -272,7 +272,7 @@ SimpleRemoveTransaction::removingFwdRRsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_FORWARD_REMOVE_RRS_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +@@ -423,7 +423,7 @@ SimpleRemoveTransaction::removingRevPtrsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_REVERSE_REMOVE_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +diff --git a/src/bin/d2/simple_remove_without_dhcid.cc b/src/bin/d2/simple_remove_without_dhcid.cc +index 04fe4df..cefdda8 100644 +--- a/src/bin/d2/simple_remove_without_dhcid.cc ++++ b/src/bin/d2/simple_remove_without_dhcid.cc +@@ -273,7 +273,7 @@ SimpleRemoveWithoutDHCIDTransaction::removingFwdRRsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_FORWARD_REMOVE_RRS_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +@@ -425,7 +425,7 @@ SimpleRemoveWithoutDHCIDTransaction::removingRevPtrsHandler() { + LOG_ERROR(d2_to_dns_logger, + DHCP_DDNS_REVERSE_REMOVE_BAD_DNSCLIENT_STATUS) + .arg(getRequestId()) +- .arg(getDnsUpdateStatus()) ++ .arg(static_cast(getDnsUpdateStatus())) + .arg(getNcr()->getFqdn()) + .arg(getCurrentServer()->toText()); + +diff --git a/src/bin/dhcp4/dhcp4_srv.cc b/src/bin/dhcp4/dhcp4_srv.cc +index 0701ed4..471e94c 100644 +--- a/src/bin/dhcp4/dhcp4_srv.cc ++++ b/src/bin/dhcp4/dhcp4_srv.cc +@@ -5101,7 +5101,7 @@ Dhcpv4Srv::d2ClientErrorHandler(const + dhcp_ddns::NameChangeSender::Result result, + dhcp_ddns::NameChangeRequestPtr& ncr) { + LOG_ERROR(ddns4_logger, DHCP4_DDNS_REQUEST_SEND_FAILED). +- arg(result).arg((ncr ? ncr->toText() : " NULL ")); ++ arg(static_cast(result)).arg((ncr ? ncr->toText() : " NULL ")); + // We cannot communicate with kea-dhcp-ddns, suspend further updates. + /// @todo We may wish to revisit this, but for now we will simply turn + /// them off. +diff --git a/src/bin/dhcp6/dhcp6_srv.cc b/src/bin/dhcp6/dhcp6_srv.cc +index 417960b..818046d 100644 +--- a/src/bin/dhcp6/dhcp6_srv.cc ++++ b/src/bin/dhcp6/dhcp6_srv.cc +@@ -5054,7 +5054,7 @@ Dhcpv6Srv::d2ClientErrorHandler(const + dhcp_ddns::NameChangeSender::Result result, + dhcp_ddns::NameChangeRequestPtr& ncr) { + LOG_ERROR(ddns6_logger, DHCP6_DDNS_REQUEST_SEND_FAILED). +- arg(result).arg((ncr ? ncr->toText() : " NULL ")); ++ arg(static_cast(result)).arg((ncr ? ncr->toText() : " NULL ")); + // We cannot communicate with kea-dhcp-ddns, suspend further updates. + /// @todo We may wish to revisit this, but for now we will simply turn + /// them off. +diff --git a/src/hooks/dhcp/radius/radius_accounting.cc b/src/hooks/dhcp/radius/radius_accounting.cc +index 30eb07e..31f6d5e 100644 +--- a/src/hooks/dhcp/radius/radius_accounting.cc ++++ b/src/hooks/dhcp/radius/radius_accounting.cc +@@ -760,7 +760,7 @@ RadiusAccounting::terminate(RadiusAcctEnv env, int result) { + if (result != OK_RC) { + LOG_ERROR(radius_logger, RADIUS_ACCOUNTING_ERROR) + .arg(env.session_id_) +- .arg(env.event_) ++ .arg(static_cast(env.event_)) + .arg(eventToText(env.event_)) + .arg(result) + .arg(exchangeRCtoText(result)); +diff --git a/src/lib/dhcpsrv/csv_lease_file6.cc b/src/lib/dhcpsrv/csv_lease_file6.cc +index 830d2e5..a899aef 100644 +--- a/src/lib/dhcpsrv/csv_lease_file6.cc ++++ b/src/lib/dhcpsrv/csv_lease_file6.cc +@@ -51,7 +51,7 @@ CSVLeaseFile6::append(const Lease6& lease) { + row.writeAt(getColumnIndex("expire"), static_cast(lease.cltt_) + lease.valid_lft_); + row.writeAt(getColumnIndex("subnet_id"), lease.subnet_id_); + row.writeAt(getColumnIndex("pref_lifetime"), lease.preferred_lft_); +- row.writeAt(getColumnIndex("lease_type"), lease.type_); ++ row.writeAt(getColumnIndex("lease_type"), isc::dhcp::Lease::typeToText(lease.type_)); + row.writeAt(getColumnIndex("iaid"), lease.iaid_); + row.writeAt(getColumnIndex("prefix_len"), + static_cast(lease.prefixlen_)); diff --git a/meta/recipes-connectivity/kea/kea_3.0.1.bb b/meta/recipes-connectivity/kea/kea_3.0.1.bb index 8dc6bdfea80..cc34c05093a 100644 --- a/meta/recipes-connectivity/kea/kea_3.0.1.bb +++ b/meta/recipes-connectivity/kea/kea_3.0.1.bb @@ -20,6 +20,7 @@ SRC_URI = "http://ftp.isc.org/isc/kea/${PV}/${BP}.tar.xz \ file://0001-build-boost-1.89.0-fixes.patch \ file://0001-meson-use-a-runtime-safe-interpreter-string.patch \ file://0001-mk_cfgrpt.sh-strip-prefixes.patch \ + file://0001-d2-dhcp-46-radius-dhcpsrv-Avoid-Boost-lexical_cast-o.patch \ " SRC_URI[sha256sum] = "ec84fec4bb7f6b9d15a82e755a571e9348eb4d6fbc62bb3f6f1296cd7a24c566" From patchwork Mon Sep 8 21:06:56 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Khem Raj X-Patchwork-Id: 69826 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 51080CAC587 for ; Mon, 8 Sep 2025 21:07:09 +0000 (UTC) Received: from mail-pg1-f169.google.com (mail-pg1-f169.google.com [209.85.215.169]) by mx.groups.io with SMTP id smtpd.web10.5887.1757365621838319733 for ; Mon, 08 Sep 2025 14:07:01 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20230601 header.b=h1wxAy1p; spf=pass (domain: gmail.com, ip: 209.85.215.169, mailfrom: raj.khem@gmail.com) Received: by mail-pg1-f169.google.com with SMTP id 41be03b00d2f7-b4f9d61e7deso3096486a12.2 for ; Mon, 08 Sep 2025 14:07:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757365621; x=1757970421; darn=lists.openembedded.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mOhPVyfLD3q+qavrJhiihpU7Nmw5iGVRTRd9fatKuXE=; b=h1wxAy1pGbOqX6/FxRAzb3MOabWGMfHPNR1BLLw6PL11u/OEbezf+0xYp5+3K0DtuA tXFYyY7tG74FqrY10RR/sOExq/5aKoddDPoOZXvzk6/SfAzQStEnaq+PdJTdhWPHuep0 uazOtobVYG309AlL+KnhD7Jd9RztWFM7GcbAiHZMAAzGN+pm2dwxGISaOy+J8VVwUs4p uhxfsZP20wxCf1bazRB/1ggNsDsx/1AB2VbpjzMH39D8gKiIKJ7/03wJ15AVWkaaCBrU aJmi7Pc9Tz90GEWMJzze8NXPS5agt/fJVmToyU6ZJW0+Pv0TEXAvw2wh5njKojBbyjH0 erpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757365621; x=1757970421; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mOhPVyfLD3q+qavrJhiihpU7Nmw5iGVRTRd9fatKuXE=; b=MoFLcO/SDAsBu4zayM2eRnPD8dwvjtH7XYeZy+L+hNvFPZyo7nM0+yGZt3KGdFkDFm wQazWQbdi+RJ9ykdJYk6IabFbLcD88s4G561Q7+4egCu7rFNbvLlAHdMfxhP93mWmvNw tT0Zx4VMtZGwndCVWlYVLVxFcygSx8o4QqKnK8i/VhXr+Ku8+iMm82Wt3bt3JaS1Eopk V4c0xffDfUwtnD2Fk1vaSmgjfZZZKtLc63sA1nintvaQevcANCpAODG4njIVqKSUV6A4 IKMkzFztT++yYlSIzBCV88gRODwZ8DX/821wR2ee1WBzUda10Y7L+ozvl3ChhoEmVjmg E7YQ== X-Gm-Message-State: AOJu0YwUGze0bIikLhTt5tfoFW+CYMY9Rvzw7XgQUcF8vMFYe1B91YZj cLMWJmwJdGw8RAeHetA5oHyKaadnF57RdTgeZPb16FAtATSqc1nx2464Ivj0BUSM X-Gm-Gg: ASbGncvzXsNuPlg+KYvsm2202sJy+3unaaI2avrf3uidpwQe5UCnCalBo1b3r9/psjL Wcg/DdYFAK99LNrerAPBPKFmf15B3y/rXGN9CB0GlaDUypSC6qtFgEBvleEBqC1W3gnc1orx/Un 7f1kYa5AgzCS4niNq7tOjBy1Vh1TXo5/0bby0HfMG3Q562tH25b2KE6QfItwFt/ztaQkCiBU2pH owGsOv2grTMBxYib8Pp2tD46X25T56haVQAZe0s7tPZ06kDyS6pKkzhkK5FyyjIp0n9LDbnxm7b wt7BKPP9MUndHPOY6p2yWnqJSHdGJKDYTIppeiuhD9P0l8RrbKRm9Y1QYv/kn3ZRIdALx2R9Y4s 5yDSSubrY9Sieht+j7QqyhDep22ClQaKtNzIbv900Dc/zRTi3uNlDxY18ffOjIUWE3G8UjB1yQy EsVoeahYFO9iEPT+krT/SSsW7yzbUyIR4d/ql8d3HF X-Google-Smtp-Source: AGHT+IFGRZnUdpivgPvz5pNVWfLu7KH+ml8HumYAIJchBA/XEWSLvE1UwJWpO1hRdGr53Sagumzd6w== X-Received: by 2002:a17:90b:3952:b0:32b:4c51:629d with SMTP id 98e67ed59e1d1-32d43f15003mr11846256a91.9.1757365620833; Mon, 08 Sep 2025 14:07:00 -0700 (PDT) Received: from apollo.tail3ccdd3.ts.net ([2601:646:8201:fd20::fe29]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-32bdbef7f2csm9982888a91.27.2025.09.08.14.07.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Sep 2025 14:07:00 -0700 (PDT) From: Khem Raj To: openembedded-core@lists.openembedded.org Cc: Khem Raj Subject: [PATCH V4 2/3] grub,grub-efi: Always use BFD linker with clang Date: Mon, 8 Sep 2025 14:06:56 -0700 Message-ID: <20250908210657.2959408-2-raj.khem@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250908210657.2959408-1-raj.khem@gmail.com> References: <20250908210657.2959408-1-raj.khem@gmail.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Mon, 08 Sep 2025 21:07:09 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/223081 LLD 21+ is erroring on text address being lower than the default segment address for binaries. Erroring during configure e.g. cannot link at address 0x2000 With LLD 21, -Ttext, only moves the .text section it does not change the image base and LLD 21 errors out if any section VMA is below the image base and the segment (image) base still defaults to 0x400000 when using LLD, hence the error LLD support in Grub needs to be done properly, it will need to adjust how linker options are constructed in configure. We default to use BFD linker always when using clang for now. Signed-off-by: Khem Raj --- v3: No change v4: No change meta/recipes-bsp/grub/grub2.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/meta/recipes-bsp/grub/grub2.inc b/meta/recipes-bsp/grub/grub2.inc index ffa04e415d3..dd1587acd6e 100644 --- a/meta/recipes-bsp/grub/grub2.inc +++ b/meta/recipes-bsp/grub/grub2.inc @@ -71,6 +71,7 @@ CFLAGS:remove = "-O2" # CFLAGS += -mno-mmx -mno-sse # So also remove -mfpmath=sse from TUNE_CCARGS TUNE_CCARGS:remove = "-mfpmath=sse" +TUNE_CCARGS:append:toolchain-clang = " -fuse-ld=bfd -Wno-error=unused-command-line-argument" EXTRA_OECONF = "--with-platform=${GRUBPLATFORM} \ --disable-grub-mkfont \ From patchwork Mon Sep 8 21:06:57 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Khem Raj X-Patchwork-Id: 69827 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4A12ACAC582 for ; Mon, 8 Sep 2025 21:07:09 +0000 (UTC) Received: from mail-pf1-f171.google.com (mail-pf1-f171.google.com [209.85.210.171]) by mx.groups.io with SMTP id smtpd.web11.6071.1757365623119362808 for ; Mon, 08 Sep 2025 14:07:03 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@gmail.com header.s=20230601 header.b=HjQIKSUN; spf=pass (domain: gmail.com, ip: 209.85.210.171, mailfrom: raj.khem@gmail.com) Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-77287fb79d3so3949934b3a.1 for ; Mon, 08 Sep 2025 14:07:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757365622; x=1757970422; darn=lists.openembedded.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pkOWJA48aarUO5caKwStLqTI0ZQbdGjMg07KZOLrFgI=; b=HjQIKSUNinvguJqe4MWnLoAt5xRoXLkkyBIF4xcIot2Bn/RujcNc8stNBm2AzrQM0o rJFWO4G9vWQbBznfJElNxVLLd7SBmT/In6Y58xiyVBMP1nfhy0mA0OTjHd0sYF4Rfxum hOAs+JogSvsQWG0SQyviLIgIqtF4+OFrO9wSjHgVKlqGID7lmK6B8QkmD9mFP0sYti9F 7x6dtNeYuiLffILm94SR+GgZF1V7gMvHetsMy4yXuaOFEKTuCugyVHmETVxOzUG+q7WY A4NPrwUzUT/XQTX4a8ogbasVObBCPIQ3e4rfdjI4f3bfxiopGakv4G6S/dtwOu5rfSxf jtUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757365622; x=1757970422; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pkOWJA48aarUO5caKwStLqTI0ZQbdGjMg07KZOLrFgI=; b=VVGcqWqjgA8yEwh5I88YVaPNDxuNAZJt4rc+uFYf3II5aGcH7lduA9PiBXGz0oaLqK /RIaVASXaKXkhfNZuArSL3BNg76YeXDdyQJlwPfUlsGFJO/5U4Xj9DZ/iJiP0he/pj7B dc5r4BtzGww6XB8xMU3IZgta9Bn3uGIVLrJf3i6Dq7u9UJW9cxRXU7qQBmNeQf35NR9V VlTehQe01+LVmt13Uk0k03Bna1UEb0X+0RDaI9xQW353LEI8TszzKrVr3McTMl+sbjiW ypuMnA7R7/LpopIy5x4JlM8wenffawDO4ZYyhBc29CESHkubR0hJRlrAzm4ho0eTr6kZ TkQQ== X-Gm-Message-State: AOJu0Yx7x/7d5x92rXFKl8mZ3nXiPNqfjnOxOGi00WMJL1KSVcTIfw6g cf3gBcDBjmSU/tUmNWZb5skadjfnh78juH2s1YZN1HfQqPUwN2Jy10+ZeqRT5RiD X-Gm-Gg: ASbGncvtDqGLAVT2PWR/H4+7flLvebHn675zye9UzO5UGys2/B2BFG4dX5UGJN/fv44 +dmctqxYyvGTtjcdHQW6AJqiofeqeQpkK23nBHI5dPcKhrUPiziIy24pIJ6or6UXenJNp1CPwzP 9kO90Fmv8PORdob8LoMrAf9EN0DxHbisuy0JY0vS0A8tXVrjtcKIq0U1nVxcFUmnicOZnhyLOX6 ZCzfvlFCHGxuNsEEzfbq2J4cyXUUmfgPN9Luh3SAWMnVul6mE+AgDlMlo7yO/DVOc3NXdW/NbLt lxJfAaqsgv92HyiuW3EPPFVLm7//c4Jpb4n0tAV60lIfyslclYHdWYybDbJdT/k4mjGuD2gp9n3 TTN9F2r3LZ8MfJIqscKKLSOs9hB2Ujb1HOsTh0CP+YwsjxIsjSTTjAf73SlIUgU358dCpOf+Z+r prTDCHZcpUCoMW7GT6P+84Vx6a9TVMLXrV3U1unDqnOQvRw1BJeFY= X-Google-Smtp-Source: AGHT+IGHaQYrLypJqRRoU42r2ij3hlREQbjsTboMC9+vCi+43jlldwt/4VjdEZS88/K8JhYiEk11rQ== X-Received: by 2002:a05:6a20:72a3:b0:243:c36f:6a71 with SMTP id adf61e73a8af0-2533d226078mr13862223637.21.1757365622040; Mon, 08 Sep 2025 14:07:02 -0700 (PDT) Received: from apollo.tail3ccdd3.ts.net ([2601:646:8201:fd20::fe29]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-32bdbef7f2csm9982888a91.27.2025.09.08.14.07.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Sep 2025 14:07:01 -0700 (PDT) From: Khem Raj To: openembedded-core@lists.openembedded.org Cc: Khem Raj Subject: [PATCH v4 3/3] kexec-tools: Fix build with LLD linker Date: Mon, 8 Sep 2025 14:06:57 -0700 Message-ID: <20250908210657.2959408-3-raj.khem@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20250908210657.2959408-1-raj.khem@gmail.com> References: <20250908210657.2959408-1-raj.khem@gmail.com> MIME-Version: 1.0 List-Id: X-Webhook-Received: from li982-79.members.linode.com [45.33.32.79] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Mon, 08 Sep 2025 21:07:09 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/openembedded-core/message/223082 With hardcoded -Ttext,0x10000 and newer toolchains emitting .note.gnu.property before .text, the link can fail with an overlap. Provide a minimal linker script that: - sets the image base to 0x10000, - places .text first at exactly 0x10000, - moves .note.gnu.property after .text, - optionally fixes .bss at 0x12000. Works with both ld.bfd and LLD 21+. Signed-off-by: Khem Raj --- v2: Update the Patch-Status to Submitted v3: No change v4: No change ...nt-base-match-pinned-section-address.patch | 62 +++++++++++++++++++ .../kexec/kexec-tools_2.0.31.bb | 1 + 2 files changed, 63 insertions(+) create mode 100644 meta/recipes-kernel/kexec/kexec-tools/0001-Make-the-segment-base-match-pinned-section-address.patch diff --git a/meta/recipes-kernel/kexec/kexec-tools/0001-Make-the-segment-base-match-pinned-section-address.patch b/meta/recipes-kernel/kexec/kexec-tools/0001-Make-the-segment-base-match-pinned-section-address.patch new file mode 100644 index 00000000000..6babf16e6ed --- /dev/null +++ b/meta/recipes-kernel/kexec/kexec-tools/0001-Make-the-segment-base-match-pinned-section-address.patch @@ -0,0 +1,62 @@ +From 0d8a9e12b6509cb2a79818f5f4062a0bee33edfc Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Wed, 3 Sep 2025 13:28:32 -0700 +Subject: [PATCH] Make the segment base match pinned section address + +ET_EXEC uses image base of 0x400000, but the build forces +section VMAs like .text = 0x10000. LLD now errors when any +section address is below the image base unless you explicitly +set the base. (Older LLD tolerated it.) + +To fix this, set the image base to match forced section addresses + +Fixes +| x86_64-yoe-linux-ld.lld: error: section '.text' address (0x10000) is smaller than image base (0x400000); specify --image-base +| x86_64-yoe-linux-ld.lld: error: section '.bss' address (0x12000) is smaller than image base (0x400000); specify --image-base + +Upstream-Status: Submitted [https://lists.infradead.org/pipermail/kexec/2025-September/033493.html] + +Signed-off-by: Khem Raj +--- + kexec_test/Makefile | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +--- a/kexec_test/Makefile ++++ b/kexec_test/Makefile +@@ -5,7 +5,7 @@ RELOC:=0x10000 + KEXEC_TEST_SRCS:= kexec_test/kexec_test16.S kexec_test/kexec_test.S + + dist += kexec_test/Makefile $(KEXEC_TEST_SRCS) \ +- kexec_test/x86-setup-legacy-pic.S ++ kexec_test/x86-setup-legacy-pic.S kexec_test/kexec_test.ld + + BUILD_KEXEC_TEST = no + ifeq ($(ARCH),i386) +@@ -31,7 +31,7 @@ $(KEXEC_TEST): CPPFLAGS+=-DRELOC=$(RELOC + $(KEXEC_TEST): ASFLAGS+=-m32 + #$(KEXEC_TEST): LDFLAGS=-m32 -Wl,-e -Wl,_start -Wl,-Ttext -Wl,$(RELOC) \ + # -nostartfiles +-$(KEXEC_TEST): LDFLAGS=-melf_i386 -e _start -Ttext $(RELOC) ++$(KEXEC_TEST): LDFLAGS=-melf_i386 -e _start -T $(srcdir)/kexec_test/kexec_test.ld + + $(KEXEC_TEST): $(KEXEC_TEST_OBJS) + mkdir -p $(@D) +--- /dev/null ++++ b/kexec_test/kexec_test.ld +@@ -0,0 +1,16 @@ ++ENTRY(_start) ++SECTIONS ++{ ++ . = 0x10000; ++ .text : { *(.text .text.*) } ++ ++ /* Place the note after .text to avoid overlap */ ++ . = ALIGN(16); ++ .note.gnu.property : { *(.note.gnu.property) } ++ ++ .rodata : { *(.rodata .rodata.*) } ++ ++ /* If you need bss fixed: */ ++ . = 0x12000; ++ .bss : { *(.bss .bss.* COMMON) } ++} diff --git a/meta/recipes-kernel/kexec/kexec-tools_2.0.31.bb b/meta/recipes-kernel/kexec/kexec-tools_2.0.31.bb index 7333aa73c17..b12f76a0bf4 100644 --- a/meta/recipes-kernel/kexec/kexec-tools_2.0.31.bb +++ b/meta/recipes-kernel/kexec/kexec-tools_2.0.31.bb @@ -19,6 +19,7 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/utils/kernel/kexec/kexec-tools-${PV}.tar.gz file://0001-arm64-kexec-disabled-check-if-kaslr-seed-dtb-propert.patch \ file://0001-kexec.c-add-MFD_NOEXEC_SEAL-flag-explicitly.patch \ file://0001-ppc-fs2dt-Match-function-signatures.patch \ + file://0001-Make-the-segment-base-match-pinned-section-address.patch \ " SRC_URI[sha256sum] = "ddaaa65b02b4f8aa9222586b1f26565b93a4baeffd35bcbd523f15fae7aa4897"