From 2ae67354a359f0efed0c0e20a2e5d1b13428d091 Mon Sep 17 00:00:00 2001 From: Ilya Balov Date: Mon, 10 Feb 2025 13:19:02 +0300 Subject: [PATCH 1/2] verify return value of etharp_get_entry() --- src/apps/snmp/snmp_mib2_ip.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/apps/snmp/snmp_mib2_ip.c b/src/apps/snmp/snmp_mib2_ip.c index 57cf0f5ad..494280b4c 100644 --- a/src/apps/snmp/snmp_mib2_ip.c +++ b/src/apps/snmp/snmp_mib2_ip.c @@ -488,7 +488,9 @@ ip_NetToMediaTable_get_cell_value_core(size_t arp_table_index, const u32_t *colu struct netif *netif; struct eth_addr *ethaddr; - etharp_get_entry(arp_table_index, &ip, &netif, ðaddr); + if(!etharp_get_entry(arp_table_index, &ip, &netif, ðaddr)) { + return SNMP_ERR_NOSUCHINSTANCE; + } /* value */ switch (*column) { From 9df42f031f015c1ff096a73ee798ade9d17fd3e8 Mon Sep 17 00:00:00 2001 From: Ilya Balov Date: Mon, 10 Feb 2025 13:23:50 +0300 Subject: [PATCH 2/2] verify return value of snmpv3_get_user() --- src/apps/snmp/snmp_snmpv2_usm.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/apps/snmp/snmp_snmpv2_usm.c b/src/apps/snmp/snmp_snmpv2_usm.c index 4cc73d395..4ba98f20f 100644 --- a/src/apps/snmp/snmp_snmpv2_usm.c +++ b/src/apps/snmp/snmp_snmpv2_usm.c @@ -290,7 +290,10 @@ static s16_t usmusertable_get_value(struct snmp_node_instance *cell_instance, vo case 5: { /* usmUserAuthProtocol */ const struct snmp_obj_id *auth_algo; snmpv3_auth_algo_t auth_algo_val; - snmpv3_get_user((const char *)cell_instance->reference.ptr, &auth_algo_val, NULL, NULL, NULL); + if(snmpv3_get_user((const char *)cell_instance->reference.ptr, &auth_algo_val, NULL, NULL, NULL) != ERR_OK) { + LWIP_DEBUGF(SNMP_MIB_DEBUG, ("usmusertable_get_value(): not found user: %s\n", (const char *)cell_instance->reference.ptr)); + return 0; + } auth_algo = snmp_auth_algo_to_oid(auth_algo_val); MEMCPY(value, auth_algo->id, auth_algo->len * sizeof(u32_t)); return auth_algo->len * sizeof(u32_t); @@ -302,7 +305,10 @@ static s16_t usmusertable_get_value(struct snmp_node_instance *cell_instance, vo case 8: { /* usmUserPrivProtocol */ const struct snmp_obj_id *priv_algo; snmpv3_priv_algo_t priv_algo_val; - snmpv3_get_user((const char *)cell_instance->reference.ptr, NULL, NULL, &priv_algo_val, NULL); + if(snmpv3_get_user((const char *)cell_instance->reference.ptr, NULL, NULL, &priv_algo_val, NULL) != ERR_OK) { + LWIP_DEBUGF(SNMP_MIB_DEBUG, ("usmusertable_get_value(): not found user: %s\n", (const char *)cell_instance->reference.ptr)); + return 0; + } priv_algo = snmp_priv_algo_to_oid(priv_algo_val); MEMCPY(value, priv_algo->id, priv_algo->len * sizeof(u32_t)); return priv_algo->len * sizeof(u32_t);