diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/ima-setup.c | 15 | ||||
| -rw-r--r-- | src/core/mount.c | 3 | ||||
| -rw-r--r-- | src/login/71-seat.rules.in | 1 | ||||
| -rw-r--r-- | src/login/logind-dbus.c | 1 | 
4 files changed, 18 insertions, 2 deletions
| diff --git a/src/core/ima-setup.c b/src/core/ima-setup.c index 7721b3ecaf..4d8b638115 100644 --- a/src/core/ima-setup.c +++ b/src/core/ima-setup.c @@ -24,9 +24,10 @@  #include <unistd.h>  #include <errno.h>  #include <fcntl.h> +#include <sys/stat.h> +#include <sys/mman.h>  #include "ima-setup.h" -#include "copy.h"  #include "util.h"  #include "log.h" @@ -39,6 +40,8 @@ int ima_setup(void) {  #ifdef HAVE_IMA          _cleanup_close_ int policyfd = -1, imafd = -1; +        struct stat st; +        char *policy;          if (access(IMA_SECFS_DIR, F_OK) < 0) {                  log_debug("IMA support is disabled in the kernel, ignoring."); @@ -63,12 +66,20 @@ int ima_setup(void) {                  return 0;          } -        r = copy_bytes(policyfd, imafd, (off_t) -1, false); +        if (fstat(policyfd, &st) < 0) +                return log_error_errno(errno, "Failed to fstat "IMA_POLICY_PATH": %m"); + +        policy = mmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, policyfd, 0); +        if (policy == MAP_FAILED) +                return log_error_errno(errno, "Failed to mmap "IMA_POLICY_PATH": %m"); + +        r = loop_write(imafd, policy, (size_t) st.st_size, false);          if (r < 0)                  log_error_errno(r, "Failed to load the IMA custom policy file "IMA_POLICY_PATH": %m");          else                  log_info("Successfully loaded the IMA custom policy "IMA_POLICY_PATH"."); +        munmap(policy, st.st_size);  #endif /* HAVE_IMA */          return r;  } diff --git a/src/core/mount.c b/src/core/mount.c index ba1dcf1e85..851b41351e 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -1522,6 +1522,9 @@ static int mount_load_proc_self_mountinfo(Manager *m, bool set_flags) {                  options = mnt_fs_get_options(fs);                  fstype = mnt_fs_get_fstype(fs); +                if (!device || !path) +                        continue; +                  if (cunescape(device, UNESCAPE_RELAX, &d) < 0)                          return log_oom(); diff --git a/src/login/71-seat.rules.in b/src/login/71-seat.rules.in index ad26acbbb3..ab7b66f651 100644 --- a/src/login/71-seat.rules.in +++ b/src/login/71-seat.rules.in @@ -11,6 +11,7 @@ TAG=="uaccess", SUBSYSTEM!="sound", TAG+="seat"  SUBSYSTEM=="sound", KERNEL=="card*", TAG+="seat"  SUBSYSTEM=="input", KERNEL=="input*", TAG+="seat"  SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", TAG+="seat", TAG+="master-of-seat" +SUBSYSTEM=="drm", KERNEL=="card[0-9]*", TAG+="seat", TAG+="master-of-seat"  SUBSYSTEM=="usb", ATTR{bDeviceClass}=="09", TAG+="seat"  # 'Plugable' USB hub, sound, network, graphics adapter diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c index 10a9df0961..b272401e5b 100644 --- a/src/login/logind-dbus.c +++ b/src/login/logind-dbus.c @@ -2522,6 +2522,7 @@ int match_job_removed(sd_bus_message *message, void *userdata, sd_bus_error *err                  session_jobs_reply(session, unit, result);                  session_save(session); +                user_save(session->user);                  session_add_to_gc_queue(session);          } | 
