Re: [libmnl] Creating netlink socket with SOCK_CLOEXEC flag

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

 



On Thu, Oct 01, 2015 at 06:50:05PM +0200, Pablo Neira Ayuso wrote:
> On Thu, Oct 01, 2015 at 06:16:04PM +0200, Guillaume Nault wrote:
> > Hi,
> > 
> > I'm looking at how libmnl could be used with CLOEXEC netlink sockets.
> > Of course, one can use the
> >    nl = mnl_socket_open();
> >    fd = mnl_socket_get_fd(nl);
> >    fcntl(fd, F_SETFD, O_CLOEXEC);
> > sequence, but this is racy in multi-threaded programs, where another
> > thread could fork()/execve() between the mnl_socket_open() and the
> > fcntl() calls. Applying the CLOEXEC flag at socket creation closes this
> > issue.
> > 
> > There are three different approaches I can think of:
> >   1- Make mnl_socket_open() unconditionally add the SOCK_CLOEXEC flag in
> >      its socket() call.
> >   2- Define mnl_socket_open2(), similar to mnl_socket_open() but with an
> >      additional flags parameter that would be passed to socket().
> >   3- Tell user to create its netlink socket with the required flags and
> >      use it with mnl_socket_fdopen().
> > 
> > Solution #1 would provide safe default for all users, but that'd be an
> > ABI change. Also decision would need to be made wrt. platforms not
> > handling SOCK_CLOEXEC.
> > 
> > Solution #2 is more generic and allows all SOCK_* flags defined by the
> > plateform. But it's a bit more inelegant and exports yet another function
> > to allocate an mnl socket.
> 
> I'd suggest you add mnl_socket_open2().

Ok, will do.
--
To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Netfitler Users]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux