summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2019-01-07 14:30:55 +0900
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2019-01-08 10:31:19 +0100
commitc494b739a47359ab2697482f52545e2a6d1c86ad (patch)
tree2264fd22c6e9c80179db3bd377ebffa9f824f7cf /src
parent787a133f2d934d9cb01a50ee86ea5c51926c6ef8 (diff)
downloadsystemd-c494b739a47359ab2697482f52545e2a6d1c86ad.tar.gz
udevadm: refuse to run trigger, control, settle and monitor commands in chroot
Closes #11333.
Diffstat (limited to 'src')
-rw-r--r--src/udev/udevadm-control.c6
-rw-r--r--src/udev/udevadm-monitor.c6
-rw-r--r--src/udev/udevadm-settle.c6
-rw-r--r--src/udev/udevadm-trigger.c6
4 files changed, 24 insertions, 0 deletions
diff --git a/src/udev/udevadm-control.c b/src/udev/udevadm-control.c
index d9320418cf..cb9b4cc89e 100644
--- a/src/udev/udevadm-control.c
+++ b/src/udev/udevadm-control.c
@@ -26,6 +26,7 @@
#include "udevadm.h"
#include "udev-ctrl.h"
#include "util.h"
+#include "virt.h"
static int help(void) {
printf("%s control OPTION\n\n"
@@ -70,6 +71,11 @@ int control_main(int argc, char *argv[], void *userdata) {
if (r < 0)
return r;
+ if (running_in_chroot() > 0) {
+ log_info("Running in chroot, ignoring request.");
+ return 0;
+ }
+
if (argc <= 1)
log_error("Option missing");
diff --git a/src/udev/udevadm-monitor.c b/src/udev/udevadm-monitor.c
index f7737d0790..f1b3e25cdd 100644
--- a/src/udev/udevadm-monitor.c
+++ b/src/udev/udevadm-monitor.c
@@ -17,6 +17,7 @@
#include "signal-util.h"
#include "string-util.h"
#include "udevadm.h"
+#include "virt.h"
static bool arg_show_property = false;
static bool arg_print_kernel = false;
@@ -210,6 +211,11 @@ int monitor_main(int argc, char *argv[], void *userdata) {
if (r <= 0)
goto finalize;
+ if (running_in_chroot() > 0) {
+ log_info("Running in chroot, ignoring request.");
+ return 0;
+ }
+
/* Callers are expecting to see events as they happen: Line buffering */
setlinebuf(stdout);
diff --git a/src/udev/udevadm-settle.c b/src/udev/udevadm-settle.c
index 4ae237d430..9b05e9acf0 100644
--- a/src/udev/udevadm-settle.c
+++ b/src/udev/udevadm-settle.c
@@ -18,6 +18,7 @@
#include "udevadm.h"
#include "udev-ctrl.h"
#include "util.h"
+#include "virt.h"
static usec_t arg_timeout = 120 * USEC_PER_SEC;
static const char *arg_exists = NULL;
@@ -88,6 +89,11 @@ int settle_main(int argc, char *argv[], void *userdata) {
if (r <= 0)
return r;
+ if (running_in_chroot() > 0) {
+ log_info("Running in chroot, ignoring request.");
+ return 0;
+ }
+
deadline = now(CLOCK_MONOTONIC) + arg_timeout;
/* guarantee that the udev daemon isn't pre-processing */
diff --git a/src/udev/udevadm-trigger.c b/src/udev/udevadm-trigger.c
index f13a08f3f9..aa9ebd5ac5 100644
--- a/src/udev/udevadm-trigger.c
+++ b/src/udev/udevadm-trigger.c
@@ -15,6 +15,7 @@
#include "strv.h"
#include "udevadm.h"
#include "udevadm-util.h"
+#include "virt.h"
static bool arg_verbose = false;
static bool arg_dry_run = false;
@@ -158,6 +159,11 @@ int trigger_main(int argc, char *argv[], void *userdata) {
bool settle = false;
int c, r;
+ if (running_in_chroot() > 0) {
+ log_info("Running in chroot, ignoring request.");
+ return 0;
+ }
+
r = sd_device_enumerator_new(&e);
if (r < 0)
return r;