diff options
Diffstat (limited to 'net/unix')
| -rw-r--r-- | net/unix/af_unix.c | 31 |
1 files changed, 6 insertions, 25 deletions
diff --git a/net/unix/af_unix.c b/net/unix/af_unix.c index ecad42b72ad6..eacddb21a9b4 100644 --- a/net/unix/af_unix.c +++ b/net/unix/af_unix.c | |||
| @@ -2018,7 +2018,7 @@ static unsigned int unix_poll(struct file * file, struct socket *sock, poll_tabl | |||
| 2018 | 2018 | ||
| 2019 | #ifdef CONFIG_PROC_FS | 2019 | #ifdef CONFIG_PROC_FS |
| 2020 | struct unix_iter_state { | 2020 | struct unix_iter_state { |
| 2021 | struct net *net; | 2021 | struct seq_net_private p; |
| 2022 | int i; | 2022 | int i; |
| 2023 | }; | 2023 | }; |
| 2024 | static struct sock *unix_seq_idx(struct unix_iter_state *iter, loff_t pos) | 2024 | static struct sock *unix_seq_idx(struct unix_iter_state *iter, loff_t pos) |
| @@ -2027,7 +2027,7 @@ static struct sock *unix_seq_idx(struct unix_iter_state *iter, loff_t pos) | |||
| 2027 | struct sock *s; | 2027 | struct sock *s; |
| 2028 | 2028 | ||
| 2029 | for (s = first_unix_socket(&iter->i); s; s = next_unix_socket(&iter->i, s)) { | 2029 | for (s = first_unix_socket(&iter->i); s; s = next_unix_socket(&iter->i, s)) { |
| 2030 | if (s->sk_net != iter->net) | 2030 | if (s->sk_net != iter->p.net) |
| 2031 | continue; | 2031 | continue; |
| 2032 | if (off == pos) | 2032 | if (off == pos) |
| 2033 | return s; | 2033 | return s; |
| @@ -2054,7 +2054,7 @@ static void *unix_seq_next(struct seq_file *seq, void *v, loff_t *pos) | |||
| 2054 | sk = first_unix_socket(&iter->i); | 2054 | sk = first_unix_socket(&iter->i); |
| 2055 | else | 2055 | else |
| 2056 | sk = next_unix_socket(&iter->i, sk); | 2056 | sk = next_unix_socket(&iter->i, sk); |
| 2057 | while (sk && (sk->sk_net != iter->net)) | 2057 | while (sk && (sk->sk_net != iter->p.net)) |
| 2058 | sk = next_unix_socket(&iter->i, sk); | 2058 | sk = next_unix_socket(&iter->i, sk); |
| 2059 | return sk; | 2059 | return sk; |
| 2060 | } | 2060 | } |
| @@ -2118,27 +2118,8 @@ static const struct seq_operations unix_seq_ops = { | |||
| 2118 | 2118 | ||
| 2119 | static int unix_seq_open(struct inode *inode, struct file *file) | 2119 | static int unix_seq_open(struct inode *inode, struct file *file) |
| 2120 | { | 2120 | { |
| 2121 | struct unix_iter_state *it; | 2121 | return seq_open_net(inode, file, &unix_seq_ops, |
| 2122 | 2122 | sizeof(struct unix_iter_state)); | |
| 2123 | it = __seq_open_private(file, &unix_seq_ops, | ||
| 2124 | sizeof(struct unix_iter_state)); | ||
| 2125 | if (it == NULL) | ||
| 2126 | return -ENOMEM; | ||
| 2127 | |||
| 2128 | it->net = get_proc_net(inode); | ||
| 2129 | if (it->net == NULL) { | ||
| 2130 | seq_release_private(inode, file); | ||
| 2131 | return -ENXIO; | ||
| 2132 | } | ||
| 2133 | return 0; | ||
| 2134 | } | ||
| 2135 | |||
| 2136 | static int unix_seq_release(struct inode *inode, struct file *file) | ||
| 2137 | { | ||
| 2138 | struct seq_file *seq = file->private_data; | ||
| 2139 | struct unix_iter_state *iter = seq->private; | ||
| 2140 | put_net(iter->net); | ||
| 2141 | return seq_release_private(inode, file); | ||
| 2142 | } | 2123 | } |
| 2143 | 2124 | ||
| 2144 | static const struct file_operations unix_seq_fops = { | 2125 | static const struct file_operations unix_seq_fops = { |
| @@ -2146,7 +2127,7 @@ static const struct file_operations unix_seq_fops = { | |||
| 2146 | .open = unix_seq_open, | 2127 | .open = unix_seq_open, |
| 2147 | .read = seq_read, | 2128 | .read = seq_read, |
| 2148 | .llseek = seq_lseek, | 2129 | .llseek = seq_lseek, |
| 2149 | .release = unix_seq_release, | 2130 | .release = seq_release_net, |
| 2150 | }; | 2131 | }; |
| 2151 | 2132 | ||
| 2152 | #endif | 2133 | #endif |
