From: Kay Sievers Date: Wed, 2 Apr 2014 13:47:09 +0000 (+0200) Subject: udev: do not export "static node" tags for non-existing devices X-Git-Tag: v213~487 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=ca2bb1606a170ce2e45de1345b0119bd220f4f0d udev: do not export "static node" tags for non-existing devices --- diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c index 26302640a..17f47f261 100644 --- a/src/udev/udev-rules.c +++ b/src/udev/udev-rules.c @@ -2555,10 +2555,15 @@ int udev_rules_apply_static_dev_perms(struct udev_rules *rules) struct stat stats; /* we assure, that the permissions tokens are sorted before the static token */ + if (mode == 0 && uid == 0 && gid == 0 && tags == NULL) goto next; strscpyl(device_node, sizeof(device_node), "/dev/", rules_str(rules, cur->key.value_off), NULL); + if (stat(device_node, &stats) != 0) + break; + if (!S_ISBLK(stats.st_mode) && !S_ISCHR(stats.st_mode)) + break; /* export the tags to a directory as symlinks, allowing otherwise dead nodes to be tagged */ if (tags) { @@ -2588,11 +2593,6 @@ int udev_rules_apply_static_dev_perms(struct udev_rules *rules) if (mode == 0 && uid == 0 && gid == 0) break; - if (stat(device_node, &stats) != 0) - break; - if (!S_ISBLK(stats.st_mode) && !S_ISCHR(stats.st_mode)) - break; - if (mode == 0) { if (gid > 0) mode = 0660;