Skip to content

Commit

Permalink
Allow passing O_PATH descriptors via SCM_RIGHTS datagrams
Browse files Browse the repository at this point in the history
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 <[email protected]>
  • Loading branch information
Al Viro committed Mar 15, 2011
1 parent 65cfc67 commit 326be7b
Show file tree
Hide file tree
Showing 3 changed files with 4 additions and 2 deletions.
2 changes: 2 additions & 0 deletions fs/file_table.c
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,8 @@ struct file *fget_raw(unsigned int fd)
return file;
}

EXPORT_SYMBOL(fget_raw);

/*
* Lightweight file lookup - no refcnt increment if fd table isn't shared.
*
Expand Down
2 changes: 1 addition & 1 deletion net/core/scm.c
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ static int scm_fp_copy(struct cmsghdr *cmsg, struct scm_fp_list **fplp)
int fd = fdp[i];
struct file *file;

if (fd < 0 || !(file = fget(fd)))
if (fd < 0 || !(file = fget_raw(fd)))
return -EBADF;
*fpp++ = file;
fpl->count++;
Expand Down
2 changes: 1 addition & 1 deletion net/unix/garbage.c
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ struct sock *unix_get_socket(struct file *filp)
/*
* 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 sock *s = sock->sk;

Expand Down

0 comments on commit 326be7b

Please sign in to comment.