Agir maintenantpeut affecter un système en productionLe payload brut ne contient aucun marqueur superseded_by. Son commit de merge contient la correction des trames DHCPNAK issue d’un commit de branche écrit plus tôt et non listé séparément dans cette fenêtre ; le diff de merge intégré a été examiné et résumé dans l’édition. La plage à éviter suit la séquence visible 16857–16860 où DhcpIP4 complète les nouveaux contrôles REQUEST.
La propriété des requêtes DHCP et le parsing numérique court sont corrigés
Les serveurs DHCP suivent maintenant plus fidèlement l’état du client et les règles de sélection du serveur : les trames NAK sont nettoyées, les requêtes désignant un autre serveur sont ignorées et les anciennes adresses statiques sont rejetées. Une correction ultérieure empêche les options d’adresse mal formées d’être prises pour de vraies valeurs IPv4. Par ailleurs, GetExtended ne lit plus quatre octets depuis une entrée invalide d’un ou deux caractères ; les services qui analysent du texte numérique non fiable doivent donc prendre cette édition.
En bref
- Passez à la build 2.4.16861 ; les builds 2.4.16857 à 2.4.16859 peuvent interpréter à tort les options DHCP 50 ou 54 mal formées comme de vraies adresses.
- GetExtended rejette maintenant les tokens invalides courts avant son contrôle NAN/INF sur quatre octets, évitant une lecture potentielle au-delà du texte fourni.
- Une requête DHCP dont server-identifier désigne un autre serveur est ignorée et comptée par la nouvelle métrique dsmDroppedOtherServer.
- Un client qui demande explicitement une adresse ne correspondant plus à sa réservation statique reçoit maintenant un NAK au lieu d’un ACK de renouvellement.
- Les trames DHCPNAK omettent les options de bail, réseau, boot et rule, conservent le chaddr du paquet et sont diffusées en broadcast en l’absence de relais.
- DhcpIP4 renvoie maintenant zéro pour les options de quatre octets absentes ou mal formées, achevant les nouveaux contrôles REQUEST sans faux NAK ni abandon.
Conseil de mise à jour
Prenez la build 2.4.16861 comme un ensemble complet si vous exécutez TDhcpServer ou transmettez du texte non fiable à GetExtended. Ne vous arrêtez pas sur les builds 2.4.16857–2.4.16859 : les nouvelles décisions sur les options DHCP 50/54 dépendent du retour zéro de DhcpIP4 pour les données mal formées, corrigé en 16860. Après mise à niveau, revérifiez le trafic DHCP REQUEST/NAK, les déplacements de réservations statiques et les ordinaux TDhcpScopeMetric numériques persistés.
6 sur 6 entrées · 7 commits upstream
1
Élevée
Une réservation statique déplacée rejette l’ancienne adresse demandée par le client
Lorsque TDhcpProcess.LockedResponse trouve un bail lsStatic, il lit maintenant l’option 50 dans State.Ip4. Pour les requêtes SELECTING ou INIT-REBOOT avec une adresse explicite non nulle différente de p^.IP4 réservé, il renvoie DoError(State, dsmNak) au lieu d’incrémenter dsmLeaseRenewed et d’acquitter le bail.
Correctifs
mormot.net.dhcp
2d2627f7+17-3
net: NAK requested address is not the one reserved
Impact
Après le déplacement d’une réservation statique par un administrateur, un client présentant l’ancienne adresse reçoit l’ordre de recommencer l’acquisition au lieu d’un ACK avec un état incohérent. Les requêtes sans option 50 et RENEWING via ciaddr conservent volontairement le comportement existant.
Mise à jour recommandée
Mettez à niveau jusqu’à 2.4.16861 et testez les clients dont l’adresse de réservation statique peut changer alors que l’ancien bail reste en cache.
Unités
2
Élevée
Les options d’adresse DHCP mal formées ne passent plus pour des valeurs IPv4
DhcpIP4 dans mormot.net.dhcp initialise son résultat TNetIP4 à zéro au lieu de l’offset de l’option. Il ne remplace zéro que si l’option existe et si son octet de longueur vaut SizeOf(TNetIP4). Les tests de régression envoient des payloads de trois octets pour les options 50 et 54 et exigent un traitement ACK normal.
Correctifs
mormot.net.dhcp
a86688a9+16-3
net: fixed DhcpIP4()
Impact
Une requested-address mal formée ne provoque plus un faux NAK de conflit de réservation statique, et un server-identifier mal formé ne fait plus abandonner la requête comme si elle ciblait un autre serveur. Les options correctes de quatre octets et les options absentes conservent leur sens sous Delphi et FPC.
Mise à jour recommandée
Ne déployez pas les builds 2.4.16857–2.4.16859 ; passez à 2.4.16861 et testez les paquets avec options 50 et 54 mal formées.
API publique
DhcpIP4behaviour-changed — Les options absentes ou non longues de quatre octets renvoient zéro au lieu d’un offset de buffer interprété comme IPv4.
Unités
3
Élevée
Les requêtes DHCP sélectionnant un autre serveur sont ignorées
TDhcpProcess.LockedResponse dans mormot.net.dhcp lit l’option 54 avec DhcpIP4 avant de traiter tout bail dmtRequest. Si l’identifiant serveur non nul diffère de TDhcpScope.ServerIdentifier, la méthode quitte via DoError avec la nouvelle métrique dsmDroppedOtherServer et une raison trace dédiée.
Correctifs
mormot.net.dhcp
6a6f94d3+15-2
net: new DHCP dsmDroppedOtherServer for REQUEST
Impact
Sur un réseau avec plusieurs serveurs DHCP, ce serveur n’envoie plus d’ACK ni de NAK à un client SELECTING qui a choisi un autre serveur. Le nouveau membre d’énumération décale les ordinaux numériques des valeurs TDhcpScopeMetric suivantes ; le code ou le stockage utilisant les ordinaux bruts ou positions de bits doit être vérifié.
À regarder
Vérifiez les traces REQUEST multi-serveurs et recherchez les valeurs Ord(TDhcpScopeMetric) persistées ou les masques TDhcpScopeMetrics numériques.
API publique
TDhcpScopeMetric.dsmDroppedOtherServeradded — Compte les paquets REQUEST dont server-identifier sélectionne un autre serveur DHCP.
Unités
4
Élevée
Un texte numérique invalide court ne déclenche plus une lecture de quatre octets
Dans l’implémentation GetExtended hors WIN32DELPHI de mormot.core.text, le chemin non numérique vérifie maintenant P[1] et P[2] pour NUL avant de lire PCardinal(P)^ afin de reconnaître NAN ou INF. Les tokens invalides d’un ou deux caractères vont directement vers le chemin d’erreur existant.
Correctifs
mormot.core.text
0a750051+5-2
core: avoid potential read overflow in GetExtended()
Impact
Les services FPC et Delphi hors Win32 qui analysent un buffer invalide court évitent une lecture potentielle au-delà du texte terminé par NUL, qui pouvait toucher une mémoire inaccessible. Les nombres valides et la signature publique ne changent pas ; Delphi Win32 conserve son parser assembleur x87 distinct.
Mise à jour recommandée
Mettez à niveau si GetExtended reçoit du texte externe, en particulier des valeurs invalides d’un ou deux caractères.
Unités
5
Faible
Les tests de régression DHCP couvrent les transitions d’état REQUEST
test.net.proto ajoute des cas pour les réservations statiques correspondantes ou déplacées, les NAK INIT-REBOOT et SELECTING, RENEWING via ciaddr, les offres après NAK et les paquets REQUEST statiques ou dynamiques sélectionnant un autre serveur. test.core.base ajoute aussi une assertion de régression GetExtended('0.0').
Tests
a0347464+73-3
tests: cover latest DHCP fixes
Impact
Aucun changement de code applicatif ni d’API publique. La matrice de tests fixe les états client DHCP qui doivent être ignorés, recevoir un ACK, un NAK ou une réservation proposée, réduisant le risque de régression pour les builds serveur Delphi et FPC.
6
Faible
Les tests d’options DHCP mal formées reviennent dans le corps protégé du test
test.net.proto déplace le mot-clé finally après les assertions sur les options 50 et 54 mal formées. Ces assertions s’exécutent maintenant dans le corps try, tandis que server.Free et settings.Free restent dans le bloc finally et s’exécutent même si un contrôle lève une exception.
Tests
d3ed9070+4-3
tests: fixed typo on previous commit
Impact
Aucun changement de code applicatif ni d’API publique. L’échec d’une assertion sur une option mal formée ne peut plus éviter le nettoyage prévu des ressources de test ; la suite de régression signale donc les échecs avec un nettoyage plus sûr sous Delphi et FPC.