diff options
Diffstat (limited to 'drivers/gpu/drm/msm/msm_gem_submit.c')
| -rw-r--r-- | drivers/gpu/drm/msm/msm_gem_submit.c | 18 | 
1 files changed, 11 insertions, 7 deletions
diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c b/drivers/gpu/drm/msm/msm_gem_submit.c index 166e84e4f0d4..489676568a10 100644 --- a/drivers/gpu/drm/msm/msm_gem_submit.c +++ b/drivers/gpu/drm/msm/msm_gem_submit.c @@ -106,7 +106,8 @@ static int submit_lookup_objects(struct msm_gem_submit *submit,  			pagefault_disable();  		} -		if (submit_bo.flags & ~MSM_SUBMIT_BO_FLAGS) { +		if ((submit_bo.flags & ~MSM_SUBMIT_BO_FLAGS) || +			!(submit_bo.flags & MSM_SUBMIT_BO_FLAGS)) {  			DRM_ERROR("invalid flags: %x\n", submit_bo.flags);  			ret = -EINVAL;  			goto out_unlock; @@ -290,7 +291,7 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob  {  	uint32_t i, last_offset = 0;  	uint32_t *ptr; -	int ret; +	int ret = 0;  	if (offset % 4) {  		DRM_ERROR("non-aligned cmdstream buffer: %u\n", offset); @@ -318,12 +319,13 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob  		ret = copy_from_user(&submit_reloc, userptr, sizeof(submit_reloc));  		if (ret) -			return -EFAULT; +			goto out;  		if (submit_reloc.submit_offset % 4) {  			DRM_ERROR("non-aligned reloc offset: %u\n",  					submit_reloc.submit_offset); -			return -EINVAL; +			ret = -EINVAL; +			goto out;  		}  		/* offset in dwords: */ @@ -332,12 +334,13 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob  		if ((off >= (obj->base.size / 4)) ||  				(off < last_offset)) {  			DRM_ERROR("invalid offset %u at reloc %u\n", off, i); -			return -EINVAL; +			ret = -EINVAL; +			goto out;  		}  		ret = submit_bo(submit, submit_reloc.reloc_idx, NULL, &iova, &valid);  		if (ret) -			return ret; +			goto out;  		if (valid)  			continue; @@ -354,9 +357,10 @@ static int submit_reloc(struct msm_gem_submit *submit, struct msm_gem_object *ob  		last_offset = off;  	} +out:  	msm_gem_put_vaddr_locked(&obj->base); -	return 0; +	return ret;  }  static void submit_cleanup(struct msm_gem_submit *submit)  | 
