Bug 48637 - Целочисленное переполнение в rpm-4.13.0.1/lib/transaction.c
Summary: Целочисленное переполнение в rpm-4.13.0.1/lib/transaction.c
Status: NEW
Alias: None
Product: Sisyphus
Classification: Development
Component: rpm (show other bugs)
Version: unstable
Hardware: x86 Linux
: P5 normal
Assignee: placeholder@altlinux.org
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2023-11-30 12:15 MSK by aiburke
Modified: 2023-11-30 12:32 MSK (History)
7 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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.