Reino: Code Quality

Una mala calidad del código lleva a un comportamiento no predecible. Desde la perspectiva de un usuario, muchas veces también supone una usabilidad limitada. Pero para un atacante es una oportunidad para atacar al sistema de formas insospechadas.

Code Correctness: Premature Thread Termination

Abstract
Si un proceso primario finaliza la ejecución normalmente antes de que los subprocesos se hayan generado, estos podrían finalizar antes de tiempo.
Explanation
Los subprocesos generados al llamar pthread_create() desde la función main() del proceso primario finalizarán antes de tiempo si el proceso primario termina la ejecución antes que cualquier subproceso que haya generado sin llamar pthread_exit(). Llamar pthread_exit() garantiza que el proceso primario se mantendrá activo hasta que todos sus subprocesos hayan finalizado la ejecución. Otra opción es que el proceso primario puede llamar pthread_join en todos los subprocesos secundarios y garantizar su compleción antes de que el proceso concluya.

Ejemplo 1: el código siguiente utiliza pthread_create() para crear un subproceso y, a continuación, sale normalmente. Si el subproceso secundario no ha completado su ejecución hasta que la función main() vuelve, entonces finalizará antes de tiempo.


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