界: Code Quality

コードの質が低いと、予測できない動作につながります。ユーザーの視点には、それがしばしば使い勝手の悪さとなって現れます。攻撃者にとっては、予期せぬ方法でシステムにストレスを与える機会となります。

Code Correctness: Premature Thread Termination

Abstract
親プロセスが生成したスレッドより前に、親プロセスが通常通りに実行を終了する場合、スレッドは予定より早く終了する場合があります。
Explanation
pthread_exit() をコールせずに生成されたスレッドより前に親プロセスが実行を終了すると、親プロセスの main() 関数から pthread_create() をコールして生成されたスレッドは予定より早く終了します。pthread_exit() をコールすることで、親プロセスのすべてのスレッドが実行を完了するまで親プロセスが終了せずに実行しつづけることを保証できます。または、親プロセスはすべての子スレッドで pthread_join をコールして、プロセスが終了する前に確実に子スレッドが完了するようにできます。

例 1: 次のコードは pthread_create() を使用して、スレッドを作成して正常に終了しています。main() 関数が戻るときまでに、子スレッドがその実行を終了していない場合は、予定より早く実行を終了することになります。


void *Simple(void *threadid)
{
...
pthread_exit(NULL);
}

int main(int argc, char *argv[]) {
int rc;
pthread_t pt;
rc = pthread_create(&pt, NULL, Simple, (void *)t);
if (rc){
exit(-1);
}
}
References
[1] Standards Mapping - CIS Azure Kubernetes Service Benchmark 1
[2] Standards Mapping - CIS Amazon Elastic Kubernetes Service Benchmark 5
[3] Standards Mapping - CIS Amazon Web Services Foundations Benchmark 1
[4] Standards Mapping - CIS Google Kubernetes Engine Benchmark normal
[5] Standards Mapping - Motor Industry Software Reliability Association (MISRA) C Guidelines 2012 Rule 1.3
desc.controlflow.cpp.code_correctness_premature_thread_termination