scm: Only support SCM_RIGHTS on unix domain sockets.

We use scm_send and scm_recv on both unix domain and
netlink sockets, but only unix domain sockets support
everything required for file descriptor passing,
so error if someone attempts to pass file descriptors
over netlink sockets.

Cc: stable@kernel.org
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Eric W. Biederman 2010-02-28 01:20:36 +00:00 committed by David S. Miller
parent 39286fa41a
commit 76dadd76c2
1 changed files with 2 additions and 0 deletions

View File

@ -156,6 +156,8 @@ int __scm_send(struct socket *sock, struct msghdr *msg, struct scm_cookie *p)
switch (cmsg->cmsg_type) switch (cmsg->cmsg_type)
{ {
case SCM_RIGHTS: case SCM_RIGHTS:
if (!sock->ops || sock->ops->family != PF_UNIX)
goto error;
err=scm_fp_copy(cmsg, &p->fp); err=scm_fp_copy(cmsg, &p->fp);
if (err<0) if (err<0)
goto error; goto error;