Выделение памяти с испорченным размером

Аргумент Size к функции памяти из небезопасного источника

Описание

Выделение памяти с испорченным размером проверяет функции выделения памяти, такие как calloc или malloc, для аргументов размера из необеспеченных источников.

Риск

Неконтролируемое выделение памяти может заставить вашу программу запрашивать слишком много системной памяти. Это последствие может привести к катастрофическому отказу из-за условия из памяти, или присваивающий слишком много ресурсов.

Фиксация

Прежде, чем выделить память, проверяйте значение своих аргументов, чтобы проверять, что они не превышают границы.

Примеры

развернуть все

#include "stdlib.h"

int* bug_taintedmemoryallocsize(size_t size) {
    int* p = (int*)malloc(size);
    return p;
}

В этом примере malloc выделяет объем памяти size для указателя p. size является внешней переменной, так могло быть любое значение размера. Если размер больше, чем объем памяти, вы имеете в наличии, ваша программа могла бы отказать.

Исправление — Размер Проверки Памяти, которая будет Выделена

Одно возможное исправление должно проверять размер памяти, которую вы хотите выделить прежде, чем выполнить операцию malloc. Эти проверки в качестве примера, чтобы видеть, положителен ли размер и меньше, чем максимальный размер.

#include "stdlib.h"

enum {
    SIZE10  =  10,
    SIZE100 = 100,
    SIZE128 = 128
};

int* corrected_taintedmemoryallocsize(int size) {
    int* p = NULL;
    if (size>0 && size<SIZE128) {          /* Fix: Check entry range before use */
        p = (int*)malloc((unsigned int)size);
    }
    return p;
}

Информация о результате

Группа: испорченные данные
Язык: C | C++
Значение по умолчанию: 'off'
Синтаксис командной строки: TAINTED_MEMORY_ALLOC_SIZE
Влияние: носитель
ID CWE: 128, 131, 789

Введенный в R2015b