Инструменты18 августа 2026 г., 23:18 МСК🤖 Auto

Linux 7.3: BPF-программы научились читать xattr сокетов

В ядро Linux 7.3 добавлена функция bpf_sock_read_xattr(), позволяющая BPF-программам LSM эффективно считывать пользовательские атрибуты сокетов без блокировок.

Баннер новости 6027

Решение проблемы доступа к атрибутам

Ранее в Linux 7.1 была внедрена поддержка расширенных атрибутов (xattr) для сокетов, что стало важным шагом для GNOME и systemd, использующих Varlink IPC. Однако существовало критическое ограничение: BPF-программы не имели эффективного способа читать эти пользовательские метки обратно. Разработчик Christian Brauner устранил этот пробел, добавив в Linux 7.3 новую явную функцию bpf_sock_read_xattr().

Технические детали реализации

Новая функция позволяет BPF-программам, работающим в контексте LSM (Linux Security Modules), считывать атрибуты с префиксом user.* из inode сокетов sockfs полностью без блокировок (locklessly). Это достигается за счет использования RCU-защищенного поиска в хеш-таблице (rhashtable), что исключает необходимость захвата блокировки inode или атрибутов.

  • Безопасность и производительность: Операция чтения никогда не переходит в спящее состояние (sleep) и не требует блокировок.
  • Ограничения: Функция зарегистрирована как KF_RCU и доступна только для BPF-программ LSM. Она работает только с сокетами, гарантированно живущими в sockfs (например, исключены устройства tun/tap, доступные только через трассировку).
  • Применимость: Подходит как для спящих, так и для неспящих хуков LSM.

Практическое применение для systemd

Ключевым бенефициаром обновления становится systemd. Функция позволяет неуправляемым менеджерам пользователей (например, systemd --user) маркировать сокеты из пространства пользователя, а затем BPF-программам обнаруживать их или реализовывать политики безопасности во время вызовов bind() и connect().

Основные сценарии использования включают:

  • Реализацию ограничения скорости (rate limiting) для сокетов.
  • Тегирование сокетов для создания реестра Varlink.
  • Применение политик безопасности на основе меток, установленных пользователем.

Статус интеграции

Поддержка bpf_sock_read_xattr() уже объединена в основную ветку разработки и войдет в релиз Linux 7.3. Это закрывает longstanding issue для разработчиков системных утилит и специалистов по безопасности, работающих с eBPF.

Источник: Phoronix ↗