James Gritton
2018-05-18 16:49:15 UTC
[Sorry about bad headers and formatting - I took this off the archive
page]
size of
the corresponding kernel buffers at runtime? Is there a maximum length
a la
MAX_JAIL_PARAM_LEN that the string representations of the returned
parameters
are guaranteed to be shorter than?
I'm currently implementing a rust wrapper[1] around the jail(2)
interface, and am
not sure how large buffers for the string parameters I'm querying with
jail_get
jail_set have to be.
There is a way to find the length of a string parameter, though there
isn't a good library interface for it. The security.jail.param.*
sysctls describe the form of the parameters, giving the type. The
"contents" of these sysctls are generally unused (and set to zero), but
for string parameters there's actually the max length of the string
(itself in string form). For non-string parameters, the length in
string form depends on the type of the parameters, so for an int you'll
need as long as the string representation of an ant can be, etc. I
don't know how much good C code will do for you for Rust work, but you
might want to take a look at jailparam_type() in the libjail source
code.
It gets more complicated with array parameters, those that can hold an
arbitrary number of values. The IP addresses are the best example of
that. jail_getv() just isn't a good fit for such a parameter.
I would recommend skipping out on jail_getv(), which is really only good
for getting a few well-known parameters, and instead use the more
complete but more complex jailparam_init/get/export/free. Again, if C
helps, take a glance at the jls source.
- Jamie
page]
The jail_getv() function takes a null-terminated list of name and
value
strings, and passes it to jail_get(2). It is the caller's
responsibility
to ensure that the value strings point to buffers large enough to
hold
the string representation of the returned parameters.
What exactly does "large enough" mean here? Is there a way to query thevalue
strings, and passes it to jail_get(2). It is the caller's
responsibility
to ensure that the value strings point to buffers large enough to
hold
the string representation of the returned parameters.
size of
the corresponding kernel buffers at runtime? Is there a maximum length
a la
MAX_JAIL_PARAM_LEN that the string representations of the returned
parameters
are guaranteed to be shorter than?
I'm currently implementing a rust wrapper[1] around the jail(2)
interface, and am
not sure how large buffers for the string parameters I'm querying with
jail_get
jail_set have to be.
isn't a good library interface for it. The security.jail.param.*
sysctls describe the form of the parameters, giving the type. The
"contents" of these sysctls are generally unused (and set to zero), but
for string parameters there's actually the max length of the string
(itself in string form). For non-string parameters, the length in
string form depends on the type of the parameters, so for an int you'll
need as long as the string representation of an ant can be, etc. I
don't know how much good C code will do for you for Rust work, but you
might want to take a look at jailparam_type() in the libjail source
code.
It gets more complicated with array parameters, those that can hold an
arbitrary number of values. The IP addresses are the best example of
that. jail_getv() just isn't a good fit for such a parameter.
I would recommend skipping out on jail_getv(), which is really only good
for getting a few well-known parameters, and instead use the more
complete but more complex jailparam_init/get/export/free. Again, if C
helps, take a glance at the jls source.
- Jamie