引数は6つありますが、ここで大事なのは、recvfrom関数ではソケットを通じてデータを受信する際に、第2引数で指定したバッファに対し、第3引数で指定したサイズでデータを受信して格納するということです。リスト1では、第2引数で指定しているバッファはstate->rpacket.dataで、第3引数で指定しているデータサイズはstate->blksize + 4です。 では、このバッファはいったいどこで確保されているのでしょうか? そして受信するデータサイズは、どのようにしてstate->blksizeに指定されているのでしょうか? オーバーフローするバッファ 解析した結果、同じくtftp.cの中のtftp_connect関数内で、このバッファが確保されていることがわかりました(リスト3)。具体的には、指定したバイト分のメモリを指定個分だけ確保するcalloc関数を利用してblksize
![第1回 cURLの脆弱性 ~ヒープバッファオーバーフロー~ | gihyo.jp](https://cdn-ak-scissors.b.st-hatena.com/image/square/682205319da3f845baa8307b49ecdc97c418896b/height=288;version=1;width=512/https%3A%2F%2Fgihyo.jp%2Fassets%2Fimages%2FICON%2F2022%2Fprevent-vulnerability.png)