diff options
Diffstat (limited to 'net')
-rw-r--r-- | net/ipv4/tcp_probe.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/net/ipv4/tcp_probe.c b/net/ipv4/tcp_probe.c index 1c509592574a..5ff0ce6e9d39 100644 --- a/net/ipv4/tcp_probe.c +++ b/net/ipv4/tcp_probe.c | |||
@@ -190,19 +190,18 @@ static ssize_t tcpprobe_read(struct file *file, char __user *buf, | |||
190 | 190 | ||
191 | width = tcpprobe_sprint(tbuf, sizeof(tbuf)); | 191 | width = tcpprobe_sprint(tbuf, sizeof(tbuf)); |
192 | 192 | ||
193 | if (width < len) | 193 | if (cnt + width < len) |
194 | tcp_probe.tail = (tcp_probe.tail + 1) % bufsize; | 194 | tcp_probe.tail = (tcp_probe.tail + 1) % bufsize; |
195 | 195 | ||
196 | spin_unlock_bh(&tcp_probe.lock); | 196 | spin_unlock_bh(&tcp_probe.lock); |
197 | 197 | ||
198 | /* if record greater than space available | 198 | /* if record greater than space available |
199 | return partial buffer (so far) */ | 199 | return partial buffer (so far) */ |
200 | if (width >= len) | 200 | if (cnt + width >= len) |
201 | break; | 201 | break; |
202 | 202 | ||
203 | error = copy_to_user(buf + cnt, tbuf, width); | 203 | if (copy_to_user(buf + cnt, tbuf, width)) |
204 | if (error) | 204 | return -EFAULT; |
205 | break; | ||
206 | cnt += width; | 205 | cnt += width; |
207 | } | 206 | } |
208 | 207 | ||