gerrit
2017-06-20 05:40:10 UTC
This is an automated email from Gerrit.
Steven Stallion (***@gmail.com) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/4165
-- gerrit
commit 9d0519311b7c16c7ac474872e199290c8dfeaa20
Author: Steven Stallion <***@squareup.com>
Date: Mon Jun 19 22:33:03 2017 -0700
rtos: version check for uCOS-III
This patch adds a version check to uCOS-III support to work around
potential issues using uninitialized targets. If the version check
fails, update_threads will return an error rather than attempt to update
the thread list using bad values.
Change-Id: I7b6f084642c392ea7dcb0e074a4e9f2b6b4e3c9b
Signed-off-by: Steven Stallion <***@squareup.com>
diff --git a/src/rtos/uCOS-III.c b/src/rtos/uCOS-III.c
index 9021167..a2464e5 100644
--- a/src/rtos/uCOS-III.c
+++ b/src/rtos/uCOS-III.c
@@ -71,6 +71,7 @@ static const struct uCOS_III_params uCOS_III_params_list[] = {
};
static const char * const uCOS_III_symbol_list[] = {
+ "OSDbg_VersionNbr",
"OSRunning",
"OSTCBCurPtr",
"OSTaskDbgListPtr",
@@ -87,6 +88,7 @@ static const char * const uCOS_III_symbol_list[] = {
};
enum uCOS_III_symbol_values {
+ uCOS_III_VAL_OSDbg_VersionNbr,
uCOS_III_VAL_OSRunning,
uCOS_III_VAL_OSTCBCurPtr,
uCOS_III_VAL_OSTaskDbgListPtr,
@@ -289,6 +291,26 @@ static int uCOS_III_update_threads(struct rtos *rtos)
/* free previous thread details */
rtos_free_threadlist(rtos);
+ /*
+ * To prevent updating the thread list before the target has had a
+ * chance to fully initialize, we first verify the version number
+ * falls within the expected range.
+ */
+ uint16_t rtos_version;
+
+ retval = target_read_u16(rtos->target,
+ rtos->symbols[uCOS_III_VAL_OSDbg_VersionNbr].address,
+ &rtos_version);
+ if (retval != ERROR_OK) {
+ LOG_ERROR("uCOS-III: failed to read RTOS version");
+ return retval;
+ }
+
+ if (rtos_version < 30000 || rtos_version > 39999) {
+ LOG_ERROR("uCOS-III: unexpected version: %" PRIu16, rtos_version);
+ return ERROR_FAIL;
+ }
+
/* verify RTOS is running */
uint8_t rtos_running;
--
Steven Stallion (***@gmail.com) just uploaded a new patch set to Gerrit, which you can find at http://openocd.zylin.com/4165
-- gerrit
commit 9d0519311b7c16c7ac474872e199290c8dfeaa20
Author: Steven Stallion <***@squareup.com>
Date: Mon Jun 19 22:33:03 2017 -0700
rtos: version check for uCOS-III
This patch adds a version check to uCOS-III support to work around
potential issues using uninitialized targets. If the version check
fails, update_threads will return an error rather than attempt to update
the thread list using bad values.
Change-Id: I7b6f084642c392ea7dcb0e074a4e9f2b6b4e3c9b
Signed-off-by: Steven Stallion <***@squareup.com>
diff --git a/src/rtos/uCOS-III.c b/src/rtos/uCOS-III.c
index 9021167..a2464e5 100644
--- a/src/rtos/uCOS-III.c
+++ b/src/rtos/uCOS-III.c
@@ -71,6 +71,7 @@ static const struct uCOS_III_params uCOS_III_params_list[] = {
};
static const char * const uCOS_III_symbol_list[] = {
+ "OSDbg_VersionNbr",
"OSRunning",
"OSTCBCurPtr",
"OSTaskDbgListPtr",
@@ -87,6 +88,7 @@ static const char * const uCOS_III_symbol_list[] = {
};
enum uCOS_III_symbol_values {
+ uCOS_III_VAL_OSDbg_VersionNbr,
uCOS_III_VAL_OSRunning,
uCOS_III_VAL_OSTCBCurPtr,
uCOS_III_VAL_OSTaskDbgListPtr,
@@ -289,6 +291,26 @@ static int uCOS_III_update_threads(struct rtos *rtos)
/* free previous thread details */
rtos_free_threadlist(rtos);
+ /*
+ * To prevent updating the thread list before the target has had a
+ * chance to fully initialize, we first verify the version number
+ * falls within the expected range.
+ */
+ uint16_t rtos_version;
+
+ retval = target_read_u16(rtos->target,
+ rtos->symbols[uCOS_III_VAL_OSDbg_VersionNbr].address,
+ &rtos_version);
+ if (retval != ERROR_OK) {
+ LOG_ERROR("uCOS-III: failed to read RTOS version");
+ return retval;
+ }
+
+ if (rtos_version < 30000 || rtos_version > 39999) {
+ LOG_ERROR("uCOS-III: unexpected version: %" PRIu16, rtos_version);
+ return ERROR_FAIL;
+ }
+
/* verify RTOS is running */
uint8_t rtos_running;
--