dcavalca / rpms / systemd

Forked from rpms/systemd 2 years ago
Clone
Blob Blame History Raw
From 0312d87f70353a33f305602faef6c9248dfe87d1 Mon Sep 17 00:00:00 2001
From: Kay Sievers <kay@vrfy.org>
Date: Wed, 2 Apr 2014 15:47:09 +0200
Subject: [PATCH] udev: do not export "static node" tags for non-existing
 devices

(cherry picked from commit ca2bb1606a170ce2e45de1345b0119bd220f4f0d)
(cherry picked from commit 47d8687d524f67a392d6a8cb189d2ad90c464347)
---
 src/udev/udev-rules.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index c9817733d8..392ae86fb5 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -2572,10 +2572,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) {
@@ -2605,11 +2610,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;