Попытка подсчитать правильное количество символов в строке в BPF

Я пытаюсь подсчитать переданную строку указателя в BPF, но у меня остается очень длинная ошибка, которую я не могу понять. В основном я пытаюсь воссоздать strlen в BPF, чтобы подсчитать размер моей переданной строки *. Интересную область ошибки можно увидеть здесь:

Минимальное значение R1 выходит за пределы допустимого диапазона обработанной памяти 2353 insns (предел 1000000) max_states_per_insn 1 total_states 242peak_states 242 mark_read 2

Любая идея о том, как решить что-то еще?

Вот код, который я написал:

int stringLength(char* txt)
{
    int i=0,count=0;
    
    while(txt[i++]!='\0'){
        count+=1;
    }
    
    return count;
}

Это вспомогательная функция, которую я вызываю в своей основной функции BPF.

Ошибка Pastebin


person maxterthrowaway    schedule 30.07.2021    source источник


Ответы (1)


Ошибка связана с доступом вне диапазона. Ваше условие в while(txt[i++]!='\0') предполагает, что строка заканчивается символом NULL, но на практике вы (точнее, верификатор) не можете гарантировать это. Попробуйте расширить условие, чтобы убедиться, что вы не выходите за пределы длины строки.

person Qeole    schedule 30.07.2021
comment
Добавление /0 к тексту, к сожалению, не решает проблему с моим кодом. - person maxterthrowaway; 30.07.2021
comment
И не ожидается. Что вам нужно, я думаю, это добавить условие в ваш цикл на длину строки. - person Qeole; 31.07.2021