diff options
author | kay.sievers@vrfy.org <kay.sievers@vrfy.org> | 2004-11-23 06:14:21 +0100 |
---|---|---|
committer | Greg KH <gregkh@suse.de> | 2005-04-26 22:35:00 -0700 |
commit | 6f59ed5547426ddaf6bedf574d19a19f6bd20e1f (patch) | |
tree | d2df87bc0296dea39bc826d76b8d6e964aebe130 | |
parent | a97b06483e3006a7d21e534694e8d67d3b3c694d (diff) |
[PATCH] add MANAGED_EVENT to the forked udev environment
This will prevent a loop, if udev sends events back into the
daemon.
-rw-r--r-- | udevd.c | 3 | ||||
-rw-r--r-- | udevd.h | 4 | ||||
-rw-r--r-- | udevsend.c | 6 |
3 files changed, 10 insertions, 3 deletions
@@ -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 */ @@ -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 9f324077b3..7d865573c2 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"); |