TGViewer
Admin Guides | Сисадмин Admin Guides | Сисадмин @admguides · 12K subscribers
Post #3178 564
kmalloc_obj: зачем Linux типизированное выделение памяти

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

Компилятор может ничего не заметить, а проблема проявится уже во время работы. Например, когда код начнёт записывать данные за пределы выделенного участка.

⏺Как это работает с kmalloc

Обычно память под структуру выделяют так:

struct my_device *dev;

dev = kmalloc(sizeof(*dev), GFP_KERNEL);


Здесь всё правильно. Но kmalloc() получает только размер в байтах. Какой именно объект будет храниться в памяти, allocator не знает.

Если разработчик ошибётся в sizeof(), можно получить слишком маленький буфер.

⏺Что меняет kmalloc_obj

Идея типизированного выделения - связать размер памяти непосредственно с типом объекта.

Вместо ручного указания размера используется выражение, по которому компилятор определяет нужный тип:

dev = kmalloc_obj(*dev, GFP_KERNEL);


Для массива предусмотрен аналогичный подход:

dev = kmalloc_objs(*dev, 16, GFP_KERNEL);


Так меньше шансов перепутать размер структуры или неправильно рассчитать память под несколько элементов.

⏺А что с защитой памяти

Важно понимать: типизированное выделение не превращает C в безопасный язык и не устраняет все ошибки работы с указателями.
Но оно убирает один источник проблем - несоответствие размера выделяемой памяти объекту, для которого она предназначена.

Особенно это полезно в kernel-коде, где подобная ошибка может закончиться повреждением памяти, а не просто падением одного приложения.
  • 👍 4
  • 🔥 1
More from @admguides
  1. Oct 14, 2026🔴В 2025 году Россияне заработали 5,3 млрд рублей на арбитраже криптовалют По данным Минфи…
  2. Oct 14, 2026АЙТИШНИКИ БЕСПЛАТНОЕ ОБУЧЕНИЕ Проект «Terminal» стал крупнейшей библиотекой бесплатного об…
  3. Oct 14, 2026Переход с VMware: как не начать с нуля и получить больше возможностей Смена платформы вирт…
  4. Oct 14, 2026Два антивируса в Windows могут начать бороться друг с другом Инженер Microsoft Рэймонд Чен…
  5. Oct 13, 2026⚡️️️️️️ Не работает корпоративная связь? Труконф поможет восстановить коммуникации Если из…
  6. Oct 13, 2026dm-dust: как устроить диску bad sectors без поломки Представьте: диск исправен, SMART ниче…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →