Você aloca memória para o buffer, mas em que momento ela é liberada? Ou seja, quem faz o free(buffer)?

Acredito que vc esteja usando esta função várias vezes para ler todas as linhas, certo? Provavelmente em um loop. Como está sendo feito?

Acho que isso já ajuda a saber as causas, não precisa chegar ao ponto de ver o fonte do Linux...