Subject: Re: multiple copyout()s or a malloc?
To: None <erh@nimenees.com>
From: Simon Burge <simonb@netbsd.org>
List: tech-kern
Date: 06/01/2000 15:00:22
erh@nimenees.com wrote:
> On Tue, May 30, 2000 at 09:45:53PM +1000, Simon Burge wrote:
> > Folks,
> >
> > In relation to a ipcs-type sysctl(), given the choice between doing (for
> > example) 128x 60byte copyouts or one 8kish malloc and a copyout(), which
> > would be the better choice? I'd guess that the latter would be quicker,
> > but could it be used as a serious DOS-type attack on kernel memory if
> > lots of processes were to call the sysctl() at the same time?
>
> Unless you used a semaphore to have the sysctl keep track of
> and limit the number of concurrent calls. Or even limit it to one process
> at a time. How many different processes at once are going to want this
> information?
The sysctl will appear atomic to the process, so there's no need to
limit the call on a per-process basis. In theory, there shouldn't be
many processes using this sysctl - how many people sit there running
ipcs(1) all day for something to do? :) It's the bad guys I was
worrying about - starting something like a fork/ipcs bomb...
Given Bill's reply, this time around I wont worry about it. However,
would a simplelock be the way to go to control access? Something like:
sysctl_sysvipc(..)
{
...
simple_lock(&sysctl_sysvipc_slock);
malloc(...);
...
free(...);
simple_unlock(&sysctl_sysvipc_slock);
...
}
It looks like the only problem with this is that there's no sysctlinit()
to call "simple_lock_init(&sysctl_sysvipc_slock);"...
Simon.