Memory allocation with tainted size

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

Описание

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

Риск

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

Фиксация

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

Примеры

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

#include "stdlib.h"

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

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

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

Одна возможная коррекция должна проверять размер памяти, которую вы хотите выделить прежде, чем выполнить 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