[PATCH] drm/msm: fix an error code in the ioctl

2019-02-13 Thread Dan Carpenter via dri-devel
The copy_to/from_user() functions return the number of bytes remaining
to be copied but we should return -EFAULT to the user.

Fixes: f05c83e77460 ("drm/msm: add uapi to get/set debug name")
Signed-off-by: Dan Carpenter 
---
If I were reviewing this patch, I would be suspicous that we don't
return immediately after the first copy_from_user() fails but I'm fairly
sure that is the correct behavior.

 drivers/gpu/drm/msm/msm_drv.c | 10 ++
 1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index b871e2e98129..1d4426cb260d 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -851,8 +851,9 @@ static int msm_ioctl_gem_info(struct drm_device *dev, void 
*data,
ret = -EINVAL;
break;
}
-   ret = copy_from_user(msm_obj->name,
-   u64_to_user_ptr(args->value), args->len);
+   if (copy_from_user(msm_obj->name, u64_to_user_ptr(args->value),
+  args->len))
+   ret = -EFAULT;
msm_obj->name[args->len] = '\0';
for (i = 0; i < args->len; i++) {
if (!isprint(msm_obj->name[i])) {
@@ -868,8 +869,9 @@ static int msm_ioctl_gem_info(struct drm_device *dev, void 
*data,
}
args->len = strlen(msm_obj->name);
if (args->value) {
-   ret = copy_to_user(u64_to_user_ptr(args->value),
-   msm_obj->name, args->len);
+   if (copy_to_user(u64_to_user_ptr(args->value),
+msm_obj->name, args->len))
+   ret = -EFAULT;
}
break;
}
-- 
2.17.1

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Re: [Intel-gfx] [PATCH 1/3] drm/i915: Move dsc rate params compute into drm

2019-02-14 Thread Dan Carpenter via dri-devel
Hi David,

url:
https://github.com/0day-ci/linux/commits/David-Francis/Make-DRM-DSC-helpers-more-generally-usable/20190214-052541

smatch warnings:
drivers/gpu/drm/drm_dsc.c:306 drm_dsc_compute_rc_parameters() warn: impossible 
condition '(vdsc_cfg->nfl_bpg_offset > 65535) => (0-u16max > u16max)'
drivers/gpu/drm/drm_dsc.c:340 drm_dsc_compute_rc_parameters() warn: impossible 
condition '(vdsc_cfg->scale_increment_interval > 65535) => (0-u16max > u16max)'

# 
https://github.com/0day-ci/linux/commit/932e204c9cbe2995451a800351bcd781fa7cb1c5
git remote add linux-review https://github.com/0day-ci/linux
git remote update linux-review
git checkout 932e204c9cbe2995451a800351bcd781fa7cb1c5
vim +306 drivers/gpu/drm/drm_dsc.c

932e204c David Francis 2019-02-13  230  
932e204c David Francis 2019-02-13  231  /**
932e204c David Francis 2019-02-13  232   * drm_dsc_compute_rc_parameters() - 
Write rate control
932e204c David Francis 2019-02-13  233   * parameters to the dsc configuration. 
Some configuration
932e204c David Francis 2019-02-13  234   * fields must be present beforehand.
932e204c David Francis 2019-02-13  235   *
932e204c David Francis 2019-02-13  236   * @dsc_cfg:
932e204c David Francis 2019-02-13  237   * DSC Configuration data partially 
filled by driver
932e204c David Francis 2019-02-13  238   */
932e204c David Francis 2019-02-13  239  int 
drm_dsc_compute_rc_parameters(struct drm_dsc_config *vdsc_cfg)
932e204c David Francis 2019-02-13  240  {
932e204c David Francis 2019-02-13  241  unsigned long groups_per_line = 
0;
932e204c David Francis 2019-02-13  242  unsigned long groups_total = 0;
932e204c David Francis 2019-02-13  243  unsigned long 
num_extra_mux_bits = 0;
932e204c David Francis 2019-02-13  244  unsigned long slice_bits = 0;
932e204c David Francis 2019-02-13  245  unsigned long hrd_delay = 0;
932e204c David Francis 2019-02-13  246  unsigned long final_scale = 0;
932e204c David Francis 2019-02-13  247  unsigned long rbs_min = 0;
932e204c David Francis 2019-02-13  248  
932e204c David Francis 2019-02-13  249  /* Number of groups used to 
code each line of a slice */
932e204c David Francis 2019-02-13  250  groups_per_line = 
DIV_ROUND_UP(vdsc_cfg->slice_width,
932e204c David Francis 2019-02-13  251 
DSC_RC_PIXELS_PER_GROUP);
932e204c David Francis 2019-02-13  252  
932e204c David Francis 2019-02-13  253  /* chunksize in Bytes */
932e204c David Francis 2019-02-13  254  vdsc_cfg->slice_chunk_size = 
DIV_ROUND_UP(vdsc_cfg->slice_width *
932e204c David Francis 2019-02-13  255  
  vdsc_cfg->bits_per_pixel,
932e204c David Francis 2019-02-13  256  
  (8 * 16));
932e204c David Francis 2019-02-13  257  
932e204c David Francis 2019-02-13  258  if (vdsc_cfg->convert_rgb)
932e204c David Francis 2019-02-13  259  num_extra_mux_bits = 3 
* (vdsc_cfg->mux_word_size +
932e204c David Francis 2019-02-13  260  
  (4 * vdsc_cfg->bits_per_component + 4)
932e204c David Francis 2019-02-13  261  
  - 2);
932e204c David Francis 2019-02-13  262  else
932e204c David Francis 2019-02-13  263  num_extra_mux_bits = 3 
* vdsc_cfg->mux_word_size +
932e204c David Francis 2019-02-13  264  (4 * 
vdsc_cfg->bits_per_component + 4) +
932e204c David Francis 2019-02-13  265  2 * (4 * 
vdsc_cfg->bits_per_component) - 2;
932e204c David Francis 2019-02-13  266  /* Number of bits in one Slice 
*/
932e204c David Francis 2019-02-13  267  slice_bits = 8 * 
vdsc_cfg->slice_chunk_size * vdsc_cfg->slice_height;
932e204c David Francis 2019-02-13  268  
932e204c David Francis 2019-02-13  269  while ((num_extra_mux_bits > 0) 
&&
932e204c David Francis 2019-02-13  270 ((slice_bits - 
num_extra_mux_bits) % vdsc_cfg->mux_word_size))
932e204c David Francis 2019-02-13  271  num_extra_mux_bits--;
932e204c David Francis 2019-02-13  272  
932e204c David Francis 2019-02-13  273  if (groups_per_line < 
vdsc_cfg->initial_scale_value - 8)
932e204c David Francis 2019-02-13  274  
vdsc_cfg->initial_scale_value = groups_per_line + 8;
932e204c David Francis 2019-02-13  275  
932e204c David Francis 2019-02-13  276  /* scale_decrement_interval 
calculation according to DSC spec 1.11 */
932e204c David Francis 2019-02-13  277  if 
(vdsc_cfg->initial_scale_value > 8)
932e204c David Francis 2019-02-13  278  
vdsc_cfg->scale_decrement_interval = groups_per_line /
932e204c David Francis 2019-02-13  279  
(vdsc_cfg->initial_scale_value - 8);
932e204c David Francis 2019-02-13  280  else
932e204c David Francis 2019-02-13  281