All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Kiernan <alex.kiernan@gmail.com>
To: openembedded-core@lists.openembedded.org
Cc: Alex Kiernan <alex.kiernan@gmail.com>
Subject: [PATCH] eudev: upgrade 3.2.15 -> 3.3.0
Date: Sat,  7 Nov 2026 15:43:09 +0000	[thread overview]
Message-ID: <20261107154308.1110237-2-alex.kiernan@gmail.com> (raw)

Release notes:

  https://github.com/eudev-project/eudev/blob/v3.3.0/NEWS.md

Drop 0001-udevd-keep-a-copy-of-the-event-devnode.patch, fixed
differently upstream.

Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
---
 ...evd-keep-a-copy-of-the-event-devnode.patch | 101 ------------------
 .../udev/{eudev_3.2.15.bb => eudev_3.3.0.bb}  |   9 +-
 2 files changed, 5 insertions(+), 105 deletions(-)
 delete mode 100644 meta/recipes-core/udev/eudev/0001-udevd-keep-a-copy-of-the-event-devnode.patch
 rename meta/recipes-core/udev/{eudev_3.2.15.bb => eudev_3.3.0.bb} (90%)

diff --git a/meta/recipes-core/udev/eudev/0001-udevd-keep-a-copy-of-the-event-devnode.patch b/meta/recipes-core/udev/eudev/0001-udevd-keep-a-copy-of-the-event-devnode.patch
deleted file mode 100644
index 498bdda2bb50..000000000000
--- a/meta/recipes-core/udev/eudev/0001-udevd-keep-a-copy-of-the-event-devnode.patch
+++ /dev/null
@@ -1,101 +0,0 @@
-From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
-From: Alex Kiernan <alex.kiernan@gmail.com>
-Date: Sat, 17 Oct 2026 14:23:21 +0100
-Subject: [PATCH] udevd: keep a copy of the event devnode
-
-Commit 4b83740d95be added a devnode check to is_devpath_busy(), caching
-the pointer returned by udev_device_get_devnode() in struct event. That
-string belongs to the udev_device and can be freed while the event is
-still queued: dispatching an event to an idle worker calls
-udev_monitor_send_device(), whose udev_device_get_devtype() re-reads the
-uevent file for devices without DEVTYPE, and the DEVNAME line replaces
-(frees) the devnode string via udev_device_set_devnode().
-
-The next is_devpath_busy() then strcmp()s freed memory. Under musl,
-whose mallocng returns freed memory to the kernel, this segfaults the
-main daemon; elsewhere it silently compares stale data. valgrind
-(qemuarm64, musl) reports it on the first coldplug:
-
-  Invalid read of size 1
-     at strcmp
-     by streq_ptr (util.c:97)
-     by is_devpath_busy (udevd.c:578)
-     by event_queue_start (udevd.c:602)
-   Address 0x54eeaf0 is 0 bytes inside a block of size 10 free'd
-     at free
-     by udev_device_set_devnode (libudev-device.c:1750)
-     by udev_device_read_uevent_file (libudev-device.c:706)
-     by udev_device_get_devtype (libudev-device.c:248)
-     by udev_monitor_send_device (libudev-monitor.c:822)
-     by event_run (udevd.c:462)
-   Block was alloc'd at
-     at malloc
-     by asprintf
-     by udev_device_set_devnode (libudev-device.c:1752)
-     by udev_device_new_from_nulstr (libudev-device.c:2151)
-     by udev_monitor_receive_device (libudev-monitor.c:762)
-
-The systemd code this was ported from is not affected: sd_device seals
-devices received from netlink, so device_read_uevent_file() never
-re-reads them and the cached devname stays the DEVNAME the event arrived
-with for as long as the event is queued.
-
-Store a copy of the devnode in struct event, which keeps those
-semantics. Looking the devnode up from the device at comparison time
-would avoid the allocation, but would compare whatever a later uevent
-re-read left there rather than the event's own DEVNAME, which is what
-the check relies on for a remove and add queued for the same node.
-Stopping udev_device_get_devtype() re-reading the uevent file would
-remove the trigger instead, but changes public libudev behaviour.
-
-Fixes: 4b83740d95be ("udevd: make newer event also blocked by DEVPATH_OLD and by events for the same device node")
-Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
-AI-Generated: Claude Opus 5.5 (Claude Code)
-Signed-off-by: Alex Kiernan <alex.kiernan@gmail.com>
-
-Upstream-Status: Submitted [https://github.com/eudev-project/eudev/pull/304]
----
- src/udev/udevd.c | 16 ++++++++++++++--
- 1 file changed, 14 insertions(+), 2 deletions(-)
-
-diff --git a/src/udev/udevd.c b/src/udev/udevd.c
-index 93d9466e0d2d..6ba3efa52555 100644
---- a/src/udev/udevd.c
-+++ b/src/udev/udevd.c
-@@ -97,7 +97,7 @@ struct event {
-         unsigned long long int seqnum;
-         const char *devpath;
-         const char *devpath_old;
--        const char *devnode;
-+        char *devnode;
-         dev_t devnum;
-         int ifindex;
-         bool is_block;
-@@ -140,6 +140,7 @@ static void event_free(struct event *event) {
-         udev_list_node_remove(&event->node);
-         udev_device_unref(event->dev);
-         udev_device_unref(event->dev_kernel);
-+        free(event->devnode);
- 
-         if (event->worker)
-                 event->worker->event = NULL;
-@@ -495,7 +496,18 @@ static int event_queue_insert(struct udev_device *dev) {
-         event->seqnum = udev_device_get_seqnum(dev);
-         event->devpath = udev_device_get_devpath(dev);
-         event->devpath_old = udev_device_get_devpath_old(dev);
--        event->devnode = udev_device_get_devnode(dev);
-+        /* Keep our own copy of the DEVNAME the event arrived with: unlike
-+         * systemd's sealed sd_device, libudev may re-read the uevent file
-+         * later (udev_monitor_send_device() -> udev_device_get_devtype()),
-+         * which frees and replaces the device's devnode string. */
-+        if (udev_device_get_devnode(dev) != NULL) {
-+                event->devnode = strdup(udev_device_get_devnode(dev));
-+                if (event->devnode == NULL) {
-+                        udev_device_unref(event->dev_kernel);
-+                        free(event);
-+                        return -1;
-+                }
-+        }
-         event->devnum = udev_device_get_devnum(dev);
-         event->is_block = streq("block", udev_device_get_subsystem(dev));
-         event->ifindex = udev_device_get_ifindex(dev);
diff --git a/meta/recipes-core/udev/eudev_3.2.15.bb b/meta/recipes-core/udev/eudev_3.3.0.bb
similarity index 90%
rename from meta/recipes-core/udev/eudev_3.2.15.bb
rename to meta/recipes-core/udev/eudev_3.3.0.bb
index 956ab3f6c2dc..acbe61e4fb55 100644
--- a/meta/recipes-core/udev/eudev_3.2.15.bb
+++ b/meta/recipes-core/udev/eudev_3.3.0.bb
@@ -12,14 +12,13 @@ PROVIDES = "udev"
 SRC_URI = "${GITHUB_BASE_URI}/download/v${PV}/${BP}.tar.gz \
            file://init \
            file://local.rules \
-           file://0001-udevd-keep-a-copy-of-the-event-devnode.patch \
            "
 
-SRC_URI[sha256sum] = "eb69809fc0d1187f2463ab2149c53aa9f42a78e59f14ebea68eae6cb6b4fc1c3"
+SRC_URI[sha256sum] = "8fba6e4f49ea4b1938828a3c2e7cc48874816c68621386e527076b6477f5d6ef"
 
 GITHUB_BASE_URI = "https://github.com/eudev-project/eudev/releases"
 
-inherit autotools update-rc.d pkgconfig features_check manpages github-releases
+inherit autotools bash-completion update-rc.d pkgconfig features_check manpages github-releases
 
 CONFLICT_DISTRO_FEATURES = "systemd"
 
@@ -64,11 +63,13 @@ do_install:prepend:class-target () {
 INITSCRIPT_NAME = "udev"
 INITSCRIPT_PARAMS = "start 04 S ."
 
-PACKAGE_BEFORE_PN = "libudev ${PN}-hwdb"
+PACKAGE_BEFORE_PN += "libudev ${PN}-hwdb ${PN}-zsh-completion"
 
 FILES:${PN} += "${nonarch_base_libdir}/udev"
 FILES:libudev = "${base_libdir}/libudev.so.*"
 FILES:${PN}-hwdb = "${sysconfdir}/udev/hwdb.d"
+FILES:${PN}-zsh-completion = "${datadir}/zsh"
+
 
 RDEPENDS:${PN}-hwdb += "eudev"
 RDEPENDS:${PN} += "kmod"

             reply	other threads:[~2026-11-07 15:43 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-11-07 15:43 Alex Kiernan [this message]
2026-11-08 11:52 ` [OE-core] [PATCH] eudev: upgrade 3.2.15 -> 3.3.0 Mathieu Dubois-Briand
2026-11-09  9:21   ` Alex Kiernan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20261107154308.1110237-2-alex.kiernan@gmail.com \
    --to=alex.kiernan@gmail.com \
    --cc=openembedded-core@lists.openembedded.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.