<div dir="ltr"><div>This piqued my interest due to an issue we ran into several months ago. Just so I can better understand this, what is "PIP"? Are you referring to maybe Priority Inversion Protection?</div><div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Jan 2, 2020 at 5:25 PM Gedare Bloom <<a href="mailto:gedare@rtems.org">gedare@rtems.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">The PIP modifications from #3359 introduced new data structures<br>
to track priority inheritance. Prioritized mutexes without PIP<br>
share some of the code paths, and may result in NULL pointer<br>
accesses. This patch checks for NULL, and also adds ISR critical<br>
sections to an uncovered corner case during thread restarts.<br>
<br>
Closes #3829.<br>
---<br>
cpukit/score/src/threadqextractpriority.c | 4 +++-<br>
cpukit/score/src/threadreset.c | 5 +++++<br>
2 files changed, 8 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/cpukit/score/src/threadqextractpriority.c b/cpukit/score/src/threadqextractpriority.c<br>
index 5c8188d661..9288d17980 100644<br>
--- a/cpukit/score/src/threadqextractpriority.c<br>
+++ b/cpukit/score/src/threadqextractpriority.c<br>
@@ -109,7 +109,9 @@ bool _Thread_queue_Extract_priority_helper(<br>
}<br>
<br>
mutex = _Thread_Dequeue_priority_node( &the_thread->Priority_node );<br>
- _Thread_Evaluate_priority( mutex->holder );<br>
+ if ( mutex != NULL ) {<br>
+ _Thread_Evaluate_priority( mutex->holder );<br>
+ }<br>
<br>
if ( !_Watchdog_Is_active( &the_thread->Timer ) ) {<br>
_ISR_Enable( level );<br>
diff --git a/cpukit/score/src/threadreset.c b/cpukit/score/src/threadreset.c<br>
index 464a611391..dfc85c93aa 100644<br>
--- a/cpukit/score/src/threadreset.c<br>
+++ b/cpukit/score/src/threadreset.c<br>
@@ -48,6 +48,7 @@ void _Thread_Reset(<br>
)<br>
{<br>
CORE_mutex_Control *mutex;<br>
+ ISR_Level level;<br>
<br>
the_thread->resource_count = 0;<br>
#if defined(RTEMS_ITRON_API)<br>
@@ -66,17 +67,21 @@ void _Thread_Reset(<br>
(void) _Watchdog_Remove( &the_thread->Timer );<br>
}<br>
<br>
+ _ISR_Disable( level );<br>
if ( the_thread->Priority_node.waiting_to_hold != NULL ) {<br>
mutex = _Thread_Dequeue_priority_node( &the_thread->Priority_node );<br>
_Thread_Evaluate_priority( mutex->holder );<br>
}<br>
+ _ISR_Enable( level );<br>
<br>
while ( !_Chain_Is_empty( &the_thread->Priority_node.Inherited_priorities ) ) {<br>
+ _ISR_Disable( level );<br>
_Thread_Dequeue_priority_node(<br>
((Thread_Priority_node*)_Chain_First(<br>
&the_thread->Priority_node.Inherited_priorities<br>
))<br>
);<br>
+ _ISR_Enable( level );<br>
}<br>
<br>
if ( the_thread->Priority_node.current_priority != the_thread->Start.initial_priority ) {<br>
-- <br>
2.17.1<br>
<br>
_______________________________________________<br>
devel mailing list<br>
<a href="mailto:devel@rtems.org" target="_blank">devel@rtems.org</a><br>
<a href="http://lists.rtems.org/mailman/listinfo/devel" rel="noreferrer" target="_blank">http://lists.rtems.org/mailman/listinfo/devel</a><br>
</blockquote></div><br clear="all"><br>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div><div><div><b>Mathew Benson</b><br></div>CEO | Chief Engineer<br></div>Windhover Labs, LLC<br>832-640-4018<br><br><img src="https://drive.google.com/a/windhoverlabs.com/uc?id=1cLDczWESrU667xKgEJlFhHa2yjq5UVhJ&export=download"><br></div><a href="http://www.windhoverlabs.com" target="_blank">www.windhoverlabs.com</a><br><br></div></div></div></div>