forked from auracaster/openocd
fix segfault from stack corruption in ahbap_debugport_init
ahbap_debugport_init was queueing reads to a local stack variable but didn't execute the queue before returning. Since the result of the reads are not used anyway, it's better to pass NULL as the destination instead of a dummy variable. I changed this throughout the function, even for the reads that were actually executed. Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com> Signed-off-by: Spencer Oliver <ntfreak@users.sourceforge.net>
This commit is contained in:
committed by
Spencer Oliver
parent
a727418184
commit
5b34018ccd
@@ -906,7 +906,6 @@ extern const struct dap_ops jtag_dp_ops;
|
|||||||
*/
|
*/
|
||||||
int ahbap_debugport_init(struct adiv5_dap *dap)
|
int ahbap_debugport_init(struct adiv5_dap *dap)
|
||||||
{
|
{
|
||||||
uint32_t dummy;
|
|
||||||
uint32_t ctrlstat;
|
uint32_t ctrlstat;
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
int retval;
|
int retval;
|
||||||
@@ -931,7 +930,7 @@ int ahbap_debugport_init(struct adiv5_dap *dap)
|
|||||||
|
|
||||||
/* DP initialization */
|
/* DP initialization */
|
||||||
|
|
||||||
retval = dap_queue_dp_read(dap, DP_CTRL_STAT, &dummy);
|
retval = dap_queue_dp_read(dap, DP_CTRL_STAT, NULL);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
@@ -939,7 +938,7 @@ int ahbap_debugport_init(struct adiv5_dap *dap)
|
|||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
retval = dap_queue_dp_read(dap, DP_CTRL_STAT, &dummy);
|
retval = dap_queue_dp_read(dap, DP_CTRL_STAT, NULL);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
@@ -977,7 +976,7 @@ int ahbap_debugport_init(struct adiv5_dap *dap)
|
|||||||
alive_sleep(10);
|
alive_sleep(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
retval = dap_queue_dp_read(dap, DP_CTRL_STAT, &dummy);
|
retval = dap_queue_dp_read(dap, DP_CTRL_STAT, NULL);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
/* With debug power on we can activate OVERRUN checking */
|
/* With debug power on we can activate OVERRUN checking */
|
||||||
@@ -985,7 +984,7 @@ int ahbap_debugport_init(struct adiv5_dap *dap)
|
|||||||
retval = dap_queue_dp_write(dap, DP_CTRL_STAT, dap->dp_ctrl_stat);
|
retval = dap_queue_dp_write(dap, DP_CTRL_STAT, dap->dp_ctrl_stat);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
retval = dap_queue_dp_read(dap, DP_CTRL_STAT, &dummy);
|
retval = dap_queue_dp_read(dap, DP_CTRL_STAT, NULL);
|
||||||
if (retval != ERROR_OK)
|
if (retval != ERROR_OK)
|
||||||
return retval;
|
return retval;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user