Как я могу ограничить память, полученную с помощью `malloc ()` без ограничения стека?

Я пытаюсь не дать студенческому коду разойтись с распределением ресурсов и остановить мою тестовую машину. я пробовал

setrlimit(RLIMIT_DATA, r);

гдеr является структурой, содержащей ограничения. Но, к сожалению, хотя этот предел прекращаетсяbrk а такжеsbrk от выделения, библиотека C просто переключается наmmap и продолжает правильно распределять.

Я также пытался

setrlimit(RLIMIT_AS, r)

и это останавливает процесс в своем русле, но это средство является слишком серьезным - невозможно восстановить процесс послеENOMEM ошибка, потому что нет стекового пространства для вызовов, которые делает код при обнаруженииNULL значение, возвращаемое изmalloc().

У меня ограниченный контроль над двоичными файлами, поэтому, если это возможно сделать с помощью системного вызова, я бы предпочел это. Но мне нужны некоторые средства ограничения выделения, не разрушая способность процесса к восстановлению. У кого-нибудь есть предложения?

ОБНОВИТЬ: Я нашел что-то под названиемfailmalloc, но это не очень сложно, и хотя я могу вызвать с ним ошибку, я всегда получаю segfault, который GDB не может диагностировать.

ДАЛЬНЕЙШЕЕ ОБНОВЛЕНИЕ: Я нашел этоsetrlimit(RLIMIT_AS, r) делает похоже, я делаю ту работу, которую хочу, по крайней мере, в некоторых случаях - ошибки, которые возникали позже, были вызваны ошибкой в ​​неродственном модуле. Если кто-то не придумает что-нибудь интересное (или причину оставить вопрос), я, вероятно, удалю вопрос.

Ответы на вопрос(2)

Ваш ответ на вопрос