Diff for /linux/net/unix.c between versions 1.1.1.4 and 1.1.1.5

version 1.1.1.4, 2018/04/24 18:13:51 version 1.1.1.5, 2018/04/24 18:15:48
Line 46  static int unix_proto_release(struct soc Line 46  static int unix_proto_release(struct soc
 static int unix_proto_bind(struct socket *sock, struct sockaddr *umyaddr,  static int unix_proto_bind(struct socket *sock, struct sockaddr *umyaddr,
                            int sockaddr_len);                             int sockaddr_len);
 static int unix_proto_connect(struct socket *sock, struct sockaddr *uservaddr,  static int unix_proto_connect(struct socket *sock, struct sockaddr *uservaddr,
                               int sockaddr_len);                                int sockaddr_len, int flags);
 static int unix_proto_socketpair(struct socket *sock1, struct socket *sock2);  static int unix_proto_socketpair(struct socket *sock1, struct socket *sock2);
 static int unix_proto_accept(struct socket *sock, struct socket *newsock);  static int unix_proto_accept(struct socket *sock, struct socket *newsock, 
                                int flags);
 static int unix_proto_getname(struct socket *sock, struct sockaddr *usockaddr,  static int unix_proto_getname(struct socket *sock, struct sockaddr *usockaddr,
                               int *usockaddr_len, int peer);                                int *usockaddr_len, int peer);
 static int unix_proto_read(struct socket *sock, char *ubuf, int size,  static int unix_proto_read(struct socket *sock, char *ubuf, int size,
Line 58  static int unix_proto_write(struct socke Line 59  static int unix_proto_write(struct socke
 static int unix_proto_select(struct socket *sock, int sel_type, select_table * wait);  static int unix_proto_select(struct socket *sock, int sel_type, select_table * wait);
 static int unix_proto_ioctl(struct socket *sock, unsigned int cmd,  static int unix_proto_ioctl(struct socket *sock, unsigned int cmd,
                             unsigned long arg);                              unsigned long arg);
   static int unix_proto_listen(struct socket *sock, int backlog);
   static int unix_proto_send (struct socket *sock, void *buff, int len,
                               int nonblock, unsigned flags);
   static int unix_proto_recv (struct socket *sock, void *buff, int len,
                               int nonblock, unsigned flags);
   static int unix_proto_sendto (struct socket *sock, void *buff, int len,
                                 int nonblock, unsigned flags,
                                 struct sockaddr *addr, int addr_len);
   static int unix_proto_recvfrom (struct socket *sock, void *buff, int len,
                                   int nonblock, unsigned flags,
                                   struct sockaddr *addr, int *addr_len);
   
   static int unix_proto_shutdown (struct socket *sock, int how);
   
   static int unix_proto_setsockopt (struct socket *sock, int level, int optname,
                                     char *optval, int optlen);
   static int unix_proto_getsockopt (struct socket *sock, int level, int optname,
                                     char *optval, int *optlen);
   
 struct proto_ops unix_proto_ops = {  struct proto_ops unix_proto_ops = {
         unix_proto_init,          unix_proto_init,
Line 72  struct proto_ops unix_proto_ops = { Line 91  struct proto_ops unix_proto_ops = {
         unix_proto_read,          unix_proto_read,
         unix_proto_write,          unix_proto_write,
         unix_proto_select,          unix_proto_select,
         unix_proto_ioctl          unix_proto_ioctl,
           unix_proto_listen,
           unix_proto_send,
           unix_proto_recv,
           unix_proto_sendto,
           unix_proto_recvfrom,
           unix_proto_shutdown,
           unix_proto_setsockopt,
           unix_proto_getsockopt,
           NULL /* unix_proto_fcntl. */
 };  };
   
 #ifdef SOCK_DEBUG  #ifdef SOCK_DEBUG
Line 94  sockaddr_un_printk(struct sockaddr_un *s Line 122  sockaddr_un_printk(struct sockaddr_un *s
         }          }
 }  }
 #endif  #endif
     
   /* don't have to do anything. */
   static int
   unix_proto_listen (struct socket *sock, int backlog)
   {
     return (0);
   }
   
   static int
   unix_proto_setsockopt(struct socket *sock, int level, int optname,
                         char *optval, int optlen)
   {
       return (-EOPNOTSUPP);
   }
   
   static int
   unix_proto_getsockopt(struct socket *sock, int level, int optname,
                         char *optval, int *optlen)
   {
       return (-EOPNOTSUPP);
   }
   
   static int
   unix_proto_sendto(struct socket *sock, void *buff, int len, int nonblock, 
                     unsigned flags,  struct sockaddr *addr, int addr_len)
   {
           return (-EOPNOTSUPP);
   }     
   
   static int
   unix_proto_recvfrom(struct socket *sock, void *buff, int len, int nonblock, 
                       unsigned flags, struct sockaddr *addr, int *addr_len)
   {
           return (-EOPNOTSUPP);
   }     
   
   static int
   unix_proto_shutdown (struct socket *sock, int how)
   {
           return (-EOPNOTSUPP);
   }
   
   static int
   unix_proto_send(struct socket *sock, void *buff, int len, int nonblock,
                   unsigned flags)
   {
           /* this error needs to be checked. */
           if (flags != 0)
             return (-EINVAL);
           return (unix_proto_write (sock, buff, len, nonblock));
   }
   
   static int
   unix_proto_recv(struct socket *sock, void *buff, int len, int nonblock,
                   unsigned flags)
   {
           /* this error needs to be checked. */
           if (flags != 0)
             return (-EINVAL);
           return (unix_proto_read (sock, buff, len, nonblock));
   }
   
   
 static struct unix_proto_data *  static struct unix_proto_data *
 unix_data_lookup(struct sockaddr_un *sockun, int sockaddr_len)  unix_data_lookup(struct sockaddr_un *sockun, int sockaddr_len)
Line 261  unix_proto_bind(struct socket *sock, str Line 351  unix_proto_bind(struct socket *sock, str
         set_fs(get_ds());          set_fs(get_ds());
         i = do_mknod(fname, S_IFSOCK | 0777, 0);          i = do_mknod(fname, S_IFSOCK | 0777, 0);
         if (i == 0)          if (i == 0)
                 i = open_namei(fname, 0, S_IFSOCK, &upd->inode);                  i = open_namei(fname, 0, S_IFSOCK, &upd->inode, NULL);
         set_fs(old_fs);          set_fs(old_fs);
         if (i < 0) {          if (i < 0) {
                 printk("unix_proto_bind: can't open socket %s\n", fname);                  printk("unix_proto_bind: can't open socket %s\n", fname);
Line 282  unix_proto_bind(struct socket *sock, str Line 372  unix_proto_bind(struct socket *sock, str
  */   */
 static int  static int
 unix_proto_connect(struct socket *sock, struct sockaddr *uservaddr,  unix_proto_connect(struct socket *sock, struct sockaddr *uservaddr,
                    int sockaddr_len)                     int sockaddr_len, int flags)
 {  {
         int i;          int i;
         struct unix_proto_data *serv_upd;          struct unix_proto_data *serv_upd;
Line 337  unix_proto_socketpair(struct socket *soc Line 427  unix_proto_socketpair(struct socket *soc
  * on accept, we ref the peer's data for safe writes   * on accept, we ref the peer's data for safe writes
  */   */
 static int  static int
 unix_proto_accept(struct socket *sock, struct socket *newsock)  unix_proto_accept(struct socket *sock, struct socket *newsock, int flags)
 {  {
      struct socket *clientsock;
   
         PRINTK("unix_proto_accept: socket 0x%x accepted via socket 0x%x\n",          PRINTK("unix_proto_accept: socket 0x%x accepted via socket 0x%x\n",
                sock, newsock);                 sock, newsock);
         unix_data_ref(UN_DATA(newsock->conn));  
           /*
            * if there aren't any sockets awaiting connection, then wait for
            * one, unless nonblocking
            */
           while (!(clientsock = sock->iconn)) {
                   if (flags & O_NONBLOCK)
                           return -EAGAIN;
                   interruptible_sleep_on(sock->wait);
                   if (current->signal & ~current->blocked) {
                           PRINTK("sys_accept: sleep was interrupted\n");
                           return -ERESTARTSYS;
                   }
           }
   
           /*
            * great. finish the connection relative to server and client,
            * wake up the client and return the new fd to the server
            */
           sock->iconn = clientsock->next;
           clientsock->next = NULL;
           newsock->conn = clientsock;
           clientsock->conn = newsock;
           clientsock->state = SS_CONNECTED;
           newsock->state = SS_CONNECTED;
           wake_up(clientsock->wait);
           unix_data_ref (UN_DATA(newsock->conn));
         UN_DATA(newsock)->peerupd = UN_DATA(newsock->conn);          UN_DATA(newsock)->peerupd = UN_DATA(newsock->conn);
         return 0;          return 0;
 }  }
Line 525  unix_proto_select(struct socket *sock, i Line 643  unix_proto_select(struct socket *sock, i
 {  {
         struct unix_proto_data *upd, *peerupd;          struct unix_proto_data *upd, *peerupd;
   
           /*
            * handle server sockets specially
            */
           if (sock->flags & SO_ACCEPTCON) {
                   if (sel_type == SEL_IN) {
                           PRINTK("sock_select: %sconnections pending\n",
                                  sock->iconn ? "" : "no ");
                           if (sock->iconn)
                                   return 1;
                           select_wait(sock->wait, wait);
                           return sock->iconn ? 1 : 0;
                   }
                   PRINTK("sock_select: nothing else for server socket\n");
                   select_wait(sock->wait, wait);
                   return 0;
           }
   
         if (sel_type == SEL_IN) {          if (sel_type == SEL_IN) {
                 upd = UN_DATA(sock);                  upd = UN_DATA(sock);
                 PRINTK("unix_proto_select: there is%s data available\n",                  PRINTK("unix_proto_select: there is%s data available\n",
Line 565  unix_proto_ioctl(struct socket *sock, un Line 700  unix_proto_ioctl(struct socket *sock, un
         peerupd = (sock->state == SS_CONNECTED) ? UN_DATA(sock->conn) : NULL;          peerupd = (sock->state == SS_CONNECTED) ? UN_DATA(sock->conn) : NULL;
   
         switch (cmd) {          switch (cmd) {
   
         case TIOCINQ:          case TIOCINQ:
                   if (sock->flags & SO_ACCEPTCON)
                           return -EINVAL;
                 verify_area((void *)arg, sizeof(unsigned long));                  verify_area((void *)arg, sizeof(unsigned long));
                 if (UN_BUF_AVAIL(upd) || peerupd)                  if (UN_BUF_AVAIL(upd) || peerupd)
                         put_fs_long(UN_BUF_AVAIL(upd), (unsigned long *)arg);                          put_fs_long(UN_BUF_AVAIL(upd), (unsigned long *)arg);
Line 574  unix_proto_ioctl(struct socket *sock, un Line 712  unix_proto_ioctl(struct socket *sock, un
                 break;                  break;
   
         case TIOCOUTQ:          case TIOCOUTQ:
                   if (sock->flags & SO_ACCEPTCON)
                           return -EINVAL;
                 verify_area((void *)arg, sizeof(unsigned long));                  verify_area((void *)arg, sizeof(unsigned long));
                 if (peerupd)                  if (peerupd)
                         put_fs_long(UN_BUF_SPACE(peerupd),                          put_fs_long(UN_BUF_SPACE(peerupd),

Removed from v.1.1.1.4  
changed lines
  Added in v.1.1.1.5


unix.superglobalmegacorp.com