[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: some possible issues
[Thread Prev] | [Thread Next]
- Subject: Re: some possible issues
- From: "Bernhard R. Link" <brlink@xxxxxxxxxx>
- Reply-to: libssh@xxxxxxxxxx
- Date: Wed, 18 Nov 2009 10:51:59 +0100
- To: libssh@xxxxxxxxxx
* Andreas Schneider <mail@xxxxxxxxxxxx> [091118 10:36]:
> > 3)
> > channels.c's channel_default_bufferize looks strange. in case of buffer
> > errors channel->std{out,err}_buffer is freed but not set to NULL, which
> > might cause corrupting memory management (double free or writing to
> > free'd memory). I guess it is even thinkable (though I guess not
> > with realistic thinking) that this might be exploitable remotly
> > to get some code executed in some form.
>
> Are you sure that it is not NULL, we use SAFE_FREE() which is a macro which
> sets a pointer always to NULL after freeing it. I think this needs a closer
> look.
channel_default_bufferize has:
| if (buffer_add_data(channel->stderr_buffer, data, len) < 0) {
| buffer_free(channel->stderr_buffer);
| return -1;
| }
While SAFE_FREE sets the argument NULL and buffer_free uses SAFE_FREE,
buffer_free itself does not seem to be a macro but a regular function.
That means the copy of channe->stderr_buffer that is buffer_free's
buffer argument is NULL at the end of buffer_free. But that does not
change the value channel->stderr_buffer is.
Hochachtungsvoll,
Bernhard R. Link
--
"Never contain programs so few bugs, as when no debugging tools are available!"
Niklaus Wirth
| some possible issues | "Bernhard R. Link" <brlink@xxxxxxxxxx> |
| Re: some possible issues | Andreas Schneider <mail@xxxxxxxxxxxx> |