Re: [PATCH] lldpad_t tries to automatically disable LLDP on network card but is blocked

Chris PeBenito <[email protected]> Thu, 13 Mar 2025 15:18:49 -0400
Newsgroups org.kernel.vger.selinux-refpolicy
Message-ID <[email protected]>
On 3/13/2025 11:32 AM, Chris PeBenito wrote:
> On 3/13/2025 10:29 AM, bmare wrote:
>> When running lldp daemon on a server, you can have the following error 
>> message:
>>
>> """
>>
>> i40e driver detected for ens10f1, disabling LLDP in firmware
>>
>> cannot open /sys/kernel/debug/i40e/0000:0f:00.1/command to disable 
>> LLDP in firmware for ens10f1: Permission Denied
>>
>> """
>>
>> In the selinux logs, you can see lldp is trying to open a specific 
>> file and write to it
>>
>> """
>>
>> avc:  denied  { write } for  pid=2264219 comm="lldpd" name="command" 
>> dev="debugfs" ino=109
>>
>> avc:  denied  { open } for  pid=2264219 comm="lldpd" path="/sys/ 
>> kernel/ debug/i40e/0000:0f:00.0/command"
>>
>> """
>>
>>  > LLDP needs the following authorization: "allow lldpad_t 
>> debugfs_t:file { open write };"
>>
>> In fact, if you are trying to configure and run a local lldp daemon, 
>> you don't wan't the network card to run LLDP as well, both will 
>> conflicts, and lldp daemon is probably configured to give better 
>> informations for network administrators (hostname of the server for 
>> example). It could be a good idea to (optionally ?) allow lldp daemon 
>> to automatically unconfigure LLDP on network cards.
>>
>> I've tried to create a patch doing this (create a boolean, add 
>> permissions to read and write do debugfs files). It could be 
>> simplified to allow writing to debugfs without a boolean, but I feels 
>> like it could be a security issue and an optional boolean enabled only 
>> if needed is a better option.
> 
> I definitely agree that the debugfs use is problematic and we would want 
> this to be conditional in the policy.
> 
> The fact that there is no standard interface for doing this, such as in 
> sysfs, seems like an issue in the driver(s) too.  Configuring a device 
> shouldn't go through debugfs AFAIK.
> 
> 
>> --- policy/modules/services/lldpad.te.old    2025-03-13 
>> 15:16:38.982728194 +0100
>> +++ policy/modules/services/lldpad.te.new    2025-03-13 
>> 15:17:03.111728930 +0100
>> @@ -4,6 +4,16 @@
>>  #
>>  # Declarations
>>  #
>> +## <desc>
>> +##      <p>
>> +##      Allow lldp daemonn to write
>> +##      to debugfs.
>> +##      Permit lldp to automatically
>> +##      disable LLDP on physical
>> +##      network card
>> +##      </p>
>> +## </desc>
>> +gen_tunable(allow_lldpad_write_debugfs, false)
>>
>>  type lldpad_t;
>>  type lldpad_exec_t;
>> @@ -60,3 +70,8 @@
>>  optional_policy(`
>>      fcoe_dgram_send_fcoemon(lldpad_t)
>>  ')
>> +
>> +tunable_policy(`allow_lldpad_write_debugfs',`
>> +        kernel_manage_debugfs(lldpad_t)
> 
> Based on the logs you provided, this is excessive access, so I'd make a 
> new kernel_write_debugfs() interface with only write access.

I posted a revised version of this as a PR here: 
https://github.com/SELinuxProject/refpolicy/pull/873

Let me know if there are any issues -- here on the ML or as comments in 
GitHub.



-- 
Chris PeBenito