diff options
-rw-r--r-- | libudev/libudev-private.h | 2 | ||||
-rw-r--r-- | libudev/libudev-util-private.c | 4 | ||||
-rw-r--r-- | udev/udev-event.c | 2 | ||||
-rw-r--r-- | udev/udev-rules.c | 4 |
4 files changed, 7 insertions, 5 deletions
diff --git a/libudev/libudev-private.h b/libudev/libudev-private.h index 7132357ac2..3758c5b1b4 100644 --- a/libudev/libudev-private.h +++ b/libudev/libudev-private.h @@ -217,7 +217,7 @@ uid_t util_lookup_user(struct udev *udev, const char *user); gid_t util_lookup_group(struct udev *udev, const char *group); int util_run_program(struct udev *udev, const char *command, char **envp, char *result, size_t ressize, size_t *reslen, - const sigset_t *sigmask); + const sigset_t *sigmask, bool reset_prio); int util_resolve_subsys_kernel(struct udev *udev, const char *string, char *result, size_t maxsize, int read_value); diff --git a/libudev/libudev-util-private.c b/libudev/libudev-util-private.c index c05c157575..8c535125a8 100644 --- a/libudev/libudev-util-private.c +++ b/libudev/libudev-util-private.c @@ -254,7 +254,7 @@ int util_resolve_subsys_kernel(struct udev *udev, const char *string, int util_run_program(struct udev *udev, const char *command, char **envp, char *result, size_t ressize, size_t *reslen, - const sigset_t *sigmask) + const sigset_t *sigmask, bool reset_prio) { int status; int outpipe[2] = {-1, -1}; @@ -349,6 +349,8 @@ int util_run_program(struct udev *udev, const char *command, char **envp, if (sigmask) sigprocmask(SIG_SETMASK, sigmask, NULL); + if (reset_prio) + setpriority(PRIO_PROCESS, 0, 0); execve(argv[0], argv, envp); if (errno == ENOENT || errno == ENOTDIR) { diff --git a/udev/udev-event.c b/udev/udev-event.c index 1be3f74ea3..bcd0a8f13d 100644 --- a/udev/udev-event.c +++ b/udev/udev-event.c @@ -677,7 +677,7 @@ int udev_event_execute_run(struct udev_event *event, const sigset_t *sigmask) udev_event_apply_format(event, cmd, program, sizeof(program)); envp = udev_device_get_properties_envp(event->dev); - if (util_run_program(event->udev, program, envp, NULL, 0, NULL, sigmask) != 0) { + if (util_run_program(event->udev, program, envp, NULL, 0, NULL, sigmask, true) != 0) { if (udev_list_entry_get_flags(list_entry)) err = -1; } diff --git a/udev/udev-rules.c b/udev/udev-rules.c index b58ea8c680..8fc804a3c2 100644 --- a/udev/udev-rules.c +++ b/udev/udev-rules.c @@ -747,7 +747,7 @@ static int import_program_into_properties(struct udev_device *dev, const char *p char *line; envp = udev_device_get_properties_envp(dev); - if (util_run_program(udev, program, envp, result, sizeof(result), &reslen, NULL) != 0) + if (util_run_program(udev, program, envp, result, sizeof(result), &reslen, NULL, false) != 0) return -1; line = result; @@ -2255,7 +2255,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules, struct udev_event *event program, &rules->buf[rule->rule.filename_off], rule->rule.filename_line); - if (util_run_program(event->udev, program, envp, result, sizeof(result), NULL, NULL) != 0) { + if (util_run_program(event->udev, program, envp, result, sizeof(result), NULL, NULL, false) != 0) { if (cur->key.op != OP_NOMATCH) goto nomatch; } else { |