> This should usually generate a coredump.

I have regenerated the current software on my test system.
last commit: 6ad6d61f9ddd58983b075e4fbece30bae46fac37


Sonne:/home/elfring/Projekte/Bau/systemd # systemctl stop systemd-udevd.service 
systemd-udevd-kernel.socket systemd-udevd-control.socket && gdb ./systemd-udevd
GNU gdb (GDB; openSUSE Factory) 7.9
…
(gdb) set follow-fork-mode child
(gdb) set detach-on-fork off
(gdb) run --debug
Starting program: /home/elfring/Projekte/Bau/systemd/systemd-udevd --debug
…
restoring old watch on '/dev/dm-12'
adding watch on '/dev/dm-12'
seq 2638 queued, 'add' 'usb'
…
(gdb) set print inferior-events on
(gdb) info inferiors              
  Num  Description       Executable        
* 3    <null>            /usr/lib/udev/mtp-probe 
  2    process 5759      /home/elfring/Projekte/Bau/systemd/systemd-udevd 
  1    process 5751      /home/elfring/Projekte/Bau/systemd/systemd-udevd 
(gdb) inferior 2
(gdb) continue
Continuing.
'/usr/lib/udev/mtp-probe /sys/devices/pci0000:00/0000:00:02.0/usb3/3-2 3 
3'(out) '0'
Process '/usr/lib/udev/mtp-probe /sys/devices/pci0000:00/0000:00:02.0/usb3/3-2 
3 3' succeeded.
2638:udev_event_execute_rules:/home/elfring/Projekte/systemd/lokal/src/udev/udev-event.c:896:
 add for 3-2
2638:udev_event_execute_rules:/home/elfring/Projekte/systemd/lokal/src/udev/udev-event.c:905:
 owner set
2638:udev_node_add:/home/elfring/Projekte/systemd/lokal/src/udev/udev-node.c:342:
 handling device node '/dev/bus/usb/003/003', devnum=c189:258, mode=0664, 
uid=0, gid=7
2638:node_permissions_apply:/home/elfring/Projekte/systemd/lokal/src/udev/udev-node.c:281:
 set permissions /dev/bus/usb/003/003, 020664, uid=0, gid=7
2638:node_symlink:/home/elfring/Projekte/systemd/lokal/src/udev/udev-node.c:84: 
creating symlink '/dev/char/189:258' to '../bus/usb/003/003'

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff6fefc78 in vfprintf () from /lib64/libc.so.6
(gdb) bt full
#0  0x00007ffff6fefc78 in vfprintf () from /lib64/libc.so.6
No symbol table info available.
#1  0x00007ffff7016f39 in vsnprintf () from /lib64/libc.so.6
No symbol table info available.
#2  0x000055555559ac64 in log_internalv (level=7, error=0, file=0x5555556118a0 
"/home/elfring/Projekte/systemd/lokal/src/libsystemd/sd-device/device-private.c",
 
    line=1080, func=0x5555556124c0 <__func__.9471> "device_update_db", 
format=0x555555611f40 "%s:%s:%d: created %s file '%s' for '%s'", 
ap=0x7fffffffd760)
    at /home/elfring/Projekte/systemd/lokal/src/basic/log.c:662
        _saved_errno_ = 0
        buffer = "db:device_update_db:1432426656: created ", '\000' <repeats 81 
times>, 
"\221\367\275K2\375\244\300\317\377\377\377\177\000\000\241\252YUUU\000\000\000\000\000\000\000\000\000\000êYUUU\000\000\300\341_UUU\000\000\000\000\000\000\000\000\000\000\300\341_UUU\000\000\000\000\000\000\211\003\000\000
 \332_UUU\000\000\000\000\000\000"...
#3  0x000055555559ad9b in log_internal (level=7, error=0, file=0x5555556118a0 
"/home/elfring/Projekte/systemd/lokal/src/libsystemd/sd-device/device-private.c",
 line=1080, 
    func=0x5555556124c0 <__func__.9471> "device_update_db", 
format=0x555555611f40 "%s:%s:%d: created %s file '%s' for '%s'")
    at /home/elfring/Projekte/systemd/lokal/src/basic/log.c:679
        ap = {{gp_offset = 48, fp_offset = 48, overflow_arg_area = 
0x7fffffffd860, reg_save_area = 0x7fffffffd780}}
        r = 21845
#4  0x00005555555f522c in device_update_db (device=0x55555567bb20) at 
/home/elfring/Projekte/systemd/lokal/src/libsystemd/sd-device/device-private.c:1079
        _level = 7
        _e = 0
        id = 0x55555567a740 "c189:258"
        path = 0x7fffffffd870 "/run/udev/data/c189:258"
        f = 0x5555556526a0
        path_tmp = 0x55555566e770 "/run/udev/data/.#c189:258gYzL5N"
        has_info = true
        r = 0
        __PRETTY_FUNCTION__ = "device_update_db"
        __func__ = "device_update_db"
        __FUNCTION__ = "device_update_db"
#5  0x00005555555cb3cf in udev_device_update_db (udev_device=0x555555638560) at 
/home/elfring/Projekte/systemd/lokal/src/libudev/libudev-device-private.c:48
        r = 21845
        __PRETTY_FUNCTION__ = "udev_device_update_db"
#6  0x000055555556c924 in udev_event_execute_rules (event=0x555555638df0, 
timeout_usec=180000000, timeout_warn_usec=60000000, 
properties_list=0x5555556380c0, 
    rules=0x555555638500) at 
/home/elfring/Projekte/systemd/lokal/src/udev/udev-event.c:939
        dev = 0x555555638560
        __func__ = "udev_event_execute_rules"
        __FUNCTION__ = "udev_event_execute_rules"
#7  0x0000555555563264 in worker_spawn (manager=0x555555638080, 
event=0x55555566ea30) at 
/home/elfring/Projekte/systemd/lokal/src/udev/udevd.c:450
        udev_event = 0x555555638df0
        fd_lock = -1
        dev = 0x555555638560
        rtnl = 0x0
        fd_signal = 4
        ep_monitor = {events = 1, data = {ptr = 0xb, fd = 11, u32 = 11, u64 = 
11}}
        mask = {__val = {18446744067267100671, 18446744073709551615 <repeats 15 
times>}}
        fd_monitor = 11
        fd_ep = 5
        ep_signal = {events = 1, data = {ptr = 0x4, fd = 4, u32 = 4, u64 = 4}}
        udev = 0x555555638060
        worker_monitor = 0x55555566f8d0
        pid = 0
        r = 0
        __func__ = "worker_spawn"
        __PRETTY_FUNCTION__ = "worker_spawn"
#8  0x0000555555563b19 in event_run (manager=0x555555638080, 
event=0x55555566ea30) at 
/home/elfring/Projekte/systemd/lokal/src/udev/udevd.c:578
        worker = 0x0
        i = {idx = 4294967295, next_key = 0x0}
        __PRETTY_FUNCTION__ = "event_run"
        __func__ = "event_run"
#9  0x00005555555646df in event_queue_start (manager=0x555555638080) at 
/home/elfring/Projekte/systemd/lokal/src/udev/udevd.c:822
        event = 0x55555566ea30
        loop = 0x55555566ea30
        usec = 2384851219
        r = 0
        __PRETTY_FUNCTION__ = "event_queue_start"
#10 0x0000555555564cf0 in on_uevent (s=0x555555638fd0, fd=5, revents=1, 
userdata=0x555555638080) at 
/home/elfring/Projekte/systemd/lokal/src/udev/udevd.c:926
        manager = 0x555555638080
        dev = 0x555555638560
        r = 0
        __PRETTY_FUNCTION__ = "on_uevent"
#11 0x00005555555e5e4e in source_dispatch (s=0x555555638fd0) at 
/home/elfring/Projekte/systemd/lokal/src/libsystemd/sd-event/sd-event.c:2116
        r = 0
        __PRETTY_FUNCTION__ = "source_dispatch"
        __func__ = "source_dispatch"
#12 0x00005555555e7328 in sd_event_dispatch (e=0x55555567b920) at 
/home/elfring/Projekte/systemd/lokal/src/libsystemd/sd-event/sd-event.c:2472
        p = 0x555555638fd0
        r = 32767
        __PRETTY_FUNCTION__ = "sd_event_dispatch"
#13 0x00005555555e74e3 in sd_event_run (e=0x55555567b920, 
timeout=18446744073709551615) at 
/home/elfring/Projekte/systemd/lokal/src/libsystemd/sd-event/sd-event.c:2500
        r = 1
        __PRETTY_FUNCTION__ = "sd_event_run"
#14 0x00005555555e7610 in sd_event_loop (e=0x55555567b920) at 
/home/elfring/Projekte/systemd/lokal/src/libsystemd/sd-event/sd-event.c:2520
        r = 0
        __PRETTY_FUNCTION__ = "sd_event_loop"
#15 0x00005555555684a3 in run (fd_ctrl=4, fd_uevent=5, cgroup=0x0) at 
/home/elfring/Projekte/systemd/lokal/src/udev/udevd.c:1633
        manager = 0x555555638080
        r = 0
        __func__ = "run"
#16 0x0000555555568ddd in main (argc=2, argv=0x7fffffffe268) at 
/home/elfring/Projekte/systemd/lokal/src/udev/udevd.c:1757
        cgroup = 0x0
        r = 0
        fd_ctrl = 4
        fd_uevent = 5
        __func__ = "main"
(gdb) info inferiors
  Num  Description       Executable        
* 2    process 5759      /home/elfring/Projekte/Bau/systemd/systemd-udevd 
  1    process 5751      /home/elfring/Projekte/Bau/systemd/systemd-udevd 
(gdb) inferior 1
…
(gdb) continue
Continuing.
seq 2638 forked new worker [5759]
seq 2639 queued, 'add' 'usb'
Check if link configuration needs reloading.
seq 2638 '/devices/pci0000:00/0000:00:02.0/usb3/3-2' is taking a long time
seq 2638 '/devices/pci0000:00/0000:00:02.0/usb3/3-2' killed
worker [5759] terminated by signal 9 (Killed)
worker [5759] failed while handling '/devices/pci0000:00/0000:00:02.0/usb3/3-2'
udev_monitor_send_device:/home/elfring/Projekte/systemd/lokal/src/libudev/libudev-monitor.c:770:
 passed device to netlink monitor 0x555555671520
../../gdb/linux-nat.c:3021: internal-error: linux_nat_filter_event: Assertion 
`lp->resumed' failed.
A problem internal to GDB has been detected,
further debugging may prove unreliable.
Quit this debugging session? (y or n) y
…


I wonder about such software development surprises.
How much does the attached source file extension influence the shown situation
for a bit of extra debug output?

Regards,
Markus
diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c
index 2e60433..b5a31ec 100644
--- a/src/libsystemd/sd-device/device-private.c
+++ b/src/libsystemd/sd-device/device-private.c
@@ -1076,7 +1076,7 @@ int device_update_db(sd_device *device) {
                 goto fail;
         }
 
-        log_debug("created %s file '%s' for '%s'", has_info ? "db" : "empty",
+        log_debug("%s:%s:%d: created %s file '%s' for '%s'", has_info ? "db" : "empty", __FUNCTION__, __FILE__, __LINE__,
                   path, device->devpath);
 
         return 0;
diff --git a/src/libudev/libudev-monitor.c b/src/libudev/libudev-monitor.c
index 282aa2b..c99887d 100644
--- a/src/libudev/libudev-monitor.c
+++ b/src/libudev/libudev-monitor.c
@@ -767,7 +767,7 @@ int udev_monitor_send_device(struct udev_monitor *udev_monitor,
         count = sendmsg(udev_monitor->sock, &smsg, 0);
         if (count < 0) {
                 if (!destination && errno == ECONNREFUSED) {
-                        log_debug("passed device to netlink monitor %p", udev_monitor);
+                        log_debug("%s:%s:%d: passed device to netlink monitor %p", __FUNCTION__, __FILE__, __LINE__, udev_monitor);
                         return 0;
                 } else
                         return -errno;
diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
index 4761222..c5f1cb1 100644
--- a/src/udev/udev-event.c
+++ b/src/udev/udev-event.c
@@ -893,27 +893,37 @@ void udev_event_execute_rules(struct udev_event *event,
 
                 if (major(udev_device_get_devnum(dev)) > 0) {
                         bool apply;
+                        log_debug("%llu:%s:%s:%d: %s for %s", udev_device_get_seqnum(dev), __FUNCTION__, __FILE__, __LINE__, udev_device_get_action(dev), udev_device_get_sysname(dev));
 
                         /* remove/update possible left-over symlinks from old database entry */
                         if (event->dev_db != NULL)
                                 udev_node_update_old_links(dev, event->dev_db);
 
                         if (!event->owner_set)
+                        {
                                 event->uid = udev_device_get_devnode_uid(dev);
+                                log_debug("%llu:%s:%s:%d: owner set", udev_device_get_seqnum(dev), __FUNCTION__, __FILE__, __LINE__);
+                        }
 
                         if (!event->group_set)
+                        {
                                 event->gid = udev_device_get_devnode_gid(dev);
+                                log_debug("%llu:%s:%s:%d: group set", udev_device_get_seqnum(dev), __FUNCTION__, __FILE__, __LINE__);
+                        }
 
                         if (!event->mode_set) {
                                 if (udev_device_get_devnode_mode(dev) > 0) {
                                         /* kernel supplied value */
                                         event->mode = udev_device_get_devnode_mode(dev);
+                                        log_debug("%llu:%s:%s:%d: %s mode", udev_device_get_seqnum(dev), __FUNCTION__, __FILE__, __LINE__, "kernel supplied");
                                 } else if (event->gid > 0) {
                                         /* default 0660 if a group is assigned */
                                         event->mode = 0660;
+                                        log_debug("%llu:%s:%s:%d: %s mode", udev_device_get_seqnum(dev), __FUNCTION__, __FILE__, __LINE__, "default group");
                                 } else {
                                         /* default 0600 */
                                         event->mode = 0600;
+                                        log_debug("%llu:%s:%s:%d: %s mode", udev_device_get_seqnum(dev), __FUNCTION__, __FILE__, __LINE__, "default");
                                 }
                         }
 
diff --git a/src/udev/udev-node.c b/src/udev/udev-node.c
index d824172..bc48c3b 100644
--- a/src/udev/udev-node.c
+++ b/src/udev/udev-node.c
@@ -81,7 +81,7 @@ static int node_symlink(struct udev_device *dev, const char *node, const char *s
                         }
                 }
         } else {
-                log_debug("creating symlink '%s' to '%s'", slink, target);
+                log_debug("%llu:%s:%s:%d: creating symlink '%s' to '%s'", udev_device_get_seqnum(dev), __FUNCTION__, __FILE__, __LINE__, slink, target);
                 do {
                         err = mkdir_parents_label(slink, 0755);
                         if (err != 0 && err != -ENOENT)
@@ -240,7 +240,7 @@ void udev_node_update_old_links(struct udev_device *dev, struct udev_device *dev
                 if (found)
                         continue;
 
-                log_debug("update old name, '%s' no longer belonging to '%s'",
+                log_debug("%llu:%s:%s:%d: update old name, '%s' no longer belonging to '%s'", udev_device_get_seqnum(dev), __FUNCTION__, __FILE__, __LINE__,
                      name, udev_device_get_devpath(dev));
                 link_update(dev, name, false);
         }
@@ -278,7 +278,7 @@ static int node_permissions_apply(struct udev_device *dev, bool apply,
                 bool smack = false;
 
                 if ((stats.st_mode & 0777) != (mode & 0777) || stats.st_uid != uid || stats.st_gid != gid) {
-                        log_debug("set permissions %s, %#o, uid=%u, gid=%u", devnode, mode, uid, gid);
+                        log_debug("%llu:%s:%s:%d: set permissions %s, %#o, uid=%u, gid=%u", udev_device_get_seqnum(dev), __FUNCTION__, __FILE__, __LINE__, devnode, mode, uid, gid);
                         err = chmod(devnode, mode);
                         if (err < 0)
                                 log_warning_errno(errno, "setting mode of %s to %#o failed: %m", devnode, mode);
@@ -286,7 +286,7 @@ static int node_permissions_apply(struct udev_device *dev, bool apply,
                         if (err < 0)
                                 log_warning_errno(errno, "setting owner of %s to uid=%u, gid=%u failed: %m", devnode, uid, gid);
                 } else {
-                        log_debug("preserve permissions %s, %#o, uid=%u, gid=%u", devnode, mode, uid, gid);
+                        log_debug("%llu:%s:%s:%d: preserve permissions %s, %#o, uid=%u, gid=%u", udev_device_get_seqnum(dev), __FUNCTION__, __FILE__, __LINE__, devnode, mode, uid, gid);
                 }
 
                 /* apply SECLABEL{$module}=$label */
@@ -338,7 +338,7 @@ void udev_node_add(struct udev_device *dev, bool apply,
         char filename[UTIL_PATH_SIZE];
         struct udev_list_entry *list_entry;
 
-        log_debug("handling device node '%s', devnum=%s, mode=%#o, uid="UID_FMT", gid="GID_FMT,
+        log_debug("%llu:%s:%s:%d: handling device node '%s', devnum=%s, mode=%#o, uid="UID_FMT", gid="GID_FMT, udev_device_get_seqnum(dev), __FUNCTION__, __FILE__, __LINE__,
                   udev_device_get_devnode(dev), udev_device_get_id_filename(dev), mode, uid, gid);
 
         if (node_permissions_apply(dev, apply, mode, uid, gid, seclabel_list) < 0)
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
index d00f90a..761f1eb 100644
--- a/src/udev/udev-rules.c
+++ b/src/udev/udev-rules.c
@@ -321,6 +321,8 @@ static void dump_token(struct udev_rules *rules, struct token *token) {
         enum string_glob_type glob = token->key.glob;
         const char *value = str(rules, token->key.value_off);
         const char *attr = &rules->buf[token->key.attr_off];
+        log_debug("%s:%s:%d: %s %s '%s'(%s)", __FUNCTION__, __FILE__, __LINE__,
+                  token_str(type), operation_str(op), value, string_glob_str(glob));
 
         switch (type) {
         case TK_RULE:
@@ -2119,7 +2121,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules,
                         if (udev_builtin_run_once(cur->key.builtin_cmd)) {
                                 /* check if we ran already */
                                 if (event->builtin_run & (1 << cur->key.builtin_cmd)) {
-                                        log_debug("IMPORT builtin skip '%s' %s:%u",
+                                        log_debug("%s:%s:%d: IMPORT builtin skip '%s' %s:%u", __FUNCTION__, __FILE__, __LINE__,
                                                   udev_builtin_name(cur->key.builtin_cmd),
                                                   rules_str(rules, rule->rule.filename_off),
                                                   rule->rule.filename_line);
@@ -2134,19 +2136,21 @@ int udev_rules_apply_to_event(struct udev_rules *rules,
                         }
 
                         udev_event_apply_format(event, rules_str(rules, cur->key.value_off), command, sizeof(command));
-                        log_debug("IMPORT builtin '%s' %s:%u",
+                        log_debug("%s:%s:%d: IMPORT builtin '%s' %s:%u", __FUNCTION__, __FILE__, __LINE__,
                                   udev_builtin_name(cur->key.builtin_cmd),
                                   rules_str(rules, rule->rule.filename_off),
                                   rule->rule.filename_line);
 
                         if (udev_builtin_run(event->dev, cur->key.builtin_cmd, command, false) != 0) {
                                 /* remember failure */
-                                log_debug("IMPORT builtin '%s' returned non-zero",
+                                log_debug("%s:%s:%d: IMPORT builtin '%s' returned non-zero", __FUNCTION__, __FILE__, __LINE__,
                                           udev_builtin_name(cur->key.builtin_cmd));
                                 event->builtin_ret |= (1 << cur->key.builtin_cmd);
                                 if (cur->key.op != OP_NOMATCH)
                                         goto nomatch;
                         }
+                        log_debug("%s:%s:%d: %s end", __FUNCTION__, __FILE__, __LINE__,
+                                  "TK_M_IMPORT_BUILTIN");
                         break;
                 }
                 case TK_M_IMPORT_DB: {
@@ -2252,7 +2256,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules,
 
                                 event->uid = 0;
                         }
-                        log_debug("OWNER %u %s:%u",
+                        log_debug("%s:%s:%d: OWNER %u %s:%u", __FUNCTION__, __FILE__, __LINE__,
                                   event->uid,
                                   rules_str(rules, rule->rule.filename_off),
                                   rule->rule.filename_line);
@@ -2278,7 +2282,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules,
 
                                 event->gid = 0;
                         }
-                        log_debug("GROUP %u %s:%u",
+                        log_debug("%s:%s:%d: GROUP %u %s:%u", __FUNCTION__, __FILE__, __LINE__,
                                   event->gid,
                                   rules_str(rules, rule->rule.filename_off),
                                   rule->rule.filename_line);
@@ -2301,7 +2305,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules,
                                 event->mode_final = true;
                         event->mode_set = true;
                         event->mode = mode;
-                        log_debug("MODE %#o %s:%u",
+                        log_debug("%s:%s:%d: MODE %#o %s:%u", __FUNCTION__, __FILE__, __LINE__,
                                   event->mode,
                                   rules_str(rules, rule->rule.filename_off),
                                   rule->rule.filename_line);
@@ -2314,7 +2318,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules,
                                 event->owner_final = true;
                         event->owner_set = true;
                         event->uid = cur->key.uid;
-                        log_debug("OWNER %u %s:%u",
+                        log_debug("%s:%s:%d: OWNER %u %s:%u", __FUNCTION__, __FILE__, __LINE__,
                                   event->uid,
                                   rules_str(rules, rule->rule.filename_off),
                                   rule->rule.filename_line);
@@ -2326,7 +2330,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules,
                                 event->group_final = true;
                         event->group_set = true;
                         event->gid = cur->key.gid;
-                        log_debug("GROUP %u %s:%u",
+                        log_debug("%s:%s:%d: GROUP %u %s:%u", __FUNCTION__, __FILE__, __LINE__,
                                   event->gid,
                                   rules_str(rules, rule->rule.filename_off),
                                   rule->rule.filename_line);
@@ -2338,7 +2342,7 @@ int udev_rules_apply_to_event(struct udev_rules *rules,
                                 event->mode_final = true;
                         event->mode_set = true;
                         event->mode = cur->key.mode;
-                        log_debug("MODE %#o %s:%u",
+                        log_debug("%s:%s:%d: MODE %#o %s:%u", __FUNCTION__, __FILE__, __LINE__,
                                   event->mode,
                                   rules_str(rules, rule->rule.filename_off),
                                   rule->rule.filename_line);
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to