Bug 48637

Summary: Целочисленное переполнение в rpm-4.13.0.1/lib/transaction.c
Product: Sisyphus Reporter: aiburke
Component: rpmAssignee: placeholder <placeholder>
Status: NEW --- QA Contact: qa-sisyphus
Severity: normal    
Priority: P5 CC: amakeenk, at, glebfm, imz, ldv, placeholder, vt
Version: unstable   
Hardware: x86   
OS: Linux   

Description aiburke 2023-11-30 12:15:06 MSK
В ходе анализа пакета rpm была выявлена истинная сработка детектора NO_CAST.INTEGER_OVERFLOW в rpm-4.13.0.1/lib/transaction.c.

Строка 1326 служит для оценки пространства, необходимого для роста rpmdb. Предполагается, что необходимое пространство будет в 4 раза больше размера заголовка.

int64_t hsize = rpmteHeaderSize(p) * 4;

Результат rpmteHeaderSize(p) имеет тип unsigned int.

Если представить, что результат операции rpmteHeaderSize(p) * 4 вернет значение, превосходящее максимальное для типа unsigned int - 4294967295, то выражение rpmteHeaderSize(p) * 4 будет вычислено некорректно, поскольку нет расширения к большему типу.

Лучше будет преобразовать это выражение к int64_t во избежание ошибочного вывода: int64_t hsize = (int64_t) rpmteHeaderSize(p) * 4;


Found by Linux Verification Center (https://portal.linuxtesting.ru/) with SVACE.

Author A.Burke.