Reino: Code Quality

Códigos de baixa qualidade levam a comportamentos imprevisíveis. Da perspectiva do usuário, isso normalmente se manifesta como usabilidade ruim. Para um invasor, trata-se de uma oportunidade para atacar o sistema de formas imprevistas.

Code Correctness: Premature Thread Termination

Abstract
Se um processo pai encerrar sua execução normalmente antes dos threads que ele gerou, estes poderão ser encerrados prematuramente.
Explanation
Threads gerados ao chamar pthread_create() a partir da função main() do processo pai serão encerrados prematuramente se o processo pai encerrar sua execução antes dos threads que ele gerou, sem chamar pthread_exit(). Chamar pthread_exit() garante que o processo pai permanecerá ativo até que a execução de todos os seus threads tenha sido encerrada. Como alternativa, o processo pai pode chamar pthread_join em todos os threads filho e garantir que eles serão concluídos antes da conclusão do processo.

Exemplo 1: O código a seguir usa pthread_create() para criar um thread e depois é encerrado normalmente. Se a conclusão do thread filho não tiver sido encerrada até o retorno da função main(), o thread será encerrado prematuramente.


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