Consecuencias extremas en el tamaño del búfer

1

¿Cuáles son las consecuencias de asignar y luego llenar un búfer extremadamente grande en C? ¿Puede una pila tener un tamaño máximo y, de ser así, cuáles son los mecanismos de seguridad que lo hacen cumplir?

    
pregunta Us3rname 17.06.2017 - 00:15
fuente

1 respuesta

2
  

¿Cuáles son las consecuencias de asignar y luego llenar un búfer extremadamente grande en C?

Si un proceso crece demasiado en la memoria virtual, puede dar como resultado thrashing .

  

¿Puede una pila tener un tamaño máximo y, en caso afirmativo, cuáles son los mecanismos de seguridad que lo hacen cumplir?

Esta pregunta ha sido formulada y respondida aquí: cómo funciona ¿El kernel de Linux impone límites de tamaño de pila?

Relacionados: Tamaños de pila de Linux

De la getrlimit y setrlimit man page :

  

RLIMIT_STACK

     

Este es el tamaño máximo de la pila de proceso, en bytes. Al alcanzar este límite, se genera una señal SIGSEGV. Para manejar esta señal, un proceso debe emplear una pila de señales alternativa ( sigaltstack (2) ).

     

Desde Linux 2.6.23, este límite también determina la cantidad de espacio utilizado para los argumentos de línea de comando y las variables de entorno del proceso; Para obtener más información, consulte execve (2) .

Los límites, como RLIMIT_STACK, son aplicados por el núcleo:

  

DESCRIPTION

     

Las llamadas al sistema getrlimit () y setrlimit () obtienen y configuran recursos   límites respectivamente. Cada recurso tiene un soft y hard asociado.   límite, según lo definido por la estructura rlimit:

       struct rlimit {
           rlim_t rlim_cur;  /* Soft limit */
           rlim_t rlim_max;  /* Hard limit (ceiling for rlim_cur) */
       };
  

El límite flexible es el valor que el kernel aplica para el recurso correspondiente. El límite duro actúa como un techo para el   límite flexible: un proceso sin privilegios puede establecer solo su límite suave en un   valor en el rango de 0 hasta el límite duro, y (irreversiblemente)   baja su límite duro. Un proceso privilegiado (bajo Linux: uno con   la capacidad CAP_SYS_RESOURCE) puede hacer cambios arbitrarios a cualquiera   valor límite.

     

El valor RLIM_INFINITY denota ningún límite en un recurso (tanto en el   estructura devuelta por getrlimit () y en la estructura pasada a   setrlimit ()).

    
respondido por el SYS_V 17.06.2017 - 00:58
fuente

Lea otras preguntas en las etiquetas