Ignore:
Timestamp:
Apr 21, 2017, 4:28:29 AM (2 months ago)
Author:
brainslayer
Message:

update

File:
1 edited

Legend:

Unmodified
Added
Removed
  • src/linux/universal/linux-3.18/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c

    r25370 r31885  
    709709
    710710        num_sizes = 0;
    711         for (i = 0; i < DRM_VMW_MAX_SURFACE_FACES; ++i)
     711        for (i = 0; i < DRM_VMW_MAX_SURFACE_FACES; ++i) {
     712                if (req->mip_levels[i] > DRM_VMW_MAX_MIP_LEVELS)
     713                        return -EINVAL;
    712714                num_sizes += req->mip_levels[i];
    713 
    714         if (num_sizes > DRM_VMW_MAX_SURFACE_FACES *
    715             DRM_VMW_MAX_MIP_LEVELS)
     715        }
     716
     717        if (num_sizes > DRM_VMW_MAX_SURFACE_FACES * DRM_VMW_MAX_MIP_LEVELS ||
     718            num_sizes == 0)
    716719                return -EINVAL;
    717720
     
    896899        struct ttm_base_object *base;
    897900        int ret;
     901        bool require_exist = false;
    898902
    899903        if (handle_type == DRM_VMW_HANDLE_PRIME) {
     
    902906                        return ret;
    903907        } else {
    904                 if (unlikely(drm_is_render_client(file_priv))) {
    905                         DRM_ERROR("Render client refused legacy "
    906                                   "surface reference.\n");
    907                         return -EACCES;
    908                 }
     908                if (unlikely(drm_is_render_client(file_priv)))
     909                        require_exist = true;
     910
    909911                handle = u_handle;
    910912        }
     
    928930                /*
    929931                 * Make sure the surface creator has the same
    930                  * authenticating master.
     932                 * authenticating master, or is already registered with us.
    931933                 */
    932934                if (drm_is_primary_client(file_priv) &&
    933                     user_srf->master != file_priv->master) {
    934                         DRM_ERROR("Trying to reference surface outside of"
    935                                   " master domain.\n");
    936                         ret = -EACCES;
    937                         goto out_bad_resource;
    938                 }
    939 
    940                 ret = ttm_ref_object_add(tfile, base, TTM_REF_USAGE, NULL);
     935                    user_srf->master != file_priv->master)
     936                        require_exist = true;
     937
     938                ret = ttm_ref_object_add(tfile, base, TTM_REF_USAGE, NULL,
     939                                         require_exist);
    941940                if (unlikely(ret != 0)) {
    942941                        DRM_ERROR("Could not add a reference to a surface.\n");
Note: See TracChangeset for help on using the changeset viewer.