Для начала в объявлении этой функции
void function( const struct middle_data const *middle_ptr)
один квалификатор const
является избыточным. Они оба означают, что указанный объект является константой, а не сам указатель.
Так что этот квалификатор const
означает, что члены данных указанного объекта также являются константой, то есть фактически у вас есть
struct base_data * const int_data_ptr;
То есть у вас есть постоянный указатель, который указывает на неконстантный объект, который может быть изменен.
Если вы не хотите, чтобы указанный объект был изменен, вы должны объявить структуру как
struct middle_data
{
const struct base_data *int_data_ptr;
};