On Fri, Feb 09, 2024 at 09:52:53PM -0500, Kenneth Westerback wrote: > Looks correct to me. The value returned by get_ucomnames() is only > passed to find_ucom() where it is checked against NULL. > > aphekz, if you can confirm this works for you I can commit.
yes, it works aphekz > > .... Ken > > "Theo de Raadt" <dera...@openbsd.org> writes: > > > Yes, this code should not fail in that circumstance. It should silently > > carry on. > > > > Note the code: > > > > #if NUCOM > 0 > > case HW_UCOMNAMES: { > > > > If the kernel has no USB com, the sysctl code is disabled. That is why > > it MUST silently carry on. > > > > But your bug report is incomplete. Where is the full dmesg for the machine > > where this happened? > > > > Probably this diff. > > > > Index: cu.c > > =================================================================== > > RCS file: /cvs/src/usr.bin/cu/cu.c,v > > diff -u -p -u -r1.30 cu.c > > --- cu.c 21 Dec 2023 11:25:38 -0000 1.30 > > +++ cu.c 10 Feb 2024 02:37:32 -0000 > > @@ -488,13 +488,13 @@ get_ucomnames(void) > > size = 0; > > for (;;) { > > if (sysctl(mib, 2, NULL, &size, NULL, 0) == -1 || size == 0) > > - err(1, "hw.ucomnames"); > > + return NULL; > > if ((names = realloc(names, size)) == NULL) > > err(1, NULL); > > if (sysctl(mib, 2, names, &size, NULL, 0) != -1) > > break; > > if (errno != ENOMEM) > > - err(1, "hw.ucomnames"); > > + return NULL; > > } > > return names; > > } > > > > The code that uses the return value from get_ucomnames() may be safe. > > I'm rushed, don't want to burn dinner. > > > > > > aphekz <aph...@kroczynski.net> wrote: > > > >> hi > >> > >> ~ > cu -l cua00 -s 115200 > >> (on -stable) quits with an error > >> cu: hw.ucomnames: Operation not supported > >> > >> as there is only > >> com0 at isa0 port 0x3f8/8 irq 4: ns16550a, 16 byte fifo > >> and no any ucom devices on that machine > >> > >> so as below there is no hw.ucomnames value > >> ~ > sysctl hw.ucomnames > >> sysctl: hw.ucomnames: value is not available > >> > >> seems one of last changes > >> src/usr.bin/cu/cu.c 2023/10/02 1.29 > >> > >> in > >> char * > >> get_ucomnames(void) > >> ... > >> if (sysctl(mib, 2, NULL, &size, NULL, 0) == -1 || size == 0) > >> err(1, "hw.ucomnames"); > >> > >> makes problem in my case. > >> > >> shouldn't we have > >> - err(1, "hw.ucomnames"); > >> + break; > >> > >> as i'm not experienced enough to suggest diff (i might be missing sth) > >> so.. verify that please. > >> > >> aphekz > >> > > > -- > .... Ken