Re: sys/cnmac: fix command buffer leak on transmit failure

Kirill A. Korinsky <[email protected]>
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
On Thu, 09 Jul 2026 17:55:03 +0200,
Kirill A. Korinsky <[email protected]> wrote:
> 
> On Thu, 09 Jul 2026 16:22:51 +0200,
> Visa Hankala <[email protected]> wrote:
> > 
> > On Thu, Jul 09, 2026 at 12:28:47AM +0200, Kirill A. Korinsky wrote:
> > > visa@,
> > > 
> > > my ER-4 whcih I used as router had reached interesting state: it floods
> > > errors like this:
> > > 
> > > Jun 30 11:11:39 gw /bsd: cnmac2: cannot allocate command buffer from free pool allocator
> > > Jun 30 11:11:39 gw /bsd: cnmac2: failed to transmit packet
> > > Jun 30 11:11:40 gw /bsd: cnmac2: cannot allocate command buffer from free pool allocator
> > > Jun 30 11:11:40 gw /bsd: cnmac2: failed to transmit packet
> > > 
> > > tons of them, I have no idea what had happened before I discovered it in
> > > that state, but device was ok via serial, but network was dead.
> > > 
> > > After reading code near that error I think I had spotted a leak.
> > 
> > It seems to me that there is no leak in the code. The local cmdptr
> > pointer is derived using cmdptr_idx and discarded when the function
> > returns. cnmac_send_cmd() updates cmdptr_idx only if it was able to
> > add the command words to the queue.
> > 
> 
> Do you have any idea why it had exploded?
> 

What I had found in logs so far.

That device uses 3 cnamc:
 - cnmac1 is heavy used to route vlans traffic
 - cnmac2 is wan port connected directly to modem
 - cnmac3 is backup wan connected to the same switch to which cnmac1 is
   connected

Usually no traffic via cnmac3 until ifstated tries to switch to use it as
main wan interface.

I don't have whole logs, just between 7 am and about 11 am where I rebooted
it, but that log states that "cannot allocate command buffer from free pool
allocator" had following distribution:
 - cnmac1 -- 0 records;
 - cnmac2 -- 3108 records;
 - cnmac3 -- 14590 records.

Next, I do have logs from switch but only for cnmac3 connected port (have no
idea why), and it states:
 - Jun 30 at 12:25 AM device was disconnected;
 - Jun 30 at 11:17 AM device was connected again.

Unfortently I haven't tried to disconnect port physically and I do not
rememeber does a led lighted up.

So far it smells that something happened and it consumed all PKO queue.

But I do not understand, yet, how can it be and how can it lead to that
state which I saw.

-- 
wbr, Kirill
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.