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.