kms: Add allow/deny-listing of drm devices

This commit is contained in:
Victoria Brekenfeld 2025-05-20 18:29:19 +02:00 committed by Victoria Brekenfeld
parent b5d5479b86
commit 913ed90b04
2 changed files with 203 additions and 0 deletions

View file

@ -149,6 +149,48 @@ impl State {
return Ok(());
}
if let Some(allowlist) = dev_list_var("COSMIC_DRM_ALLOW_DEVICES") {
let mut matched = false;
if let Ok(node) = DrmNode::from_dev_id(dev) {
let node = node
.node_with_type(NodeType::Render)
.map(|res| res.ok())
.flatten()
.unwrap_or(node);
for ident in allowlist {
if ident.matches(&node) {
matched = true;
break;
}
}
if !matched {
info!(
"Skipping device {} due to COSMIC_DRM_ALLOW_DEVICE list.",
path.display()
);
return Ok(());
}
}
}
if let Some(blocklist) = dev_list_var("COSMIC_DRM_BLOCK_DEVICES") {
if let Ok(node) = DrmNode::from_dev_id(dev) {
let node = node
.node_with_type(NodeType::Render)
.map(|res| res.ok())
.flatten()
.unwrap_or(node);
for ident in blocklist {
if ident.matches(&node) {
info!(
"Skipping device {} due to COSMIC_DRM_BLOCK_DEVICE list.",
path.display()
);
return Ok(());
}
}
}
}
let fd = DrmDeviceFd::new(DeviceFd::from(
self.backend
.kms()