Re: [PATCH] sepolicy: Allow bluetooth to send D-Bus messages to systemd
"Christopher J. PeBenito" <[email protected]> Mon, 13 Apr 2026 08:32:48 -0400
| Newsgroups | org.kernel.vger.selinux-refpolicy |
|---|---|
| Message-ID | <[email protected]> |
On 4/9/26 7:36 AM, Wei Deng wrote:
> On 4/7/2026 8:40 PM, Christopher J. PeBenito wrote:
>> On 4/4/26 5:19 AM, Wei Deng wrote:
>>> On 4/3/2026 10:01 PM, Christopher J. PeBenito wrote:
>>>> On 4/3/26 2:31 AM, Wei Deng wrote:
>>>>> Add init_dbus_chat() for bluetooth_t to allow bluetoothd to send
>>>>> D-Bus method_return messages back to systemd (init_t) over the
>>>>> system bus.
>>>>>
>>>>> Below avc denial is fixed with this patch:
>>>>>
>>>>> avc: denied { send_msg } for msgtype=method_return dest=:1.11
>>>>> scontext=system_u:system_r:bluetooth_t:s0
>>>>> tcontext=system_u:system_r:init_t:s0 tclass=dbus permissive=0
>>>>>
>>>>> Signed-off-by: Wei Deng <[email protected]>
>>>>> ---
>>>>> policy/modules/services/bluetooth.te | 1 +
>>>>> 1 file changed, 1 insertion(+)
>>>>>
>>>>> diff --git a/policy/modules/services/bluetooth.te b/policy/modules/services/bluetooth.te
>>>>> index ceb42d147..a73cb5db0 100644
>>>>> --- a/policy/modules/services/bluetooth.te
>>>>> +++ b/policy/modules/services/bluetooth.te
>>>>> @@ -136,6 +136,7 @@ userdom_dontaudit_search_user_home_dirs(bluetooth_t)
>>>>> optional_policy(`
>>>>> dbus_system_bus_client(bluetooth_t)
>>>>> dbus_connect_system_bus(bluetooth_t)
>>>>> + init_dbus_chat(bluetooth_t)
>>>>> init_dbus_send_script(bluetooth_t)
>>>>> optional_policy(`
>>>> Can you confirm this response is going to systemd/pid1? Is there a fuller set of log messages corresponding to this denial? The init_dbus_send_script() makes me wonder.
>>> The two log entries list here:
>>>
>>> type=SERVICE_START msg=audit(19.419:292): pid=1 uid=0
>>> subj=system_u:system_r:init_t:s0
>>> msg='unit=bluetooth comm="systemd"
>>> exe="/usr/lib/systemd/systemd" ... res=success'
>>>
>>> type=USER_AVC msg=audit(19.547:319):
>>> subj=system_u:system_r:system_dbusd_t:s0
>>> msg='avc: denied { send_msg } for msgtype=method_return
>>> dest=:1.11 spid=684 tpid=843
>>> scontext=system_u:system_r:bluetooth_t:s0
>>> tcontext=system_u:system_r:init_t:s0
>>> tclass=dbus permissive=0
>>> exe="/usr/bin/dbus-daemon"'
>>>
>>>> Can you confirm this response is going to systemd/pid1?
>>>> Is there a fuller set of log messages corresponding to this denial?
>>> Yes. The SERVICE_START entry shows pid=1 with
>>> exe="/usr/lib/systemd/systemd" running under init_t, confirming that
>>> init_t is systemd's SELinux domain.
>> These two audit messages are not related, as they have different event IDs (292 vs 319). Additionally, SERVICE_START messages are expected to come from pid=1.
>>
>> Can you confirm this response is going to systemd/pid1?
>> Is there a fuller set of log messages corresponding to
>> this denial?
> You are right. I apologize for the confusion. The two audit
> messages are unrelated, as they have different event IDs.
>
> Here is the full AVC denial:
>
> type=USER_AVC msg=audit(1773416627.807:455):
> pid=801 uid=997 auid=4294967295 ses=4294967295
> subj=system_u:system_r:system_dbusd_t:s0
> msg='avc: denied { send_msg } for
> msgtype=method_return dest=:1.27
> spid=1942 tpid=1944
> scontext=system_u:system_r:bluetooth_t:s0
> tcontext=system_u:system_r:init_t:s0
> tclass=dbus permissive=0
> exe="/usr/bin/dbus-daemon"'
>
> The tpid=1944 is obexd, not systemd/pid1, as confirmed by:
>
> ps -p 1944 -o pid,ppid,comm,exe,label
> PID PPID COMMAND EXE LABEL
> 1944 1 obexd /usr/libexec/bluetooth/obexd system_u:system_r:init_t:s0
>
> So the real issue is not bluetooth_t -> init_t (systemd),
> but bluetooth_t -> init_t (obexd running in the wrong domain).
>
> The root cause is that obex.te currently uses
> userdom_user_application_domain(), which does not create a
> domain transition from init_t. obexd therefore inherits
> systemd's domain instead of transitioning to obex_t.
Thanks for working that out. It would be acceptable to add this in
refpolicy, but I think it should be tunable. It's not a common case
configuration.
--
Chris PeBenito