
Originalmente tentei usar o diff para fazer um patch. Eu o corrigi da forma que pensei que seria, antes de olhar o patch real. encrypt.patch é este patch original que fiz com o diff. No entanto, quando tentamos aplicar este patch ao freeBSD, ele não o aceitou.
Em vez disso, tivemos que buscar o patch real. Então alterei o patch para implementar a correção da forma que pensei originalmente que deveria ser. Isso funciona porque coloca todo o caminho no patch.
No patch, simplesmente verificamos o comprimento comparado a MAXLENGTH. Se for maior que isso, definimos como 0. Dessa forma, ele cai no caso de len = 0, que gera erro. Isso corrige o problema :-)
Aqui está uma explicação de como aplicar um patch no freeBSD. https://www.freebsd.org/security/advisories/FreeBSD-SA-11:08.telnetd.asc Simplesmente use este patch em vez de buscar o real. Ele funcionará, e você não conseguirá mais explorar o estouro de buffer.