kern/163076: It is not possible to read in chunks from
linprocfs and procfs.
Poul-Henning Kamp
phk at phk.freebsd.dk
Sat Dec 10 15:20:10 UTC 2011
The following reply was made to PR kern/163076; it has been noted by GNATS.
From: "Poul-Henning Kamp" <phk at phk.freebsd.dk>
To: Jaakko Heinonen <jh at FreeBSD.org>
Cc: Petr Salinger <Petr.Salinger at seznam.cz>, bug-followup at FreeBSD.org,
des at FreeBSD.org, mdf at FreeBSD.org
Subject: Re: kern/163076: It is not possible to read in chunks from linprocfs and procfs.
Date: Sat, 10 Dec 2011 15:15:56 +0000
In message <20111207160834.GA2257 at a91-153-116-96.elisa-laajakaista.fi>, Jaakko
Heinonen writes:
>Could we just remove the error check from sbuf_len()? (patch below) I
>have Cc'd more people.
>
>sbuf(9) manual page wrongly claims that sbuf_data() will return NULL if
>the buffer has overflowed.
Let me just back up to the beginning to make sure we're not headed
into the weeds here:
The idea behind sbufs is to have text-composition with a latching
error handling, so that error checks only needs to be done once,
and not after each and every *printf() &c. call.
I agree with Dag-Erling that it is at least mistake to not have
separate sbuf(9) and sbuf(3) pages, possibly also a mistake that
they share the implementation.
I cannot say that I very much like the "drain" stuff that was added,
That just sticks out like a sore thumb and the way the drain function
clutters up the explanation in the manual-page indicates that it
is a mis-fit bolt on.
Obviously sbuf_finish() should return the error status, and its
return value SHALL be checked by applications, before the contents
of the sbuf can be used.
The argument relating to this bug is about what sbuf_len() and
sbuf_data() should return for an error'ed sbuf.
Given that the mandatory error-check of the sbuf_finish() call
should prevent these two functions from being called in the first
place, I'm tempted to say that their return values should be
documented as undefined, and implemented to cause the maxium amount
of havoc (ie: -1 and NULL).
It can be argued, that sbuf_len(), like snprintf(3) should return
how long the result would have been, had there been enough space
and no trouble.
This argument has merit but I'm not going to entertain it, until a
credible usecase has been shown, because the main reason snprintf(3)
does that, is to make it possible to implement what sbufs provide
a more convenient API for.
--
Poul-Henning Kamp | UNIX since Zilog Zeus 3.20
phk at FreeBSD.ORG | TCP/IP since RFC 956
FreeBSD committer | BSD since 4.3-tahoe
Never attribute to malice what can adequately be explained by incompetence.
More information about the freebsd-bugs
mailing list