diff options
-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"); |