From 6f59ed5547426ddaf6bedf574d19a19f6bd20e1f Mon Sep 17 00:00:00 2001 From: "kay.sievers@vrfy.org" Date: Tue, 23 Nov 2004 06:14:21 +0100 Subject: [PATCH] [PATCH] add MANAGED_EVENT to the forked udev environment This will prevent a loop, if udev sends events back into the daemon. --- udevd.c | 3 ++- udevd.h | 4 ++-- udevsend.c | 6 ++++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/udevd.c b/udevd.c index 2337493f..bd36d2c1 100644 --- a/udevd.c +++ b/udevd.c @@ -291,7 +291,7 @@ static void handle_udevsend_msg(int sock) /* copy environment buffer and reconstruct envp */ memcpy(msg->envbuf, usend_msg.envbuf, envbuf_size); bufpos = 0; - for (i = 0; (bufpos < envbuf_size) && (i < HOTPLUG_NUM_ENVP-1); i++) { + for (i = 0; (bufpos < envbuf_size) && (i < HOTPLUG_NUM_ENVP-2); i++) { int keylen; char *key; @@ -314,6 +314,7 @@ static void handle_udevsend_msg(int sock) if (strncmp(key, "SEQNUM=", 7) == 0) msg->seqnum = strtoull(&key[7], NULL, 10); } + msg->envp[i++] = "MANAGED_EVENT=1"; msg->envp[i] = NULL; /* if no seqnum is given, we move straight to exec queue */ diff --git a/udevd.h b/udevd.h index b393a28b..31f07de8 100644 --- a/udevd.h +++ b/udevd.h @@ -36,7 +36,7 @@ struct udevsend_msg { char magic[20]; - char envbuf[HOTPLUG_BUFFER_SIZE]; + char envbuf[HOTPLUG_BUFFER_SIZE+256]; }; struct hotplug_msg { @@ -47,6 +47,6 @@ struct hotplug_msg { char *devpath; char *subsystem; unsigned long long seqnum; - char *envp[HOTPLUG_NUM_ENVP]; + char *envp[HOTPLUG_NUM_ENVP+1]; char envbuf[]; }; diff --git a/udevsend.c b/udevsend.c index 9f324077..7d865573 100644 --- a/udevsend.c +++ b/udevsend.c @@ -132,6 +132,12 @@ int main(int argc, char *argv[], char *envp[]) goto exit; } + /* prevent loops in the scripts we execute */ + if (getenv("MANAGED_EVENT") != NULL) { + dbg("seems that the event source is not the kernel, just exit"); + goto exit; + } + sock = socket(AF_LOCAL, SOCK_DGRAM, 0); if (sock == -1) { dbg("error getting socket"); -- 2.39.5