aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan Carpenter <dan.carpenter@oracle.com>2016-07-13 06:35:29 -0400
committerRob Clark <robdclark@gmail.com>2016-07-16 10:29:32 -0400
commit5745d21f9a92fa3b70149df69574a13becc3d53e (patch)
treeff3a878abd84eafc7b77c146a73c1f8192a8df4f
parent06f3217207766b4bc2e56b88e0736037ae92fd30 (diff)
drm/msm: return -EFAULT instead of bytes remaining
copy_to/from_user returns the number of bytes remaining to be copied but we want to return -EFAULT. Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Rob Clark <robdclark@gmail.com>
-rw-r--r--drivers/gpu/drm/msm/msm_perf.c7
-rw-r--r--drivers/gpu/drm/msm/msm_rd.c5
2 files changed, 7 insertions, 5 deletions
diff --git a/drivers/gpu/drm/msm/msm_perf.c b/drivers/gpu/drm/msm/msm_perf.c
index 830857c47c86..17fe4e53e0d1 100644
--- a/drivers/gpu/drm/msm/msm_perf.c
+++ b/drivers/gpu/drm/msm/msm_perf.c
@@ -132,7 +132,7 @@ static ssize_t perf_read(struct file *file, char __user *buf,
132 size_t sz, loff_t *ppos) 132 size_t sz, loff_t *ppos)
133{ 133{
134 struct msm_perf_state *perf = file->private_data; 134 struct msm_perf_state *perf = file->private_data;
135 int n = 0, ret; 135 int n = 0, ret = 0;
136 136
137 mutex_lock(&perf->read_lock); 137 mutex_lock(&perf->read_lock);
138 138
@@ -143,9 +143,10 @@ static ssize_t perf_read(struct file *file, char __user *buf,
143 } 143 }
144 144
145 n = min((int)sz, perf->buftot - perf->bufpos); 145 n = min((int)sz, perf->buftot - perf->bufpos);
146 ret = copy_to_user(buf, &perf->buf[perf->bufpos], n); 146 if (copy_to_user(buf, &perf->buf[perf->bufpos], n)) {
147 if (ret) 147 ret = -EFAULT;
148 goto out; 148 goto out;
149 }
149 150
150 perf->bufpos += n; 151 perf->bufpos += n;
151 *ppos += n; 152 *ppos += n;
diff --git a/drivers/gpu/drm/msm/msm_rd.c b/drivers/gpu/drm/msm/msm_rd.c
index 24254e07bcd5..3a5fdfcd67ae 100644
--- a/drivers/gpu/drm/msm/msm_rd.c
+++ b/drivers/gpu/drm/msm/msm_rd.c
@@ -149,9 +149,10 @@ static ssize_t rd_read(struct file *file, char __user *buf,
149 goto out; 149 goto out;
150 150
151 n = min_t(int, sz, circ_count_to_end(&rd->fifo)); 151 n = min_t(int, sz, circ_count_to_end(&rd->fifo));
152 ret = copy_to_user(buf, fptr, n); 152 if (copy_to_user(buf, fptr, n)) {
153 if (ret) 153 ret = -EFAULT;
154 goto out; 154 goto out;
155 }
155 156
156 fifo->tail = (fifo->tail + n) & (BUF_SZ - 1); 157 fifo->tail = (fifo->tail + n) & (BUF_SZ - 1);
157 *ppos += n; 158 *ppos += n;