]> err.no Git - linux-2.6/blobdiff - net/socket.c
[NETFILTER]: Make NETMAP target usable in OUTPUT
[linux-2.6] / net / socket.c
index 6b7c3b51a7c12ab6ecc160cc08cda83dbb2a9a9c..5f76ab8a15944fa5dd2374f75078d6eb52f00530 100644 (file)
@@ -383,9 +383,8 @@ int sock_map_fd(struct socket *sock)
                        goto out;
                }
 
-               sprintf(name, "[%lu]", SOCK_INODE(sock)->i_ino);
+               this.len = sprintf(name, "[%lu]", SOCK_INODE(sock)->i_ino);
                this.name = name;
-               this.len = strlen(name);
                this.hash = SOCK_INODE(sock)->i_ino;
 
                file->f_dentry = d_alloc(sock_mnt->mnt_sb->s_root, &this);
@@ -405,6 +404,7 @@ int sock_map_fd(struct socket *sock)
                file->f_mode = FMODE_READ | FMODE_WRITE;
                file->f_flags = O_RDWR;
                file->f_pos = 0;
+               file->private_data = sock;
                fd_install(fd, file);
        }
 
@@ -437,6 +437,9 @@ struct socket *sockfd_lookup(int fd, int *err)
                return NULL;
        }
 
+       if (file->f_op == &socket_file_ops)
+               return file->private_data;      /* set in sock_map_fd */
+
        inode = file->f_dentry->d_inode;
        if (!S_ISSOCK(inode->i_mode)) {
                *err = -ENOTSOCK;
@@ -1908,7 +1911,7 @@ asmlinkage long sys_socketcall(int call, unsigned long __user *args)
        if (copy_from_user(a, args, nargs[call]))
                return -EFAULT;
 
-       err = audit_socketcall(nargs[call]/sizeof(unsigned long), args);
+       err = audit_socketcall(nargs[call]/sizeof(unsigned long), a);
        if (err)
                return err;