pid1: add D-Bus API for removing delegated subcgroups
When running unprivileged containers, we run into a scenario where an unpriv owned cgroup has a subcgroup delegated to another user (i.e. the container's own UIDs). When the owner of that cgroup dies without cleaning it up then the unpriv service manager might encounter a cgroup it cannot delete anymore. Let's address that: let's expose a method call on the service manager (primarly in PID1) that can be used to delete a subcgroup of a unit one owns. This would then allow the unpriv service manager to ask the priv service manager to get rid of such a cgroup. This commit only adds the method call, the next commit then adds the code that makes use of this.
This commit is contained in:
@@ -147,6 +147,9 @@ node /org/freedesktop/systemd1 {
|
||||
AttachProcessesToUnit(in s unit_name,
|
||||
in s subcgroup,
|
||||
in au pids);
|
||||
RemoveSubgroupFromUnit(in s unit_name,
|
||||
in s subcgroup,
|
||||
in t flags);
|
||||
AbandonScope(in s name);
|
||||
GetJob(in u id,
|
||||
out o job);
|
||||
@@ -870,6 +873,8 @@ node /org/freedesktop/systemd1 {
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="AttachProcessesToUnit()"/>
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="RemoveSubgroupFromUnit()"/>
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="AbandonScope()"/>
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="GetJob()"/>
|
||||
@@ -1599,6 +1604,13 @@ node /org/freedesktop/systemd1 {
|
||||
parameters. The possible values are <literal>configuration</literal>, <literal>state</literal>,
|
||||
<literal>logs</literal>, <literal>cache</literal>, <literal>runtime</literal>,
|
||||
<literal>fdstore</literal>, and <literal>all</literal>.</para>
|
||||
|
||||
<para><function>RemoveSubgroupFromUnit()</function> removes a subcgroup belonging to a unit's
|
||||
cgroup. Takes three arguments: the unit name (if empty defaults to the caller's unit), a cgroup path
|
||||
(which must start start with a slash <literal>/</literal>), which is taken relative to the unit's
|
||||
cgroup, and a flags argument (which must be zero for now). This is primarily useful for unprivileged
|
||||
service managers to ask the system service manager for removal of subcgroups it manages, in case one
|
||||
was delegated to other UIDs.</para>
|
||||
</refsect2>
|
||||
|
||||
<refsect2>
|
||||
@@ -2704,6 +2716,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice {
|
||||
GetProcesses(out a(sus) processes);
|
||||
AttachProcesses(in s subcgroup,
|
||||
in au pids);
|
||||
RemoveSubgroup(in s subcgroup,
|
||||
in t flags);
|
||||
properties:
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
||||
readonly s Type = '...';
|
||||
@@ -3398,6 +3412,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice {
|
||||
|
||||
<!--method AttachProcesses is not documented!-->
|
||||
|
||||
<!--method RemoveSubgroup is not documented!-->
|
||||
|
||||
<!--property Type is not documented!-->
|
||||
|
||||
<!--property ExitType is not documented!-->
|
||||
@@ -4006,6 +4022,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice {
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="AttachProcesses()"/>
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="RemoveSubgroup()"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="Type"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="ExitType"/>
|
||||
@@ -4901,6 +4919,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2esocket {
|
||||
GetProcesses(out a(sus) processes);
|
||||
AttachProcesses(in s subcgroup,
|
||||
in au pids);
|
||||
RemoveSubgroup(in s subcgroup,
|
||||
in t flags);
|
||||
properties:
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
||||
readonly s BindIPv6Only = '...';
|
||||
@@ -5592,6 +5612,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2esocket {
|
||||
|
||||
<!--method AttachProcesses is not documented!-->
|
||||
|
||||
<!--method RemoveSubgroup is not documented!-->
|
||||
|
||||
<!--property BindIPv6Only is not documented!-->
|
||||
|
||||
<!--property Backlog is not documented!-->
|
||||
@@ -6206,6 +6228,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2esocket {
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="AttachProcesses()"/>
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="RemoveSubgroup()"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="BindIPv6Only"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="Backlog"/>
|
||||
@@ -7001,6 +7025,8 @@ node /org/freedesktop/systemd1/unit/home_2emount {
|
||||
GetProcesses(out a(sus) processes);
|
||||
AttachProcesses(in s subcgroup,
|
||||
in au pids);
|
||||
RemoveSubgroup(in s subcgroup,
|
||||
in t flags);
|
||||
properties:
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("const")
|
||||
readonly s Where = '...';
|
||||
@@ -7601,6 +7627,8 @@ node /org/freedesktop/systemd1/unit/home_2emount {
|
||||
|
||||
<!--method AttachProcesses is not documented!-->
|
||||
|
||||
<!--method RemoveSubgroup is not documented!-->
|
||||
|
||||
<!--property Where is not documented!-->
|
||||
|
||||
<!--property What is not documented!-->
|
||||
@@ -8141,6 +8169,8 @@ node /org/freedesktop/systemd1/unit/home_2emount {
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="AttachProcesses()"/>
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="RemoveSubgroup()"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="Where"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="What"/>
|
||||
@@ -8991,6 +9021,8 @@ node /org/freedesktop/systemd1/unit/dev_2dsda3_2eswap {
|
||||
GetProcesses(out a(sus) processes);
|
||||
AttachProcesses(in s subcgroup,
|
||||
in au pids);
|
||||
RemoveSubgroup(in s subcgroup,
|
||||
in t flags);
|
||||
properties:
|
||||
readonly s What = '...';
|
||||
readonly i Priority = ...;
|
||||
@@ -9577,6 +9609,8 @@ node /org/freedesktop/systemd1/unit/dev_2dsda3_2eswap {
|
||||
|
||||
<!--method AttachProcesses is not documented!-->
|
||||
|
||||
<!--method RemoveSubgroup is not documented!-->
|
||||
|
||||
<!--property What is not documented!-->
|
||||
|
||||
<!--property Priority is not documented!-->
|
||||
@@ -10103,6 +10137,8 @@ node /org/freedesktop/systemd1/unit/dev_2dsda3_2eswap {
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="AttachProcesses()"/>
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="RemoveSubgroup()"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="What"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="Priority"/>
|
||||
@@ -10805,6 +10841,8 @@ node /org/freedesktop/systemd1/unit/system_2eslice {
|
||||
GetProcesses(out a(sus) processes);
|
||||
AttachProcesses(in s subcgroup,
|
||||
in au pids);
|
||||
RemoveSubgroup(in s subcgroup,
|
||||
in t flags);
|
||||
properties:
|
||||
@org.freedesktop.DBus.Property.EmitsChangedSignal("false")
|
||||
readonly s Slice = '...';
|
||||
@@ -11004,6 +11042,8 @@ node /org/freedesktop/systemd1/unit/system_2eslice {
|
||||
|
||||
<!--method AttachProcesses is not documented!-->
|
||||
|
||||
<!--method RemoveSubgroup is not documented!-->
|
||||
|
||||
<!--property Slice is not documented!-->
|
||||
|
||||
<!--property ControlGroupId is not documented!-->
|
||||
@@ -11196,6 +11236,8 @@ node /org/freedesktop/systemd1/unit/system_2eslice {
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="AttachProcesses()"/>
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="RemoveSubgroup()"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="Slice"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="ControlGroup"/>
|
||||
@@ -11411,6 +11453,8 @@ node /org/freedesktop/systemd1/unit/session_2d1_2escope {
|
||||
GetProcesses(out a(sus) processes);
|
||||
AttachProcesses(in s subcgroup,
|
||||
in au pids);
|
||||
RemoveSubgroup(in s subcgroup,
|
||||
in t flags);
|
||||
signals:
|
||||
RequestStop();
|
||||
properties:
|
||||
@@ -11636,6 +11680,8 @@ node /org/freedesktop/systemd1/unit/session_2d1_2escope {
|
||||
|
||||
<!--method AttachProcesses is not documented!-->
|
||||
|
||||
<!--method RemoveSubgroup is not documented!-->
|
||||
|
||||
<!--property RuntimeMaxUSec is not documented!-->
|
||||
|
||||
<!--property RuntimeRandomizedExtraUSec is not documented!-->
|
||||
@@ -11850,6 +11896,8 @@ node /org/freedesktop/systemd1/unit/session_2d1_2escope {
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="AttachProcesses()"/>
|
||||
|
||||
<variablelist class="dbus-method" generated="True" extra-ref="RemoveSubgroup()"/>
|
||||
|
||||
<variablelist class="dbus-signal" generated="True" extra-ref="RequestStop()"/>
|
||||
|
||||
<variablelist class="dbus-property" generated="True" extra-ref="Controller"/>
|
||||
@@ -12254,6 +12302,7 @@ $ gdbus introspect --system --dest org.freedesktop.systemd1 \
|
||||
<varname>ShutdownStartTimestamp</varname>,
|
||||
<varname>ShutdownStartTimestampMonotonic</varname>, and
|
||||
<varname>SoftRebootsCount</varname> were added in version 256.</para>
|
||||
<para><function>RemoveSubgroupFromUnit()</function> was added in version 258.</para>
|
||||
</refsect2>
|
||||
<refsect2>
|
||||
<title>Unit Objects</title>
|
||||
@@ -12320,7 +12369,7 @@ $ gdbus introspect --system --dest org.freedesktop.systemd1 \
|
||||
<varname>ProtectControlGroupsEx</varname>,
|
||||
<varname>PrivateUsersEx</varname>, and
|
||||
<varname>PrivatePIDs</varname> were added in version 257.</para>
|
||||
<para><varname>ProtectHostnameEx</varname> was added in version 258.</para>
|
||||
<para><varname>ProtectHostnameEx</varname> and <function>RemoveSubGroup()</function> were added in version 258.</para>
|
||||
</refsect2>
|
||||
<refsect2>
|
||||
<title>Socket Unit Objects</title>
|
||||
@@ -12364,7 +12413,7 @@ $ gdbus introspect --system --dest org.freedesktop.systemd1 \
|
||||
<varname>ManagedOOMMemoryPressureDurationUSec</varname>,
|
||||
<varname>ProtectControlGroupsEx</varname>, and
|
||||
<varname>PrivatePIDs</varname> were added in version 257.</para>
|
||||
<para><varname>ProtectHostnameEx</varname> was added in version 258.</para>
|
||||
<para><varname>ProtectHostnameEx</varname> and <function>RemoveSubgroup()</function> were added in version 258.</para>
|
||||
</refsect2>
|
||||
<refsect2>
|
||||
<title>Mount Unit Objects</title>
|
||||
@@ -12405,7 +12454,7 @@ $ gdbus introspect --system --dest org.freedesktop.systemd1 \
|
||||
<varname>ManagedOOMMemoryPressureDurationUSec</varname>,
|
||||
<varname>ProtectControlGroupsEx</varname>, and
|
||||
<varname>PrivatePIDs</varname> were added in version 257.</para>
|
||||
<para><varname>ProtectHostnameEx</varname> was added in version 258.</para>
|
||||
<para><varname>ProtectHostnameEx</varname> and <function>RemoveSubgroup()</function> was added in version 258.</para>
|
||||
</refsect2>
|
||||
<refsect2>
|
||||
<title>Swap Unit Objects</title>
|
||||
@@ -12446,7 +12495,7 @@ $ gdbus introspect --system --dest org.freedesktop.systemd1 \
|
||||
<varname>ManagedOOMMemoryPressureDurationUSec</varname>,
|
||||
<varname>ProtectControlGroupsEx</varname>, and
|
||||
<varname>PrivatePIDs</varname> were added in version 257.</para>
|
||||
<para><varname>ProtectHostnameEx</varname> was added in version 258.</para>
|
||||
<para><varname>ProtectHostnameEx</varname> and <function>RemoveSubgroup()</function> were added in version 258.</para>
|
||||
</refsect2>
|
||||
<refsect2>
|
||||
<title>Slice Unit Objects</title>
|
||||
@@ -12472,6 +12521,7 @@ $ gdbus introspect --system --dest org.freedesktop.systemd1 \
|
||||
<varname>EffectiveTasksMax</varname>, and
|
||||
<varname>MemoryZSwapWriteback</varname> were added in version 256.</para>
|
||||
<para><varname>ManagedOOMMemoryPressureDurationUSec</varname> was added in version 257.</para>
|
||||
<para><function>RemoveSubgroup()</function> was added in version 258.</para>
|
||||
</refsect2>
|
||||
<refsect2>
|
||||
<title>Scope Unit Objects</title>
|
||||
@@ -12498,6 +12548,7 @@ $ gdbus introspect --system --dest org.freedesktop.systemd1 \
|
||||
<varname>EffectiveTasksMax</varname>, and
|
||||
<varname>MemoryZSwapWriteback</varname> were added in version 256.</para>
|
||||
<para><varname>ManagedOOMMemoryPressureDurationUSec</varname> was added in version 257.</para>
|
||||
<para><function>RemoveSubgroup()</function> was added in version 258.</para>
|
||||
</refsect2>
|
||||
<refsect2>
|
||||
<title>Job Objects</title>
|
||||
|
||||
Reference in New Issue
Block a user