From: Tomas Vanek Date: Mon, 29 Jun 2020 11:34:07 +0000 (+0200) Subject: arm_adi_v5: prevent possibly endless recursion in dap_dp_init() X-Git-Tag: v0.11.0-rc1~14 X-Git-Url: https://review.openocd.org/gitweb?a=commitdiff_plain;h=646c3c99020f8fdf7ee0adf821582238aac4a80c;hp=646c3c99020f8fdf7ee0adf821582238aac4a80c;p=openocd.git arm_adi_v5: prevent possibly endless recursion in dap_dp_init() If dap_dp_read_atomic() in 30 trials loop fails, dap->do_reconnect is set. Following dap_dp_read_atomic() calls dap_queue_dp_read() which in case of SWD transport calls swd_queue_dp_read(). It starts with swd_check_reconnect() and it calls swd_connect() because dap->do_reconnect is set. swd_connect() does some initialization, reads DPIDR and calls dap_dp_init() again! Moreover if dap_dp_init() is called from cortex_m_reset_(de)assert() one level of recursion is necessary to reconnect the target. Introduce dap_dp_init_or_reconnect() for use in cortex_m reset and similar. Remove loop of 30 atomic reads of DP_STAT to prevent unwanted recursion. Change-Id: I54052fdefe50bf5f7c7b59fe751fe2063d5710c9 Signed-off-by: Tomas Vanek Reviewed-on: http://openocd.zylin.com/5729 Tested-by: jenkins Reviewed-by: Antonio Borneo Reviewed-by: Andreas Fritiofson ---