2015-09-06 buffer management

by Vasil Kolev

Случва ми се да свърша нещо смислено, за което да блогна от време на време. Тия дни debug-вах една гадост, която си струва да се разкаже.

Ето това е commit-ът, който решава проблема. Задачката, която оригиналният код трябваше да реши, беше следната: Имаме byte stream, който четем на буфери. От него трябва да извадим отделните пакети и да ги сипем към горния layer.

Проблемът на оригиналният код беше, че не взимаше в предвид, че може да е прочел някаква част от пакета от предишния буфер и продължаваше да чете повече, отколкото трябва и да го пише в заделения буфер, който спокойно препълваше. За да го хванем, компилирахме кода с ASAN, който ни закара до правилното място (и на който трябваше да му обясним да ни прави coredump. Интересен факт, ASAN след известно време заделя ужасно много адресно пространство и ставаха 15TB coredump-ове, добре, че има sparse файлове)).

Та в общи линии имахме стандартен heap overflow в сървърен код, trigger-ван от потребителски данни (сравнително лесно). Добре, че това не го ползват особено много хора в production (ако го бяха ползвали, щяха да се ударят в проблема). Дали някой не може да направи курс по примитиви в мрежов C код, който да обяснява как се пишат тия неща ?:)

Tags:

3 Responses to “2015-09-06 buffer management”

  1. core-ix Says:

    Maniax-е, можеш да заповядаш … курса се казва NETB301 в НБУ :)

  2. Vasil Kolev Says:

    @core-ix-е, да ти искам ли пари за реклама ?:) И не виждам в програмата на тоя курс buffer management и конкретно такъв проблем :)
    (да не говорим колко много ми е познат тоя конспект :) )

  3. elwix Says:

    :) Колко мъка има на този свят! Въздъхнал тежко Моканина и продължил да скубе бялата лястовица …

Leave a Reply