Allow passing O_PATH descriptors via SCM_RIGHTS datagrams
Just need to make sure that AF_UNIX garbage collector won't confuse O_PATHed socket on filesystem for real AF_UNIX opened socket. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
65cfc67223
commit
326be7b484
@ -305,6 +305,8 @@ struct file *fget_raw(unsigned int fd)
|
|||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(fget_raw);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Lightweight file lookup - no refcnt increment if fd table isn't shared.
|
* Lightweight file lookup - no refcnt increment if fd table isn't shared.
|
||||||
*
|
*
|
||||||
|
@ -95,7 +95,7 @@ static int scm_fp_copy(struct cmsghdr *cmsg, struct scm_fp_list **fplp)
|
|||||||
int fd = fdp[i];
|
int fd = fdp[i];
|
||||||
struct file *file;
|
struct file *file;
|
||||||
|
|
||||||
if (fd < 0 || !(file = fget(fd)))
|
if (fd < 0 || !(file = fget_raw(fd)))
|
||||||
return -EBADF;
|
return -EBADF;
|
||||||
*fpp++ = file;
|
*fpp++ = file;
|
||||||
fpl->count++;
|
fpl->count++;
|
||||||
|
@ -104,7 +104,7 @@ struct sock *unix_get_socket(struct file *filp)
|
|||||||
/*
|
/*
|
||||||
* Socket ?
|
* Socket ?
|
||||||
*/
|
*/
|
||||||
if (S_ISSOCK(inode->i_mode)) {
|
if (S_ISSOCK(inode->i_mode) && !(filp->f_mode & FMODE_PATH)) {
|
||||||
struct socket *sock = SOCKET_I(inode);
|
struct socket *sock = SOCKET_I(inode);
|
||||||
struct sock *s = sock->sk;
|
struct sock *s = sock->sk;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user