Библиотека на C возвращает указатель и длину. Что известно. При однопоточной последовательности вызовов буфер доступен для чтения и действителен до следующего вызова библиотеки. Владение не передаётся. Что неизвестно. Может ли его сделать недействительным другой дескриптор, callback или фоновый поток. Пока это допущение.
Указатель на const байты запрещает изменение только через этот путь доступа. О времени жизни он ничего не говорит, и байты всё ещё могут измениться другим путём. Так что удерживать дескриптор библиотеки, возможно, необходимо, но этого может оказаться мало.
Вариант первый. Скопировать байты в собственный Vec<u8>, прежде чем разрешать следующий вызов. Всё время копирования указатель и длина должны описывать действительный читаемый диапазон, без конфликтующей записи с чужой стороны. Уже испорченный указатель копирование не исправит.
Вариант второй. Заимствованное представление, которое, пока живёт, должно блокировать любой вызов, способный его аннулировать. Заимствование, привязанное к одному дескриптору, работает, только если вся инвалидация идёт через него. Если библиотека пользуется общим глобальным хранилищем, важны и другие дескрипторы. Туда же относятся параллельные вызовы и реентерабельные callback.
Начинаю с копии и записываю, на какие гарантии внешней стороны она всё ещё опирается. Пока нет сведений с другой стороны, это допущения.