Index | Thread | Search

From:
Kirill A. Korinsky <kirill@korins.ky>
To:
OpenBSD tech <tech@openbsd.org>, djm@openbsd.org
Date:
Sun, 06 Sep 2026 12:15:06 +0200

Download raw body.

Thread
tech@,

my update libfido accidently reverted a hardcoded USB device metadata which
leads broken pledge in, for example, chromium.

Ok?

Index: src/hid_openbsd.c
===================================================================
RCS file: /home/cvs/src/lib/libfido2/src/hid_openbsd.c,v
diff -u -p -r1.9 hid_openbsd.c
--- src/hid_openbsd.c	4 Sep 2026 16:20:01 -0000	1.9
+++ src/hid_openbsd.c	6 Sep 2026 09:52:18 -0000
@@ -7,9 +7,6 @@
 
 #include <sys/types.h>
 
-#include <sys/ioctl.h>
-#include <dev/usb/usb.h>
-
 #include <errno.h>
 #include <fcntl.h>
 #include <poll.h>
@@ -32,33 +29,23 @@ static int
 copy_info(fido_dev_info_t *di, const char *path)
 {
 	int fd = -1, ok = -1;
-	struct usb_device_info udi;
 
 	memset(di, 0, sizeof(*di));
-	memset(&udi, 0, sizeof(udi));
 
 	if ((fd = fido_hid_unix_open(path)) == -1)
 		goto fail;
-	if (ioctl(fd, USB_GET_DEVICEINFO, &udi) == -1) {
-		fido_log_error(errno, "%s: ioctl %s", __func__, path);
-		goto fail;
-	}
-
-	fido_log_debug("%s: %s: bus = 0x%02x, addr = 0x%02x", __func__, path,
-	    udi.udi_bus, udi.udi_addr);
-	fido_log_debug("%s: %s: vendor = \"%s\", product = \"%s\"", __func__,
-	    path, udi.udi_vendor, udi.udi_product);
-	fido_log_debug("%s: %s: productNo = 0x%04x, vendorNo = 0x%04x, "
-	    "releaseNo = 0x%04x", __func__, path, udi.udi_productNo,
-	    udi.udi_vendorNo, udi.udi_releaseNo);
 
+	/* USB_GET_DEVICEINFO is not permitted by pledge(2). */
 	if ((di->path = strdup(path)) == NULL ||
-	    (di->manufacturer = strdup(udi.udi_vendor)) == NULL ||
-	    (di->product = strdup(udi.udi_product)) == NULL)
+	    (di->manufacturer = strdup("OpenBSD")) == NULL ||
+	    (di->product = strdup("fido(4)")) == NULL)
 		goto fail;
 
-	di->vendor_id = (int16_t)udi.udi_vendorNo;
-	di->product_id = (int16_t)udi.udi_productNo;
+	di->vendor_id = 0x0b5d; /* PCI_VENDOR_OPENBSD */
+	di->product_id = 0;
+
+	fido_log_debug("%s: %s: vendor = \"%s\", product = \"%s\"", __func__,
+	    path, di->manufacturer, di->product);
 
 	ok = 0;
 fail:


-- 
wbr, Kirill