Re: [PATCH 4/8] drm: Allow drm_mode_object_find() to look up an object of any type

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, May 29, 2014 at 7:18 AM, Daniel Vetter <daniel@xxxxxxxx> wrote:
> On Wed, May 28, 2014 at 07:57:21PM -0400, Rob Clark wrote:
>> From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
>>
>> To avoid having to pass object types from userspace for atomic mode
>> setting ioctl, allow drm_mode_object_find() to look up an object of any
>> type. This will only work as long as the all object types share the ID
>> space.
>>
>> Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx>
>> Signed-off-by: Rob Clark <robdclark@xxxxxxxxx>
>
> Still NACK. Iirc you only want a boolean "does this exist" so please add a
> new function for this. Returning a full pointer for framebuffer is simply
> unsafe, allowing that a call for trouble. Yes, I know your current code is
> safe but I don't want to freak out and do an ad-hoc audit every time I
> stumble over this again.

this one isn't removing the (type != FB_ID) check.. if you looked more
carefully at the other patches you'd realized I'd already changed this
;-)

I suppose for completeness we should add an obj->type != FB_ID check
too, although it should *not* be a WARN_ON().  The one place it is
used is for atomic ioctl:

+ obj = drm_mode_object_find(dev, obj_id, DRM_MODE_OBJECT_ANY);
+ if (!obj || !obj->properties) {
+ ret = -ENOENT;
+ goto out;
+ }

we don't want userspace to be able to request a WARN_ON().

BR,
-R


> -Daniel
>
>> ---
>>  drivers/gpu/drm/drm_crtc.c | 3 ++-
>>  include/drm/drm_crtc.h     | 1 +
>>  2 files changed, 3 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
>> index c53ddc3..b975575 100644
>> --- a/drivers/gpu/drm/drm_crtc.c
>> +++ b/drivers/gpu/drm/drm_crtc.c
>> @@ -409,7 +409,8 @@ struct drm_mode_object *drm_mode_object_find(struct drm_device *dev,
>>
>>       mutex_lock(&dev->mode_config.idr_mutex);
>>       obj = idr_find(&dev->mode_config.crtc_idr, id);
>> -     if (!obj || (obj->type != type) || (obj->id != id))
>> +     if (!obj || (type != DRM_MODE_OBJECT_ANY && obj->type != type) ||
>> +         (obj->id != id))
>>               obj = NULL;
>>       mutex_unlock(&dev->mode_config.idr_mutex);
>>
>> diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
>> index dbd7954..44d7964 100644
>> --- a/include/drm/drm_crtc.h
>> +++ b/include/drm/drm_crtc.h
>> @@ -50,6 +50,7 @@ struct drm_clip_rect;
>>  #define DRM_MODE_OBJECT_BLOB 0xbbbbbbbb
>>  #define DRM_MODE_OBJECT_PLANE 0xeeeeeeee
>>  #define DRM_MODE_OBJECT_BRIDGE 0xbdbdbdbd
>> +#define DRM_MODE_OBJECT_ANY 0
>>
>>  struct drm_mode_object {
>>       uint32_t id;
>> --
>> 1.9.3
>>
>
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> +41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
http://lists.freedesktop.org/mailman/listinfo/dri-devel





[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux