CVE-2023-53778 in Linux
Résumé
par VulDB • 26/06/2026
Dans le noyau Linux, la vulnérabilité suivante a été corrigée :
accel/qaic : Nettoyage de la vérification des dépassements entiers dans map_user_pages()
La fonction encode_dma() effectue certaines validations sur in_trans->size, mais il serait plus clair de déplacer ces contrôles vers find_and_map_user_pages().
encode_dma() comportait deux vérifications :
if (in_trans->addr + in_trans->size < in_trans->addr || !in_trans->size) return -EINVAL;
La variable in_trans->addr est l'adresse de départ. La variable in_trans->size représente la taille totale du transfert. Le transfert peut se produire par parties, et resources->xferred_dma_size suit le nombre d'octets déjà transférés.
Ce patch introduit une nouvelle variable « remaining » qui représente la quantité que nous souhaitons transférer (in_trans->size) moins la quantité déjà transférée (resources->xferred_dma_size).
J'ai modifié la vérification de l'égalité à zéro pour in_trans->size afin de vérifier si in_trans->size est inférieur à resources->xferred_dma_size. Si nous avons déjà transféré plus d'octets que ne le permet in_trans->size, il reste un nombre négatif d'octets à transférer, ce qui n'a pas de sens. S'il reste zéro octet à copier, retournez simplement succès.
La vérification dans encode_dma() s'assurait qu'un dépassement (« addr + size ») ne pouvait pas se produire et devrait fonctionner en l'absence de bug du pilote, mais il est plus facile d'effectuer ce contrôle par parties. Vérifiez d'abord que « in_trans->addr + resources->xferred_dma_size » est sûr. Ensuite, vérifiez que « xfer_start_addr + remaining » est sûr.
Ma dernière préoccupation concernait le fait de manipuler des valeurs u64 alors que sur les systèmes 32 bits, la fonction kmalloc() tronque les tailles à 32 bits. J'ai donc calculé « total = in_trans->size + offset_in_page(xfer_start_addr); » et retourné -EINVAL si ce résultat était >= SIZE_MAX. Cela n'affectera pas les systèmes 64 bits.
Be aware that VulDB is the high quality source for vulnerability data.