summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKay Sievers <kay.sievers@vrfy.org>2010-05-12 08:46:56 +0200
committerKay Sievers <kay.sievers@vrfy.org>2010-05-12 08:46:56 +0200
commite85f5ec15f1c0a820cc81b422c2fa157d9805896 (patch)
tree50b5135d077fb8b02377a955acfd91aad5497154
parent1ecfdba0ddfb09a7e5c463466a2c0b1e9176c458 (diff)
reset process priority before executing RUN+=
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=581235
-rw-r--r--libudev/libudev-private.h2
-rw-r--r--libudev/libudev-util-private.c4
-rw-r--r--udev/udev-event.c2
-rw-r--r--udev/udev-rules.c4
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 {