Требует действийможет затронуть работающую системуВ исходном payload нет отметок superseded_by. Merge commit содержит исправление DHCPNAK frames из более раннего branch commit, который отдельно не попал в это временное окно; встроенный merge diff проверен и отражён в выпуске. Диапазон исключения следует видимой последовательности 16857–16860, где DhcpIP4 завершает новые проверки REQUEST.
Исправлены принадлежность DHCP REQUEST и parsing коротких чисел
DHCP server теперь точнее соблюдает состояние client и правила выбора server: NAK frames очищены, запросы к другому server игнорируются, а устаревшие static address отклоняются. Последующее исправление не позволяет принимать malformed address option за реальное значение IPv4. Кроме того, GetExtended больше не читает четыре байта из некорректного ввода длиной один или два символа, поэтому сервисам, разбирающим недоверенный числовой текст, следует взять этот выпуск.
Коротко
- Переходите на build 2.4.16861; builds 2.4.16857–2.4.16859 могут принять malformed DHCP options 50 или 54 за реальные адреса.
- GetExtended теперь отклоняет короткие некорректные tokens до четырёхбайтовой проверки NAN/INF, предотвращая возможное чтение за пределами переданного текста.
- DHCP REQUEST, чей server-identifier указывает на другой server, игнорируется и учитывается новой метрикой dsmDroppedOtherServer.
- Client, явно запросивший адрес, который больше не совпадает с его static reservation, теперь получает NAK вместо renewal ACK.
- DHCPNAK frames исключают lease, network, boot и rule options, сохраняют chaddr пакета и передаются broadcast при отсутствии relay.
- DhcpIP4 теперь возвращает ноль для отсутствующих или malformed четырёхбайтовых options, завершая новые проверки REQUEST без ложных NAK или drop.
Рекомендации по обновлению
Берите build 2.4.16861 целиком, если используете TDhcpServer или передаёте недоверенный текст в GetExtended. Не останавливайтесь на builds 2.4.16857–2.4.16859: новые решения по DHCP options 50/54 зависят от нулевого результата DhcpIP4 для malformed данных, что исправлено в 16860. После обновления проверьте трафик DHCP REQUEST/NAK, перенос static reservation и сохранённые числовые ordinal TDhcpScopeMetric.
6 из 6 записей · 7 коммитов в апстриме
1
Высокий
Перенесённая static reservation отклоняет старый адрес из запроса client
Когда TDhcpProcess.LockedResponse находит lease lsStatic, option 50 теперь читается в State.Ip4. Для REQUEST SELECTING или INIT-REBOOT с явным ненулевым адресом, отличным от зарезервированного p^.IP4, возвращается DoError(State, dsmNak) вместо увеличения dsmLeaseRenewed и подтверждения lease.
Исправления
mormot.net.dhcp
2d2627f7+17-3
net: NAK requested address is not the one reserved
Влияние
После переноса static reservation администратором client со старым адресом получает указание заново начать получение адреса вместо ACK при несогласованном состоянии. REQUEST без option 50 и RENEWING через ciaddr намеренно сохраняют прежнее поведение.
Рекомендуется обновиться
Обновитесь до 2.4.16861 и проверьте client, у которых адрес static reservation может измениться при сохранённом старом lease.
Модули
2
Высокий
Malformed DHCP address options больше не считаются значениями IPv4
DhcpIP4 в mormot.net.dhcp инициализирует результат TNetIP4 нулём вместо offset option. Ноль заменяется только при наличии option и byte длины, равном SizeOf(TNetIP4). Regression tests передают трёхбайтовые payload options 50 и 54 и требуют обычной обработки ACK.
Исправления
mormot.net.dhcp
a86688a9+16-3
net: fixed DhcpIP4()
Влияние
Malformed requested-address больше не вызывает ложный NAK конфликта static reservation, а malformed server-identifier больше не заставляет server отбрасывать REQUEST как адресованный другому server. Корректные четырёхбайтовые и отсутствующие options сохраняют прежний смысл на Delphi и FPC.
Рекомендуется обновиться
Не развёртывайте builds 2.4.16857–2.4.16859; переходите на 2.4.16861 и проверьте packets с malformed options 50 и 54.
Публичный API
DhcpIP4behaviour-changed — Отсутствующие или не четырёхбайтовые options возвращают ноль вместо offset buffer, принятого за IPv4.
Модули
3
Высокий
DHCP REQUEST к другому server теперь игнорируется
TDhcpProcess.LockedResponse в mormot.net.dhcp читает option 54 через DhcpIP4 до обработки любого lease dmtRequest. Если ненулевой server identifier отличается от TDhcpScope.ServerIdentifier, метод выходит через DoError с новой метрикой dsmDroppedOtherServer и отдельной trace-причиной.
Исправления
mormot.net.dhcp
6a6f94d3+15-2
net: new DHCP dsmDroppedOtherServer for REQUEST
Влияние
В сети с несколькими DHCP server этот server больше не отправляет ACK или NAK client в состоянии SELECTING, выбравшему другой server. Новый enum member сдвигает числовые ordinal последующих TDhcpScopeMetric, поэтому код и хранилища с raw metric ordinal или bit positions set требуют проверки.
Стоит взглянуть
Проверьте trace REQUEST для нескольких server и найдите сохранённые значения Ord(TDhcpScopeMetric) или числовые masks TDhcpScopeMetrics.
Публичный API
TDhcpScopeMetric.dsmDroppedOtherServeradded — Считает REQUEST packets, чей server-identifier выбирает другой DHCP server.
Модули
4
Высокий
Короткий некорректный числовой текст больше не вызывает чтение четырёх байт
В реализации GetExtended вне WIN32DELPHI в mormot.core.text путь для нецифрового ввода теперь проверяет P[1] и P[2] на NUL до чтения PCardinal(P)^ для распознавания NAN или INF. Некорректные tokens длиной один или два символа сразу переходят в существующий путь ошибки.
Исправления
mormot.core.text
0a750051+5-2
core: avoid potential read overflow in GetExtended()
Влияние
Сервисы на FPC и Delphi вне Win32 при разборе короткого некорректного buffer избегают возможного чтения за пределами переданного NUL-terminated текста, которое могло затронуть недоступную память. Допустимые числа и публичная signature не изменены; Delphi Win32 сохраняет отдельный x87 assembly parser.
Рекомендуется обновиться
Обновитесь, если GetExtended получает внешний текст, особенно некорректные значения длиной один или два символа.
Модули
5
Низкий
Regression tests DHCP покрывают переходы состояний REQUEST
test.net.proto добавляет случаи совпадающих и перенесённых static reservation, NAK для INIT-REBOOT и SELECTING, RENEWING через ciaddr, OFFER после NAK и static или dynamic REQUEST, выбирающих другой server. test.core.base также добавляет regression assertion GetExtended('0.0').
Тесты
a0347464+73-3
tests: cover latest DHCP fixes
Влияние
Изменений прикладного кода и публичного API нет. Матрица тестов фиксирует, какие состояния DHCP client следует игнорировать, подтверждать ACK, отклонять NAK или предлагать reservation, снижая риск регрессии для server builds Delphi и FPC.
6
Низкий
Тесты malformed DHCP options возвращены в защищённое тело теста
test.net.proto переносит keyword finally ниже assertions для malformed options 50 и 54. Эти assertions теперь выполняются в теле try, а server.Free и settings.Free остаются в блоке finally и выполняются даже при exception в проверке.
Тесты
d3ed9070+4-3
tests: fixed typo on previous commit
Влияние
Изменений прикладного кода и публичного API нет. Ошибка assertion для malformed option больше не пропускает очистку тестовых ресурсов, поэтому regression suite сообщает сбой с более безопасной очисткой на Delphi и FPC.