引数は6つありますが、ここで大事なのは、recvfrom関数ではソケットを通じてデータを受信する際に、第2引数で指定したバッファに対し、第3引数で指定したサイズでデータを受信して格納するということです。リスト1では、第2引数で指定しているバッファはstate->rpacket.dataで、第3引数で指定しているデータサイズはstate->blksize + 4です。 では、このバッファはいったいどこで確保されているのでしょうか? そして受信するデータサイズは、どのようにしてstate->blksizeに指定されているのでしょうか? オーバーフローするバッファ 解析した結果、同じくtftp.cの中のtftp_connect関数内で、このバッファが確保されていることがわかりました(リスト3)。具体的には、指定したバイト分のメモリを指定個分だけ確保するcalloc関数を利用してblksize