From: ebiederm@xmission.com (Eric W. Biederman) To: David Howells <dhowells@redhat.com> Cc: keyrings@vger.kernel.org, trond.myklebust@hammerspace.com, sfrench@samba.org, linux-security-module@vger.kernel.org, linux-nfs@vger.kernel.org, linux-cifs@vger.kernel.org, linux-fsdevel@vger.kernel.org, rgb@redhat.com, linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH 05/27] containers: Open a socket inside a container Date: Tue, 19 Feb 2019 16:41:56 +0000 [thread overview] Message-ID: <87k1hvwx0r.fsf@xmission.com> (raw) In-Reply-To: <155024687804.21651.13220990774688382294.stgit@warthog.procyon.org.uk> (David Howells's message of "Fri, 15 Feb 2019 16:07:58 +0000") David Howells <dhowells@redhat.com> writes: > Provide a system call to open a socket inside of a container, using that > container's network namespace. This allows netlink to be used to manage > the container. > > fd = container_socket(int container_fd, > int domain, int type, int protocol); > Nacked-by: "Eric W. Biederman" <ebiederm@xmission.com> Use a namespace file descriptor if you need this. So far we have not added this system call as it is just a performance optimization. And it has been too niche to matter. If this that has changed we can add this separately from everything else you are doing here. > Signed-off-by: David Howells <dhowells@redhat.com> > --- > > arch/x86/entry/syscalls/syscall_32.tbl | 1 + > arch/x86/entry/syscalls/syscall_64.tbl | 1 + > include/linux/socket.h | 3 ++- > include/linux/syscalls.h | 2 ++ > kernel/sys_ni.c | 1 + > net/compat.c | 2 +- > net/socket.c | 34 +++++++++++++++++++++++++++----- > 7 files changed, 37 insertions(+), 7 deletions(-) > > diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl > index 8666693510f9..f4c9beff77a6 100644 > --- a/arch/x86/entry/syscalls/syscall_32.tbl > +++ b/arch/x86/entry/syscalls/syscall_32.tbl > @@ -409,3 +409,4 @@ > 395 i386 sb_notify sys_sb_notify __ia32_sys_sb_notify > 396 i386 container_create sys_container_create __ia32_sys_container_create > 397 i386 fork_into_container sys_fork_into_container __ia32_sys_fork_into_container > +398 i386 container_socket sys_container_socket __ia32_sys_container_socket > diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl > index d40d4790fcb2..e20cdf7b5527 100644 > --- a/arch/x86/entry/syscalls/syscall_64.tbl > +++ b/arch/x86/entry/syscalls/syscall_64.tbl > @@ -354,6 +354,7 @@ > 343 common sb_notify __x64_sys_sb_notify > 344 common container_create __x64_sys_container_create > 345 common fork_into_container __x64_sys_fork_into_container > +346 common container_socket __x64_sys_container_socket > > # > # x32-specific system call numbers start at 512 to avoid cache impact > diff --git a/include/linux/socket.h b/include/linux/socket.h > index ab2041a00e01..154ac900a8a5 100644 > --- a/include/linux/socket.h > +++ b/include/linux/socket.h > @@ -10,6 +10,7 @@ > #include <linux/compiler.h> /* __user */ > #include <uapi/linux/socket.h> > > +struct net; > struct pid; > struct cred; > > @@ -376,7 +377,7 @@ extern int __sys_sendto(int fd, void __user *buff, size_t len, > int addr_len); > extern int __sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr, > int __user *upeer_addrlen, int flags); > -extern int __sys_socket(int family, int type, int protocol); > +extern int __sys_socket(struct net *net, int family, int type, int protocol); > extern int __sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen); > extern int __sys_connect(int fd, struct sockaddr __user *uservaddr, > int addrlen); > diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h > index 15e5cc704df3..547334c6ffc2 100644 > --- a/include/linux/syscalls.h > +++ b/include/linux/syscalls.h > @@ -947,6 +947,8 @@ asmlinkage long sys_container_create(const char __user *name, unsigned int flags > unsigned long spare3, unsigned long spare4, > unsigned long spare5); > asmlinkage long sys_fork_into_container(int containerfd); > +asmlinkage long sys_container_socket(int containerfd, > + int domain, int type, int protocol); > > /* > * Architecture-specific system calls > diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c > index a23ad529d548..ce9c5bb30e7f 100644 > --- a/kernel/sys_ni.c > +++ b/kernel/sys_ni.c > @@ -236,6 +236,7 @@ COND_SYSCALL(shmdt); > /* net/socket.c */ > COND_SYSCALL(socket); > COND_SYSCALL(socketpair); > +COND_SYSCALL(container_socket); > COND_SYSCALL(bind); > COND_SYSCALL(listen); > COND_SYSCALL(accept); > diff --git a/net/compat.c b/net/compat.c > index 959d1c51826d..1b2db740fd33 100644 > --- a/net/compat.c > +++ b/net/compat.c > @@ -856,7 +856,7 @@ COMPAT_SYSCALL_DEFINE2(socketcall, int, call, u32 __user *, args) > > switch (call) { > case SYS_SOCKET: > - ret = __sys_socket(a0, a1, a[2]); > + ret = __sys_socket(current->nsproxy->net_ns, a0, a1, a[2]); > break; > case SYS_BIND: > ret = __sys_bind(a0, compat_ptr(a1), a[2]); > diff --git a/net/socket.c b/net/socket.c > index 7d271a1d0c7e..7406580598b9 100644 > --- a/net/socket.c > +++ b/net/socket.c > @@ -80,6 +80,7 @@ > #include <linux/highmem.h> > #include <linux/mount.h> > #include <linux/fs_context.h> > +#include <linux/container.h> > #include <linux/security.h> > #include <linux/syscalls.h> > #include <linux/compat.h> > @@ -1326,9 +1327,9 @@ int sock_create_kern(struct net *net, int family, int type, int protocol, struct > } > EXPORT_SYMBOL(sock_create_kern); > > -int __sys_socket(int family, int type, int protocol) > +int __sys_socket(struct net *net, int family, int type, int protocol) > { > - int retval; > + long retval; > struct socket *sock; > int flags; > > @@ -1346,7 +1347,7 @@ int __sys_socket(int family, int type, int protocol) > if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK)) > flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK; > > - retval = sock_create(family, type, protocol, &sock); > + retval = __sock_create(net, family, type, protocol, &sock, 0); > if (retval < 0) > return retval; > > @@ -1355,9 +1356,32 @@ int __sys_socket(int family, int type, int protocol) > > SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) > { > - return __sys_socket(family, type, protocol); > + return __sys_socket(current->nsproxy->net_ns, family, type, protocol); > } > > +/* > + * Create a socket inside a container. > + */ > +#ifdef CONFIG_CONTAINERS > +SYSCALL_DEFINE4(container_socket, > + int, containerfd, int, family, int, type, int, protocol) > +{ > + struct fd f = fdget(containerfd); > + long ret; > + > + if (!f.file) > + return -EBADF; > + ret = -EINVAL; > + if (is_container_file(f.file)) { > + struct container *c = f.file->private_data; > + > + ret = __sys_socket(c->ns->net_ns, family, type, protocol); > + } > + fdput(f); > + return ret; > +} > +#endif > + > /* > * Create a pair of connected sockets. > */ > @@ -2555,7 +2579,7 @@ SYSCALL_DEFINE2(socketcall, int, call, unsigned long __user *, args) > > switch (call) { > case SYS_SOCKET: > - err = __sys_socket(a0, a1, a[2]); > + err = __sys_socket(current->nsproxy->net_ns, a0, a1, a[2]); > break; > case SYS_BIND: > err = __sys_bind(a0, (struct sockaddr __user *)a1, a[2]);
WARNING: multiple messages have this Message-ID (diff)
From: ebiederm@xmission.com (Eric W. Biederman) To: David Howells <dhowells@redhat.com> Cc: keyrings@vger.kernel.org, trond.myklebust@hammerspace.com, sfrench@samba.org, linux-security-module@vger.kernel.org, linux-nfs@vger.kernel.org, linux-cifs@vger.kernel.org, linux-fsdevel@vger.kernel.org, rgb@redhat.com, linux-kernel@vger.kernel.org Subject: Re: [RFC PATCH 05/27] containers: Open a socket inside a container Date: Tue, 19 Feb 2019 10:41:56 -0600 [thread overview] Message-ID: <87k1hvwx0r.fsf@xmission.com> (raw) In-Reply-To: <155024687804.21651.13220990774688382294.stgit@warthog.procyon.org.uk> (David Howells's message of "Fri, 15 Feb 2019 16:07:58 +0000") David Howells <dhowells@redhat.com> writes: > Provide a system call to open a socket inside of a container, using that > container's network namespace. This allows netlink to be used to manage > the container. > > fd = container_socket(int container_fd, > int domain, int type, int protocol); > Nacked-by: "Eric W. Biederman" <ebiederm@xmission.com> Use a namespace file descriptor if you need this. So far we have not added this system call as it is just a performance optimization. And it has been too niche to matter. If this that has changed we can add this separately from everything else you are doing here. > Signed-off-by: David Howells <dhowells@redhat.com> > --- > > arch/x86/entry/syscalls/syscall_32.tbl | 1 + > arch/x86/entry/syscalls/syscall_64.tbl | 1 + > include/linux/socket.h | 3 ++- > include/linux/syscalls.h | 2 ++ > kernel/sys_ni.c | 1 + > net/compat.c | 2 +- > net/socket.c | 34 +++++++++++++++++++++++++++----- > 7 files changed, 37 insertions(+), 7 deletions(-) > > diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl > index 8666693510f9..f4c9beff77a6 100644 > --- a/arch/x86/entry/syscalls/syscall_32.tbl > +++ b/arch/x86/entry/syscalls/syscall_32.tbl > @@ -409,3 +409,4 @@ > 395 i386 sb_notify sys_sb_notify __ia32_sys_sb_notify > 396 i386 container_create sys_container_create __ia32_sys_container_create > 397 i386 fork_into_container sys_fork_into_container __ia32_sys_fork_into_container > +398 i386 container_socket sys_container_socket __ia32_sys_container_socket > diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl > index d40d4790fcb2..e20cdf7b5527 100644 > --- a/arch/x86/entry/syscalls/syscall_64.tbl > +++ b/arch/x86/entry/syscalls/syscall_64.tbl > @@ -354,6 +354,7 @@ > 343 common sb_notify __x64_sys_sb_notify > 344 common container_create __x64_sys_container_create > 345 common fork_into_container __x64_sys_fork_into_container > +346 common container_socket __x64_sys_container_socket > > # > # x32-specific system call numbers start at 512 to avoid cache impact > diff --git a/include/linux/socket.h b/include/linux/socket.h > index ab2041a00e01..154ac900a8a5 100644 > --- a/include/linux/socket.h > +++ b/include/linux/socket.h > @@ -10,6 +10,7 @@ > #include <linux/compiler.h> /* __user */ > #include <uapi/linux/socket.h> > > +struct net; > struct pid; > struct cred; > > @@ -376,7 +377,7 @@ extern int __sys_sendto(int fd, void __user *buff, size_t len, > int addr_len); > extern int __sys_accept4(int fd, struct sockaddr __user *upeer_sockaddr, > int __user *upeer_addrlen, int flags); > -extern int __sys_socket(int family, int type, int protocol); > +extern int __sys_socket(struct net *net, int family, int type, int protocol); > extern int __sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen); > extern int __sys_connect(int fd, struct sockaddr __user *uservaddr, > int addrlen); > diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h > index 15e5cc704df3..547334c6ffc2 100644 > --- a/include/linux/syscalls.h > +++ b/include/linux/syscalls.h > @@ -947,6 +947,8 @@ asmlinkage long sys_container_create(const char __user *name, unsigned int flags > unsigned long spare3, unsigned long spare4, > unsigned long spare5); > asmlinkage long sys_fork_into_container(int containerfd); > +asmlinkage long sys_container_socket(int containerfd, > + int domain, int type, int protocol); > > /* > * Architecture-specific system calls > diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c > index a23ad529d548..ce9c5bb30e7f 100644 > --- a/kernel/sys_ni.c > +++ b/kernel/sys_ni.c > @@ -236,6 +236,7 @@ COND_SYSCALL(shmdt); > /* net/socket.c */ > COND_SYSCALL(socket); > COND_SYSCALL(socketpair); > +COND_SYSCALL(container_socket); > COND_SYSCALL(bind); > COND_SYSCALL(listen); > COND_SYSCALL(accept); > diff --git a/net/compat.c b/net/compat.c > index 959d1c51826d..1b2db740fd33 100644 > --- a/net/compat.c > +++ b/net/compat.c > @@ -856,7 +856,7 @@ COMPAT_SYSCALL_DEFINE2(socketcall, int, call, u32 __user *, args) > > switch (call) { > case SYS_SOCKET: > - ret = __sys_socket(a0, a1, a[2]); > + ret = __sys_socket(current->nsproxy->net_ns, a0, a1, a[2]); > break; > case SYS_BIND: > ret = __sys_bind(a0, compat_ptr(a1), a[2]); > diff --git a/net/socket.c b/net/socket.c > index 7d271a1d0c7e..7406580598b9 100644 > --- a/net/socket.c > +++ b/net/socket.c > @@ -80,6 +80,7 @@ > #include <linux/highmem.h> > #include <linux/mount.h> > #include <linux/fs_context.h> > +#include <linux/container.h> > #include <linux/security.h> > #include <linux/syscalls.h> > #include <linux/compat.h> > @@ -1326,9 +1327,9 @@ int sock_create_kern(struct net *net, int family, int type, int protocol, struct > } > EXPORT_SYMBOL(sock_create_kern); > > -int __sys_socket(int family, int type, int protocol) > +int __sys_socket(struct net *net, int family, int type, int protocol) > { > - int retval; > + long retval; > struct socket *sock; > int flags; > > @@ -1346,7 +1347,7 @@ int __sys_socket(int family, int type, int protocol) > if (SOCK_NONBLOCK != O_NONBLOCK && (flags & SOCK_NONBLOCK)) > flags = (flags & ~SOCK_NONBLOCK) | O_NONBLOCK; > > - retval = sock_create(family, type, protocol, &sock); > + retval = __sock_create(net, family, type, protocol, &sock, 0); > if (retval < 0) > return retval; > > @@ -1355,9 +1356,32 @@ int __sys_socket(int family, int type, int protocol) > > SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) > { > - return __sys_socket(family, type, protocol); > + return __sys_socket(current->nsproxy->net_ns, family, type, protocol); > } > > +/* > + * Create a socket inside a container. > + */ > +#ifdef CONFIG_CONTAINERS > +SYSCALL_DEFINE4(container_socket, > + int, containerfd, int, family, int, type, int, protocol) > +{ > + struct fd f = fdget(containerfd); > + long ret; > + > + if (!f.file) > + return -EBADF; > + ret = -EINVAL; > + if (is_container_file(f.file)) { > + struct container *c = f.file->private_data; > + > + ret = __sys_socket(c->ns->net_ns, family, type, protocol); > + } > + fdput(f); > + return ret; > +} > +#endif > + > /* > * Create a pair of connected sockets. > */ > @@ -2555,7 +2579,7 @@ SYSCALL_DEFINE2(socketcall, int, call, unsigned long __user *, args) > > switch (call) { > case SYS_SOCKET: > - err = __sys_socket(a0, a1, a[2]); > + err = __sys_socket(current->nsproxy->net_ns, a0, a1, a[2]); > break; > case SYS_BIND: > err = __sys_bind(a0, (struct sockaddr __user *)a1, a[2]);
next prev parent reply other threads:[~2019-02-19 16:41 UTC|newest] Thread overview: 116+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-02-15 16:07 [RFC PATCH 00/27] Containers and using authenticated filesystems David Howells 2019-02-15 16:07 ` David Howells 2019-02-15 16:07 ` [RFC PATCH 01/27] containers: Rename linux/container.h to linux/container_dev.h David Howells 2019-02-15 16:07 ` [RFC PATCH 02/27] containers: Implement containers as kernel objects David Howells 2019-02-15 16:07 ` David Howells 2019-02-17 18:57 ` Trond Myklebust 2019-02-17 18:57 ` Trond Myklebust 2019-02-17 19:39 ` James Bottomley 2019-02-17 19:39 ` James Bottomley 2019-02-19 16:56 ` Eric W. Biederman 2019-02-19 16:56 ` Eric W. Biederman 2019-02-19 23:03 ` David Howells 2019-02-19 23:03 ` David Howells 2019-02-20 14:23 ` Trond Myklebust 2019-02-20 14:23 ` Trond Myklebust 2019-02-19 23:06 ` David Howells 2019-02-20 2:20 ` James Bottomley 2019-02-20 2:20 ` James Bottomley 2019-02-20 3:04 ` Ian Kent 2019-02-20 3:04 ` Ian Kent 2019-02-20 3:46 ` James Bottomley 2019-02-20 3:46 ` James Bottomley 2019-02-20 4:42 ` Ian Kent 2019-02-20 4:42 ` Ian Kent 2019-02-20 6:57 ` Paul Moore 2019-02-20 6:57 ` Paul Moore 2019-02-19 23:13 ` David Howells 2019-02-19 23:13 ` David Howells 2019-02-19 23:55 ` Tycho Andersen 2019-02-19 23:55 ` Tycho Andersen 2019-02-20 2:46 ` Ian Kent 2019-02-20 2:46 ` Ian Kent 2019-02-20 13:26 ` Christian Brauner 2019-02-20 13:26 ` Christian Brauner 2019-02-20 13:26 ` Christian Brauner 2019-02-21 10:39 ` Ian Kent 2019-02-21 10:39 ` Ian Kent 2019-02-15 16:07 ` [RFC PATCH 03/27] containers: Provide /proc/containers David Howells 2019-02-15 16:07 ` David Howells 2019-02-15 16:07 ` [RFC PATCH 04/27] containers: Allow a process to be forked into a container David Howells 2019-02-15 17:39 ` Stephen Smalley 2019-02-15 17:39 ` Stephen Smalley 2019-02-19 16:39 ` Eric W. Biederman 2019-02-19 16:39 ` Eric W. Biederman 2019-02-19 23:16 ` David Howells 2019-02-19 23:16 ` David Howells 2019-02-15 16:07 ` [RFC PATCH 05/27] containers: Open a socket inside " David Howells 2019-02-19 16:41 ` Eric W. Biederman [this message] 2019-02-19 16:41 ` Eric W. Biederman 2019-02-15 16:08 ` [RFC PATCH 06/27] containers, vfs: Allow syscall dirfd arguments to take a container fd David Howells 2019-02-19 16:45 ` Eric W. Biederman 2019-02-19 16:45 ` Eric W. Biederman 2019-02-19 23:24 ` David Howells 2019-02-19 23:24 ` David Howells 2019-02-15 16:08 ` [RFC PATCH 07/27] containers: Make fsopen() able to create a superblock in a container David Howells 2019-02-15 16:08 ` David Howells 2019-02-15 16:08 ` [RFC PATCH 08/27] containers, vfs: Honour CONTAINER_NEW_EMPTY_FS_NS David Howells 2019-02-17 0:11 ` Al Viro 2019-02-15 16:08 ` [RFC PATCH 09/27] vfs: Allow mounting to other namespaces David Howells 2019-02-17 0:14 ` Al Viro 2019-02-15 16:08 ` [RFC PATCH 10/27] containers: Provide fs_context op for container setting David Howells 2019-02-15 16:09 ` [RFC PATCH 11/27] containers: Sample program for driving container objects David Howells 2019-02-15 16:09 ` David Howells 2019-02-15 16:09 ` [RFC PATCH 12/27] containers: Allow a daemon to intercept request_key upcalls in a container David Howells 2019-02-15 16:09 ` David Howells 2019-02-15 16:09 ` [RFC PATCH 13/27] keys: Provide a keyctl to query a request_key authentication key David Howells 2019-02-15 16:09 ` [RFC PATCH 14/27] keys: Break bits out of key_unlink() David Howells 2019-02-15 16:09 ` David Howells 2019-02-15 16:09 ` [RFC PATCH 15/27] keys: Make __key_link_begin() handle lockdep nesting David Howells 2019-02-15 16:09 ` David Howells 2019-02-15 16:09 ` [RFC PATCH 16/27] keys: Grant Link permission to possessers of request_key auth keys David Howells 2019-02-15 16:10 ` [RFC PATCH 17/27] keys: Add a keyctl to move a key between keyrings David Howells 2019-02-15 16:10 ` David Howells 2019-02-15 16:10 ` [RFC PATCH 18/27] keys: Find the least-recently used unseen key in a keyring David Howells 2019-02-15 16:10 ` David Howells 2019-02-15 16:10 ` [RFC PATCH 19/27] containers: Sample: request_key upcall handling David Howells 2019-02-15 16:10 ` David Howells 2019-02-15 16:10 ` [RFC PATCH 20/27] container, keys: Add a container keyring David Howells 2019-02-15 16:10 ` David Howells 2019-02-15 21:46 ` Eric Biggers 2019-02-15 21:46 ` Eric Biggers 2019-02-15 16:11 ` [RFC PATCH 21/27] keys: Fix request_key() lack of Link perm check on found key David Howells 2019-02-15 16:11 ` [RFC PATCH 22/27] KEYS: Replace uid/gid/perm permissions checking with an ACL David Howells 2019-02-15 16:11 ` David Howells 2019-02-15 17:32 ` Stephen Smalley 2019-02-15 17:32 ` Stephen Smalley 2019-02-15 17:39 ` David Howells 2019-02-15 17:39 ` David Howells 2019-09-30 16:39 ` Richard Haines 2019-09-30 16:39 ` Richard Haines 2019-02-15 16:11 ` [RFC PATCH 23/27] KEYS: Provide KEYCTL_GRANT_PERMISSION David Howells 2019-02-15 16:11 ` David Howells 2019-02-15 16:11 ` [RFC PATCH 24/27] keys: Allow a container to be specified as a subject in a key's ACL David Howells 2019-02-15 16:11 ` David Howells 2019-02-15 16:11 ` [RFC PATCH 25/27] keys: Provide a way to ask for the container keyring David Howells 2019-02-15 16:11 ` David Howells 2019-02-15 16:12 ` [RFC PATCH 26/27] keys: Allow containers to be included in key ACLs by name David Howells 2019-02-15 16:12 ` David Howells 2019-02-15 16:12 ` [RFC PATCH 27/27] containers: Sample to grant access to a key in a container David Howells 2019-02-15 16:12 ` David Howells 2019-02-15 22:36 ` [RFC PATCH 00/27] Containers and using authenticated filesystems James Morris 2019-02-15 22:36 ` James Morris 2019-02-19 16:35 ` Eric W. Biederman 2019-02-19 16:35 ` Eric W. Biederman 2019-02-19 16:35 ` Eric W. Biederman 2019-02-20 14:18 ` Christian Brauner 2019-02-20 14:18 ` Christian Brauner 2019-02-19 23:42 ` David Howells 2019-02-19 23:42 ` David Howells 2019-02-20 7:00 ` Paul Moore 2019-02-20 7:00 ` Paul Moore 2019-02-20 18:54 ` Steve French 2019-02-20 18:54 ` Steve French [not found] <m2o8z7t2w5.fsf@badgerous.net> 2019-09-27 14:46 ` [RFC PATCH 05/27] containers: Open a socket inside a container Eric W. Biederman 2019-09-28 22:29 ` Alun Evans 2019-09-30 10:02 ` Eric W. Biederman
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=87k1hvwx0r.fsf@xmission.com \ --to=ebiederm@xmission.com \ --cc=dhowells@redhat.com \ --cc=keyrings@vger.kernel.org \ --cc=linux-cifs@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nfs@vger.kernel.org \ --cc=linux-security-module@vger.kernel.org \ --cc=rgb@redhat.com \ --cc=sfrench@samba.org \ --cc=trond.myklebust@hammerspace.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.