LINUX.ORG.RU

модуль для валидации TLV

 , ,


0

2

Работаю над ядерным модулем, где добавляется «новый» Ethernet заголовок к оригинальному пакету:

..[EtherType][DataLength][T|L|Payload][T|L|Payload][T|L|Payload]... [OriginalPacket]

То есть за заголовком следуют данные в формате TLV. Необходимо создать код для проверки TLV, то есть чтобы некорректно построенный пакет не мог бы грохнуть модуль. Например, я проверяю что DataLength не более skb->len. Что еще можете посоветовать для валидации,

★★

Последнее исправление: cruz7 (всего исправлений: 1)

Можно еще проверять число TLV, вдруг кто-то их тысячу пришлет а ожидается не более ста, например.

Как такой модифицированный пакет пролезает через сетевое оборудование?

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Как такой модифицированный пакет пролезает через сетевое оборудование?

Например, по гигабитной сети, где MTU намного более обычных 1514 байт.

Deleted
()

У вас есть возможность поменять формат? Я бы вынес все пары T/L в начало, a все V дальше, перед OriginalPacket. Меньше надо будет лазить в память при валидации.

Deleted
()
Ответ на: комментарий от I-Love-Microsoft

Валидные TLV имеют свой зарегистрированный тип в поле T, при наличии неизвестного типа пакет дропается.

Такие модифицированые пакеты ходят только между двумя свитчами которым известен новый тип EtherType + поддержка jumbo frames.

Сейчас я прохожу по всем TLV, на каждой итерации уменьшая значение DataLength, чтобы получить смещение к следующему tlv, и проверяя что значение L не более skb->len. Но сдается мне, что еще нужно проверять что «остаток» (то есть количество байтов до начала оригинального пакета) не более DataLength. Как-то так..

cruz7 ★★
() автор топика
Ответ на: комментарий от Deleted

У вас есть возможность поменять формат? Я бы вынес все пары T/L в начало, a все V дальше, перед OriginalPacket. Меньше надо будет лазить в память при валидации.

К сожалению, поменять формат сейчас не получится.

cruz7 ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.