mORMot2 DailyLecture quotidienne des commits upstream

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.

Build2.4.16851 → 2.4.16861
Commits7
Lignes+192 -28
Lecture3 min

6 sur 6 entrées · 7 commits upstream

Sujets
# Entrée Catégorie Unités
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.

Arnaud Bouchez · 08:18 UTC · voir le commit sur GitHub →

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.

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.

Arnaud Bouchez · 08:35 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 08:17 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 08:15 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 08:24 UTC · voir le commit sur GitHub →

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.

Arnaud Bouchez · 08:37 UTC · voir le commit sur GitHub →

Activité upstream commits par jour · 60 derniers jours
Commits977
Jours actifs44/60
Plus chargé2026-09-30
Pic60
2026-08-15: 0 commits2026-08-16: 0 commits2026-08-17: 0 commits2026-08-18: 0 commits2026-08-19: 0 commits2026-08-20: 0 commits2026-08-21: 0 commits2026-08-22: 0 commits2026-08-23: 0 commits2026-08-24: 0 commits2026-08-25: 0 commits2026-08-26: 0 commits2026-08-27: 26 commits2026-08-28: 11 commits2026-08-29: 10 commits2026-08-30: 1 commit2026-08-31: 23 commits2026-09-01: 0 commits2026-09-02: 20 commits2026-09-03: 29 commits2026-09-04: 35 commits2026-09-05: 13 commits2026-09-06: 0 commits2026-09-07: 0 commits2026-09-08: 23 commits2026-09-09: 10 commits2026-09-10: 17 commits2026-09-11: 23 commits2026-09-12: 14 commits2026-09-13: 9 commits2026-09-14: 7 commits2026-09-15: 4 commits2026-09-16: 24 commits2026-09-17: 26 commits2026-09-18: 21 commits2026-09-19: 59 commits2026-09-20: 13 commits2026-09-21: 5 commits2026-09-22: 34 commits2026-09-23: 17 commits2026-09-24: 57 commits2026-09-25: 22 commits2026-09-26: 26 commits2026-09-27: 0 commits2026-09-28: 2 commits2026-09-29: 19 commits2026-09-30: 60 commits2026-10-01: 26 commits2026-10-02: 30 commits2026-10-03: 32 commits2026-10-04: 15 commits2026-10-05: 1 commit2026-10-06: 26 commits2026-10-07: 37 commits2026-10-08: 27 commits2026-10-09: 35 commits2026-10-10: 33 commits2026-10-11: 9 commits2026-10-12: 11 commits2026-10-13: 35 commits
2026-08-152026-10-13