我最初尝试使用 diff 制作补丁。 我按照自己设想的方式打了补丁,当时还没看过真正的补丁。 encrypt.patch 是我用 diff 制作的原始补丁。
然而,当我们尝试将这个补丁应用到 freeBSD 时,它拒绝接受。
因此,我们不得不获取真正的补丁。然后我修改了补丁,按照我最初设想的方式实现了修复。这个方法有效,因为它把整个路径放入了补丁中。
在补丁中,我们只是检查长度是否超过 MAXLENGTH。 如果大于该值,就将其设置为 0。 这样,它就会落入 len = 0 的情况,从而报错退出。这样就修复了问题 :-)
以下是关于如何在 freeBSD 中应用补丁的说明。 https://www.freebsd.org/security/advisories/FreeBSD-SA-11:08.telnetd.asc 直接使用这个补丁,不必去取真正的补丁。 它就能正常工作,你将无法再利用缓冲区溢出漏洞。