|
@@ -725,23 +725,27 @@ static int pcbit_stat(u_char __user *buf, int len, int driver, int channel)
|
|
|
|
|
|
if (stat_st < stat_end)
|
|
|
{
|
|
|
- copy_to_user(buf, statbuf + stat_st, len);
|
|
|
+ if (copy_to_user(buf, statbuf + stat_st, len))
|
|
|
+ return -EFAULT;
|
|
|
stat_st += len;
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
if (len > STATBUF_LEN - stat_st)
|
|
|
{
|
|
|
- copy_to_user(buf, statbuf + stat_st,
|
|
|
- STATBUF_LEN - stat_st);
|
|
|
- copy_to_user(buf, statbuf,
|
|
|
- len - (STATBUF_LEN - stat_st));
|
|
|
+ if (copy_to_user(buf, statbuf + stat_st,
|
|
|
+ STATBUF_LEN - stat_st))
|
|
|
+ return -EFAULT;
|
|
|
+ if (copy_to_user(buf, statbuf,
|
|
|
+ len - (STATBUF_LEN - stat_st)))
|
|
|
+ return -EFAULT;
|
|
|
|
|
|
stat_st = len - (STATBUF_LEN - stat_st);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- copy_to_user(buf, statbuf + stat_st, len);
|
|
|
+ if (copy_to_user(buf, statbuf + stat_st, len))
|
|
|
+ return -EFAULT;
|
|
|
|
|
|
stat_st += len;
|
|
|
|