return (supported = false);
r = lsm_supported("bpf");
+ if (r == -ENOPKG) {
+ log_info_errno(r, "bpf-restrict-fs: securityfs not mounted, BPF LSM support not available.");
+ return (supported = false);
+ }
if (r < 0) {
log_warning_errno(r, "bpf-restrict-fs: Can't determine whether the BPF LSM module is used: %m");
return (supported = false);
int r;
r = lsm_supported("bpf");
+ if (r == -ENOPKG)
+ /* We propagate this as EOPNOTSUPP! */
+ return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "bpf-lsm support not available, as securityfs is not mounted.");
if (r < 0)
- return r;
+ return log_error_errno(r, "Failed to check if bpf-lsm support is available: %m");
if (r == 0)
return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), "bpf-lsm not supported, can't lock down user namespace.");
#include "extract-word.h"
#include "fileio.h"
#include "lsm-util.h"
+#include "mountpoint-util.h"
#include "string-util.h"
int lsm_supported(const char *name) {
assert(name);
r = read_one_line_file("/sys/kernel/security/lsm", &lsm_list);
- if (r == -ENOENT) /* LSM support not available at all? */
+ if (r == -ENOENT) { /* LSM support not available at all? */
+ /* If securityfs is not mounted, then propagate this as ENOPKG, to indicate that LSM might be
+ * available we just can't determine it */
+
+ r = path_is_mount_point("/sys/kernel/security");
+ if (r < 0 && r != -ENOENT)
+ return log_debug_errno(r, "Failed to check if /sys/kernel/security is a mount point: %m");
+ if (r == 0)
+ return log_debug_errno(SYNTHETIC_ERRNO(ENOPKG), "/sys/kernel/security is not mounted, can't determine LSM status.");
+
return false;
+ }
if (r < 0)
return log_debug_errno(r, "Failed to read /sys/kernel/security/lsm: %m");