[enhancement] Out-of-process plugins #30

Open
opened 2025-08-10 17:37:33 +03:00 by arseny · 1 comment

На сегодняшний день плагин для tuner — это текстовый манифест и .soшник, подгружаемый в адресное пространство Tuner и работающий с ним в одном процессе.

Может оказаться, что некоторым плагинам потребуется работать в отдельном процессе и обмениваться с gtk-adw-мордочкой сообщениями. Вот неполный список причин так делать:

  • код из плагина в процессе получает его привилегии, может вызвать raise(3), exit(2), и прочие 💥-API;
  • код из плагина, а также всё, что для него догружает dynamic linker (DT_NEEDED-записи в dynamic segment), имеет неограниченный доступ к памяти процесса tuner;
  • напротив, всё, что влинковано в tuner, получает неограниченный доступ к памяти плагина;
  • независимые друг от друга плагины могут породить конфликт по символам (💥).
На сегодняшний день плагин для tuner — это текстовый манифест и `.so`шник, подгружаемый в адресное пространство `Tuner` и работающий с ним в одном процессе. Может оказаться, что некоторым плагинам потребуется работать в отдельном процессе и обмениваться с gtk-adw-мордочкой сообщениями. Вот неполный список причин так делать: * код из плагина в процессе получает его привилегии, может вызвать `raise(3)`, `exit(2)`, и прочие 💥-API; * код из плагина, а также всё, что для него догружает dynamic linker (`DT_NEEDED`-записи в dynamic segment), имеет неограниченный доступ к памяти процесса `tuner`; * напротив, всё, что влинковано в `tuner`, получает неограниченный доступ к памяти плагина; * независимые друг от друга плагины могут породить конфликт по символам (💥).
Author

ldd(1) показывает только начальный старт динам. компоновщика, до перехода к точке входа в исполнимом бинарнике. Это не вся картина.

% lsfd -n -u -p "$(pgrep tuner)" -Q '(ASSOC == "mem")' --output NAME | LC_ALL=C grep -F '.so' | LC_ALL=C sort -u

Там, скорее всего, будут и библиотеки навроде GPU-дров NVidia/Intel, что всегда источник головной боли, особенно если они несвободные.

(я не догадался, как заставить lsfd(1) фильтровать замапленные файлы по правам замапленных участков; вместо grep .so надо оставить в списке те мапы, что с битом исполнимости)

`ldd(1)` показывает только начальный старт динам. компоновщика, до перехода к точке входа в исполнимом бинарнике. Это не вся картина. % lsfd -n -u -p "$(pgrep tuner)" -Q '(ASSOC == "mem")' --output NAME | LC_ALL=C grep -F '.so' | LC_ALL=C sort -u Там, скорее всего, будут и библиотеки навроде GPU-дров NVidia/Intel, что всегда источник головной боли, особенно если они несвободные. (я не догадался, как заставить `lsfd(1)` фильтровать замапленные файлы по правам замапленных участков; вместо `grep .so` надо оставить в списке те мапы, что с битом исполнимости)
Sign in to join this conversation.
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
alt-gnome/Tuner#30
No description provided.