Commit 1cc6b104 authored by Herbert Pötzl's avatar Herbert Pötzl Committed by David S. Miller

[NET]: Passcred cleanup in struct sock

struct socket uses a 'bool' (unsigned char) to
'flag' the pass-credential option for sockets
(which can be easily replaced by a flag)
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 6fab4b45
......@@ -61,6 +61,7 @@ typedef enum {
#define SOCK_ASYNC_NOSPACE 0
#define SOCK_ASYNC_WAITDATA 1
#define SOCK_NOSPACE 2
#define SOCK_PASSCRED 3
#ifndef ARCH_HAS_SOCKET_TYPES
/** sock_type - Socket types
......@@ -111,7 +112,6 @@ struct socket {
struct sock *sk;
wait_queue_head_t wait;
short type;
unsigned char passcred;
};
struct vm_area_struct;
......
......@@ -51,13 +51,13 @@ static __inline__ void scm_recv(struct socket *sock, struct msghdr *msg,
{
if (!msg->msg_control)
{
if (sock->passcred || scm->fp)
if (test_bit(SOCK_PASSCRED, &sock->flags) || scm->fp)
msg->msg_flags |= MSG_CTRUNC;
scm_destroy(scm);
return;
}
if (sock->passcred)
if (test_bit(SOCK_PASSCRED, &sock->flags))
put_cmsg(msg, SOL_SOCKET, SCM_CREDENTIALS, sizeof(scm->creds), &scm->creds);
if (!scm->fp)
......
......@@ -333,7 +333,10 @@ int sock_setsockopt(struct socket *sock, int level, int optname,
break;
case SO_PASSCRED:
sock->passcred = valbool;
if (valbool)
set_bit(SOCK_PASSCRED, &sock->flags);
else
clear_bit(SOCK_PASSCRED, &sock->flags);
break;
case SO_TIMESTAMP:
......@@ -557,7 +560,7 @@ int sock_getsockopt(struct socket *sock, int level, int optname,
break;
case SO_PASSCRED:
v.val = sock->passcred;
v.val = test_bit(SOCK_PASSCRED, &sock->flags) ? 1 : 0;
break;
case SO_PEERCRED:
......
......@@ -287,7 +287,7 @@ static struct inode *sock_alloc_inode(struct super_block *sb)
ei->socket.ops = NULL;
ei->socket.sk = NULL;
ei->socket.file = NULL;
ei->socket.passcred = 0;
ei->socket.flags = 0;
return &ei->vfs_inode;
}
......
......@@ -861,8 +861,8 @@ static int unix_dgram_connect(struct socket *sock, struct sockaddr *addr,
goto out;
alen = err;
if (sock->passcred && !unix_sk(sk)->addr &&
(err = unix_autobind(sock)) != 0)
if (test_bit(SOCK_PASSCRED, &sock->flags) &&
!unix_sk(sk)->addr && (err = unix_autobind(sock)) != 0)
goto out;
other=unix_find_other(sunaddr, alen, sock->type, hash, &err);
......@@ -952,7 +952,8 @@ static int unix_stream_connect(struct socket *sock, struct sockaddr *uaddr,
goto out;
addr_len = err;
if (sock->passcred && !u->addr && (err = unix_autobind(sock)) != 0)
if (test_bit(SOCK_PASSCRED, &sock->flags)
&& !u->addr && (err = unix_autobind(sock)) != 0)
goto out;
timeo = sock_sndtimeo(sk, flags & O_NONBLOCK);
......@@ -1286,7 +1287,8 @@ static int unix_dgram_sendmsg(struct kiocb *kiocb, struct socket *sock,
goto out;
}
if (sock->passcred && !u->addr && (err = unix_autobind(sock)) != 0)
if (test_bit(SOCK_PASSCRED, &sock->flags)
&& !u->addr && (err = unix_autobind(sock)) != 0)
goto out;
err = -EMSGSIZE;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment