Como posso limitar a memória adquirida com `malloc ()` sem também limitar a pilha?

Estou tentando impedir que o código do aluno corra com alocações e arrastando minha máquina de teste para uma parada. eu tentei

setrlimit(RLIMIT_DATA, r);

Onder é uma estrutura que mantém os limites. Infelizmente, embora esse limite parebrk esbrk da alocação, a biblioteca C apenas falha emmmap e continua alocando.

Eu também tentei

setrlimit(RLIMIT_AS, r)

e isso interrompe o processo, mas esse remédio é muito grave - é impossível que o processo se recupere daENOMEM erro porque não há espaço na pilha para as chamadas que o código faz ao encontrar umNULL valor retornado demalloc().

Eu tenho controles limitados sobre os binários; portanto, se for possível fazer uma chamada do sistema, prefiro isso. Mas preciso de alguns meios de limitar a alocação sem destruir a capacidade de recuperação do processo. Alguém tem sugestões?

ATUALIZAR: Eu encontrei algo chamadofailmalloc, mas não é muito sofisticado e, embora eu possa causar uma falha, sempre recebo um segfault que o gdb não pode diagnosticar.

ATUALIZAÇÃO ATUALIZADA: Eu achei aquilosetrlimit(RLIMIT_AS, r) faz parece fazer o trabalho que eu quero, pelo menos em alguns casos - os segfaults que ocorreram depois foram causados por uma falha em um módulo não relacionado. A menos que alguém tenha algo interessante (ou um motivo para manter a pergunta), provavelmente eu a excluirei.

questionAnswers(2)

yourAnswerToTheQuestion