libjail issues.

Jamie Gritton jamie at FreeBSD.org
Thu Jul 15 19:36:19 UTC 2010


On 07/15/10 04:12, Stanislav Uzunchev wrote:
>  I have found something very strange to me... It is a problem with static
> allocating size of buffer where jail param is going to be coppied, using
> jail_getv function from the libjails. Well for example:
>
> buff[size];
> jail_getv(0, "name", "1", "host.hostname", buff, NULL);
>
> the result for size = 64; is bsnmp.test, size = 257; is bsnmp.test, size =
> 256; is bs1 ?
>
> #sysctl -a | grep "security.jail.param.host.hostname:"
> 256
>
> #jls
> JID Hostname
> 1     bsnmp.test
>
> #jls -n | grep "bs1"
> returns no match.
>
> This is really confusing me.

That's a bug in jail_getv, which I'm committing the fix for now.
Unfortunately, it's too late to get it in the 8.1 release, but it will
at least be in future releases.

The issue is that jail_getv wrongly allocated temporary space based on
the length of the parameters passed in, which don't even have values
yet. The different array sizes in your sample code would coincidentally
locate the "buff" array with different garbage contents, leading to
different behavior with the bug.

> Also i will take suggestions, what is the best way, to get and set all
> value/params using the jailparam struct.
> I am trying first to set the name or jid, and after that getting the values
> for the rest parameters with jail_getv, but i face some problems setting
> jp_value since it is type (void *).

You don't value to set jp_value directly, but use the jailparam_import
function. That will set jp_value correctly based on the parameter's type.

- Jamie


More information about the freebsd-hackers mailing list