Я пытаюсь не дать студенческому коду выйти из строя с помощью распределений и перетащить мою тестовую машину на остановку. Я пробовал
setrlimit(RLIMIT_DATA, r);
, где r
- это структура, содержащая ограничения. Но, к сожалению, хотя этот предел останавливает brk
и sbrk
от выделения, библиотека C просто переключается на mmap
и сохраняет право на распределение.
Я тоже пробовал
setrlimit(RLIMIT_AS, r)
и это останавливает процесс на своем пути, но это исправление слишком серьезное - процесс не может восстановиться после ошибки ENOMEM
, потому что нет стекового пространства для вызовов, которые код выполняет при встрече с NULL
значение, возвращаемое с malloc()
.
У меня ограниченный контроль над двоичными файлами, поэтому, если это возможно сделать с помощью системного вызова, я бы предпочел это. Но мне нужны некоторые средства ограничения выделения, не разрушая способность процесса к восстановлению. У кого-нибудь есть предложения?
ОБНОВЛЕНИЕ : я нашел что-то под названием failmalloc , но это не очень сложно, и хотя я могу вызвать с ним ошибку, я всегда получаю ошибку, которую gdb не может диагностировать.
ДАЛЬНЕЙШЕЕ ОБНОВЛЕНИЕ : я обнаружил, что setrlimit(RLIMIT_AS, r)
делает , кажется, выполняет ту работу, которую я хочу, по крайней мере, в некоторых случаях & mdash; возникающие впоследствии ошибки были вызваны ошибкой в несвязанном модуле. Если кто-то не придумает что-то интересное (или причину оставить вопрос), я, вероятно, удалю вопрос.