Re: *oldlenp comes back with wrong value in helper sysctl_createv() function

Michael van Elst <[email protected]>
Newsgroups gmane.os.netbsd.devel.kernel
Message-ID <[email protected]>
On Sat, Jan 20, 2024 at 10:48:12AM +0100, Emile 'iMil' Heitor wrote:


Hi,

that's from sysctl.c:

        case CTLTYPE_STRING: {
                unsigned char buf[1024], *tbuf;
                tbuf = buf;
                sz = sizeof(buf); 
                rc = prog_sysctl(&name[0], namelen, tbuf, &sz, NULL, 0);

The sysctl command first tries with a buffer of 1024 bytes
and retries with the right size when that was too small.

Compared to "probing" with a NULL buffer this saves a round trip
to the kernel for most sysctls.

A simple helper function would always return the needed size and only
copy out when oldp was set. sysctl will check the returned *oldlenp 
against the value passed by the caller and return ENOMEM as appropriate.


Greetings,
-- 
                                Michael van Elst
Internet: [email protected]
                                "A potential Snark may lurk in every tree."
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.