Re: [PATCH 1/1] semanage_select_store fun

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2007-11-21 at 12:00 -0500, Stephen Smalley wrote:
> On Wed, 2007-11-21 at 11:44 -0500, Joshua Brindle wrote:
> > Stephen Smalley wrote:
> > > On Tue, 2007-11-20 at 17:09 -0500, Joshua Brindle wrote:
> > >   
> > >> So, I got a report here that python scripts that call 
> > >> semanage_select_store will get a double free error when calling 
> > >> semanage_handle_destroy because the swig wrapper free's the buffer 
> > >> passed to semanage_select_store. I haven't seen this with semanage but 
> > >> the bug does appear legitimate to me, we should have never been assuming 
> > >> control of the buffer passed to semanage_select_store (especially 
> > >> without documenting it).
> > >>
> > >> This is fun because semanage_select_store was originally a void but 
> > >> clearly this needs to strdup() instead of just setting the pointer. This 
> > >> patch can be applied trunk as it changes the API but the bug would still 
> > >> exist in stable (and the person who reported this will unfortunately 
> > >> have to patch it in their release of the stable repo).
> > >>     
> > >
> > > Wait - we aren't changing API/ABI even in trunk at present, and to do
> > > so, we'd either need to change .so version (incompatible change) or use
> > > the per-symbol versioning technique to keep the old interface alive for
> > > existing binaries while defaulting to the new interface for newer code.
> > >
> > > I also have to ask - if the problem lies in the swig wrapper, why not
> > > fix it there?
> > >
> > >   
> > 
> > Because I'm scared of the swig wrapper :)
> 
> Well, we shouldn't be more afraid of changing the python bindings that
> we are of changing the library API and ABI.

Ok, so maybe there is no way to fix this in the wrapper, as the wrapper
has to create a temporary C string from the python string and then free
it when done with the call.  Which would mean that we need to strdup all
strings passed into the library.

> > But seriously we always strdup (afaik) strings passed in to libsemanage 
> > so this is an inconsistency and should at least be documented.
> 
> The key create functions don't appear to do so, e.g.
> semanage_seuser_key_create.  Don't know how widespread the issue is.
> Why does semanage appear to work ok?

Hmm...well semanage -S/--store doesn't appear to work at all right now,
not sure why.  As far as keys go, they are different in that we don't
free the names in the key_free functions, so no double free there, but
it still appears that they would be prematurely freed by the wrapper
while still in use by the library.  Not sure then why we don't have lots
of bug reports on semanage.
 
> > I suppose we can just start queuing up any api/abi changes for some 
> > future so version, this certainly doesn't warrant bumping the version.
> 
> It could be done via per-symbol versioning rather than a .so version
> change.
> 
> > OTOH I understand that we need a stable ABI in trunk but honestly I 
> > don't know how this change would cause problems (how many external users 
> > are there, how often is this error condition going to occur (esp 
> > compared to how often the error condition it is fixing can occur), etc).
> 
> If we do need to make the change, then I think we want to systematically
> fix all such occurrences at once, and do it cleanly via per-symbol
> versioning or .so version bump.  Which suggests doing it in policyrep
> first.  But if we can make a change to the swig wrapper instead to fix
> the bug, then that would be nice for stable and for a short term fix for
> trunk.

Let's do it this way then:
- change the functions to strdup() internally always.  If the function
presently returns void and the strdup fails, then abort().  If the
function presently returns int, then return an error of course.  We can
apply that change on the current trunk and stable.
- plan to change those void functions to return int, and queue that up
in policyrep.  But that can come later.  Then we can turn those aborts
into returns.

-- 
Stephen Smalley
National Security Agency


--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.

[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux