untrusted comment: verify with openbsd-76-base.pub
RWTkuwn4mbq8ol/WcQjGFBIGmZhA8lJJf3CgyfdqxdYqKg3hIHDuhgWhKrftKbWA3OyjJnrjpfC+JjLBZ8fw9X2c2nckxXYGsAM=

OpenBSD 7.6 errata 021, July 1, 2025:

TIOCUCNTL ioctl(2) could crash the kernel if called with a non-file
argument.

Apply by doing:
   signify -Vep /etc/signify/openbsd-76-base.pub -x 021_pledge.patch.sig \
       -m - | (cd /usr/src && patch -p0)

And then rebuild and install a new kernel:
   KK=`sysctl -n kern.osversion | cut -d# -f1`
   cd /usr/src/sys/arch/`machine`/compile/$KK
   make obj
   make config
   make
   make install

Index: sys/kern/kern_pledge.c
===================================================================
RCS file: /cvs/src/sys/kern/kern_pledge.c,v
diff -u -p -r1.320 kern_pledge.c
--- sys/kern/kern_pledge.c      24 Sep 2024 02:22:42 -0000      1.320
+++ sys/kern/kern_pledge.c      29 Jun 2025 07:38:45 -0000
@@ -1269,9 +1269,11 @@ pledge_ioctl(struct proc *p, long com, s
                               break;
                       if ((pledge & PLEDGE_WPATH) == 0)
                               break;
-                       if (cdevsw[major(vp->v_rdev)].d_open != ptcopen)
-                               break;
-                       return (0);
+                       if (fp->f_type == DTYPE_VNODE &&
+                           vp->v_type == VCHR &&
+                           cdevsw[major(vp->v_rdev)].d_open == ptcopen)
+                               return (0);
+                       break;
#endif /* NPTY > 0 */
               case TIOCSPGRP:
                       if ((pledge & PLEDGE_PROC) == 0)