From: Simo Sorce <ssorce@redhat.com>
To: Andy Lutomirski <luto@amacapital.net>
Cc: Vivek Goyal <vgoyal@redhat.com>,
Daniel J Walsh <dwalsh@redhat.com>,
David Miller <davem@davemloft.net>, Tejun Heo <tj@kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
lpoetter@redhat.com, cgroups@vger.kernel.org, kay@redhat.com,
Network Development <netdev@vger.kernel.org>
Subject: Re: [PATCH 2/2] net: Implement SO_PASSCGROUP to enable passing cgroup path
Date: Thu, 17 Apr 2014 15:15:43 -0400 [thread overview]
Message-ID: <1397762143.2628.118.camel@willson.li.ssimo.org> (raw)
In-Reply-To: <CALCETrXJPJeGBdauQS_WR5FNaZXR=05NjNKuC6r0xFORt+eaJQ@mail.gmail.com>
On Thu, 2014-04-17 at 12:06 -0700, Andy Lutomirski wrote:
> On Thu, Apr 17, 2014 at 11:57 AM, Vivek Goyal <vgoyal@redhat.com> wrote:
> > On Thu, Apr 17, 2014 at 02:50:23PM -0400, Vivek Goyal wrote:
> >> On Thu, Apr 17, 2014 at 02:23:33PM -0400, Simo Sorce wrote:
> >> > On Thu, 2014-04-17 at 10:35 -0700, Andy Lutomirski wrote:
> >> > > On Thu, Apr 17, 2014 at 10:33 AM, Simo Sorce <ssorce@redhat.com> wrote:
> >> > > > On Thu, 2014-04-17 at 10:26 -0700, Andy Lutomirski wrote:
> >> > > >>
> >> > > >> Not really. write(2) can't send SCM_CGROUP. Callers of sendmsg(2)
> >> > > >> who supply SCM_CGROUP are explicitly indicating that they want their
> >> > > >> cgroup associated with that message. Callers of write(2) and send(2)
> >> > > >> are simply indicating that they have some bytes that they want to
> >> > > >> shove into whatever's at the other end of the fd.
> >> > > >
> >> > > > But there is no attack vector that passes by tricking setuid binaries to
> >> > > > write to pre-opened file descriptors on sendmsg(), and for the other
> >> > > > cases (connected socket) journald can always cross check with
> >> > > > SO_PEERCGROUP, so why do we care again ?
> >> > >
> >> > > Because the proposed code does not do what I described, at least as
> >> > > far I as I can tell.
> >> >
> >> > Ok let me backtrack, apparently if you explicitly use connect() on a
> >> > datagram socket then you *can* write() (thanks to Vivek for checking
> >> > this).
> >> >
> >> > So you can trick something to write() to it but you can't do
> >> > SO_PEERCGROUP on the other side, because it is not really a connected
> >> > socket, the connection is only faked on the sender side by constructing
> >> > sendmsg() messages with the original address passed into connect().
> >> >
> >> > So given this unfortunate circumstance, requiring the client to
> >> > explicitly pass cgroup data on unix datagram sockets may be an
> >> > acceptable request IMO.
> >> >
> >> > Perhaps this could be done with a sendmsg() header flag or simplified
> >> > ancillary data even, rather than forcing the sender process to retrieve
> >> > and construct the whole information which is already available in
> >> > kernel.
> >>
> >> So what would be the protocol here? When should somebody send an
> >> SCM_CGROUP message using sendmsg()?
> >
> > I don't know how it will even be used for systemd logging case. systemd
> > provides various ways to connect stdout of services. So say a service's
> > stdout is connected to a connected datagram socket and all printf()
> > messages to stdout are being logged by receiver in journal. Now how
> > would sender know that it is supposed to send SCM_CGROUP? One needs
> > to modify printf() now?
>
> Does connecting stdout to a datagram socket really work well? The
> systemd function connect_logger_as looks like it's using stream
> sockets, one per service, connected to /run/systemd/journal/stdout.
> There's some rather strange logic in journald to authenticate the
> thing that connects (using SO_PEERCRED!), but I don't see why this
> code would even want to use SCM_CGROUP.
>
> IOW, write(2) issues notwithstanding, I'm still wondering what the use
> case for this whole thing is.
I "think" the use case is to aggregate all the logs that belong to a
specific service by using a cgroup name, then, as long as children do
not close stdout/stderr anything they emit would be captured and
properly filed with the rest of the logs from the other process of the
same control group, which has been made to mean "the service".
I also "think" using datagram sockets may be an attempt to reduce the
number of sockets that need to be kept open and polled on the receiving
side.
But I really haven't discussed the use case with them, we just happened
to come to similar needs wrt knowing information about cgroups, and it
seemed logical to combined all needs into a single patchset given they
are related from the kernel point of view.
Simo.
next prev parent reply other threads:[~2014-04-17 19:15 UTC|newest]
Thread overview: 91+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-04-15 21:15 [PATCH 0/2] net: Implement SO_PEERCGROUP and SO_PASSCGROUP socket options Vivek Goyal
2014-04-15 21:15 ` [PATCH 1/2] net: Implement SO_PEERCGROUP Vivek Goyal
2014-04-15 21:54 ` Andy Lutomirski
2014-04-16 0:22 ` Vivek Goyal
2014-04-15 21:15 ` [PATCH 2/2] net: Implement SO_PASSCGROUP to enable passing cgroup path Vivek Goyal
2014-04-15 21:53 ` Andy Lutomirski
2014-04-15 23:09 ` Simo Sorce
2014-04-16 0:20 ` Vivek Goyal
2014-04-16 1:05 ` David Miller
2014-04-16 3:47 ` Andy Lutomirski
2014-04-16 10:17 ` Vivek Goyal
2014-04-16 14:34 ` Andy Lutomirski
2014-04-16 15:10 ` Vivek Goyal
2014-04-16 12:57 ` David Miller
2014-04-16 14:37 ` Andy Lutomirski
2014-04-16 16:13 ` Simo Sorce
2014-04-16 16:21 ` Tejun Heo
2014-04-16 16:54 ` Simo Sorce
2014-04-16 16:31 ` Andy Lutomirski
2014-04-16 17:02 ` Simo Sorce
2014-04-16 17:29 ` Andy Lutomirski
2014-04-16 17:34 ` Simo Sorce
2014-04-16 17:53 ` Andy Lutomirski
2014-04-16 18:36 ` Vivek Goyal
2014-04-16 18:40 ` Andy Lutomirski
2014-04-16 18:51 ` Vivek Goyal
2014-04-16 18:59 ` Andy Lutomirski
2014-04-16 18:06 ` Vivek Goyal
2014-04-16 18:13 ` Andy Lutomirski
2014-04-16 18:25 ` Vivek Goyal
2014-04-16 18:35 ` Andy Lutomirski
2014-04-16 19:06 ` Vivek Goyal
2014-04-16 19:13 ` Andy Lutomirski
2014-04-16 19:39 ` Vivek Goyal
2014-04-16 20:24 ` Andy Lutomirski
2014-04-17 13:41 ` Vivek Goyal
2014-04-16 18:59 ` Vivek Goyal
2014-04-17 15:41 ` Daniel J Walsh
2014-04-17 16:04 ` Simo Sorce
2014-04-17 16:11 ` Andy Lutomirski
2014-04-17 16:24 ` Simo Sorce
2014-04-17 16:37 ` Andy Lutomirski
2014-04-17 16:48 ` Simo Sorce
2014-04-17 16:55 ` Andy Lutomirski
2014-04-17 17:12 ` Vivek Goyal
2014-04-17 17:26 ` Andy Lutomirski
2014-04-17 17:33 ` Simo Sorce
2014-04-17 17:35 ` Andy Lutomirski
2014-04-17 17:47 ` Simo Sorce
2014-04-17 18:05 ` Andy Lutomirski
2014-04-17 18:23 ` Simo Sorce
2014-04-17 18:33 ` Andy Lutomirski
2014-04-17 18:50 ` Vivek Goyal
2014-04-17 18:57 ` Vivek Goyal
2014-04-17 19:06 ` Andy Lutomirski
2014-04-17 19:15 ` Simo Sorce [this message]
2014-04-17 19:19 ` Andy Lutomirski
2014-04-17 19:10 ` Simo Sorce
2014-04-17 19:16 ` Vivek Goyal
2014-04-17 19:46 ` Andy Lutomirski
2014-04-21 15:03 ` Vivek Goyal
2014-04-21 15:47 ` Andy Lutomirski
2014-04-23 15:07 ` Vivek Goyal
2014-04-23 15:37 ` Andy Lutomirski
2014-04-23 16:01 ` Vivek Goyal
2014-04-17 19:23 ` Andy Lutomirski
2014-04-17 17:52 ` Simo Sorce
2014-04-17 18:04 ` Andy Lutomirski
2014-04-17 18:31 ` Simo Sorce
2014-04-17 16:38 ` Vivek Goyal
2014-04-17 16:05 ` Andy Lutomirski
2014-04-17 16:12 ` Vivek Goyal
2014-04-23 16:45 ` Vivek Goyal
2014-04-23 17:29 ` David Miller
2014-04-24 20:34 ` Vivek Goyal
2014-04-24 20:48 ` David Miller
2014-04-24 21:04 ` Vivek Goyal
2014-04-24 21:11 ` David Miller
2014-04-25 0:29 ` Simo Sorce
2014-04-22 20:05 ` [PATCH 0/2] net: Implement SO_PEERCGROUP and SO_PASSCGROUP socket options David Miller
2014-04-22 20:08 ` Andy Lutomirski
2014-04-22 20:29 ` David Miller
2014-04-22 20:31 ` Andy Lutomirski
2014-04-22 20:32 ` David Miller
2014-04-23 0:37 ` Andy Lutomirski
2014-04-23 19:05 ` Vivek Goyal
2014-04-23 20:53 ` Daniel J Walsh
2014-04-24 13:01 ` Vivek Goyal
2014-04-23 15:55 ` Vivek Goyal
2014-04-23 16:16 ` Vivek Goyal
2014-04-23 17:21 ` Andy Lutomirski
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1397762143.2628.118.camel@willson.li.ssimo.org \
--to=ssorce@redhat.com \
--cc=cgroups@vger.kernel.org \
--cc=davem@davemloft.net \
--cc=dwalsh@redhat.com \
--cc=kay@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lpoetter@redhat.com \
--cc=luto@amacapital.net \
--cc=netdev@vger.kernel.org \
--cc=tj@kernel.org \
--cc=vgoyal@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome