1
0
mirror of https://github.com/systemd/systemd.git synced 2024-10-28 20:25:38 +03:00

[PATCH] add MANAGED_EVENT to the forked udev environment

This will prevent a loop, if udev sends events back into the
daemon.
This commit is contained in:
kay.sievers@vrfy.org 2004-11-23 06:14:21 +01:00 committed by Greg KH
parent a97b06483e
commit 6f59ed5547
3 changed files with 10 additions and 3 deletions

View File

@ -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 */

View File

@ -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[];
};

View File

@ -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");