From 2e7b4573a573803e3865085461b424443bb411f9 Mon Sep 17 00:00:00 2001 From: Dirk Ziegelmeier Date: Tue, 23 Oct 2018 14:26:29 +0200 Subject: [PATCH] SNMP: Avoid NULL pointer dereference in snmp_scalar.c --- src/apps/snmp/snmp_scalar.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/apps/snmp/snmp_scalar.c b/src/apps/snmp/snmp_scalar.c index 4c5b9402..913c2ec5 100644 --- a/src/apps/snmp/snmp_scalar.c +++ b/src/apps/snmp/snmp_scalar.c @@ -193,28 +193,43 @@ snmp_scalar_array_get_next_instance(const u32_t *root_oid, u8_t root_oid_len, st static s16_t snmp_scalar_array_get_value(struct snmp_node_instance *instance, void *value) { + snmp_err_t result = SNMP_ERR_NOSUCHINSTANCE; const struct snmp_scalar_array_node *array_node = (const struct snmp_scalar_array_node *)(const void *)instance->node; const struct snmp_scalar_array_node_def *array_node_def = (const struct snmp_scalar_array_node_def *)instance->reference.const_ptr; - return array_node->get_value(array_node_def, value); + if (array_node->get_value != NULL) + { + result = array_node->get_value(array_node_def, value); + } + return result; } static snmp_err_t snmp_scalar_array_set_test(struct snmp_node_instance *instance, u16_t value_len, void *value) { + snmp_err_t result = SNMP_ERR_NOSUCHINSTANCE; const struct snmp_scalar_array_node *array_node = (const struct snmp_scalar_array_node *)(const void *)instance->node; const struct snmp_scalar_array_node_def *array_node_def = (const struct snmp_scalar_array_node_def *)instance->reference.const_ptr; - return array_node->set_test(array_node_def, value_len, value); + if (array_node->set_test != NULL) + { + result = array_node->set_test(array_node_def, value_len, value); + } + return result; } static snmp_err_t snmp_scalar_array_set_value(struct snmp_node_instance *instance, u16_t value_len, void *value) { + snmp_err_t result = SNMP_ERR_NOSUCHINSTANCE; const struct snmp_scalar_array_node *array_node = (const struct snmp_scalar_array_node *)(const void *)instance->node; const struct snmp_scalar_array_node_def *array_node_def = (const struct snmp_scalar_array_node_def *)instance->reference.const_ptr; - return array_node->set_value(array_node_def, value_len, value); + if (array_node->set_value != NULL) + { + result = array_node->set_value(array_node_def, value_len, value); + } + return result; } #endif /* LWIP_SNMP */