diff --git a/drivers/media/platform/msm/vidc/msm_vidc.c b/drivers/media/platform/msm/vidc/msm_vidc.c
index 6a4620a3e16fc361582879b71a482f55bef69419..ff1b2177f14740a69fe910d08c6d71b1683a669b 100644
--- a/drivers/media/platform/msm/vidc/msm_vidc.c
+++ b/drivers/media/platform/msm/vidc/msm_vidc.c
@@ -259,11 +259,11 @@ struct buffer_info *get_registered_buf(struct msm_vidc_inst *inst,
 	list_for_each_entry(temp, &inst->registeredbufs.list, list) {
 		for (i = 0; (i < temp->num_planes)
 			&& (i < VIDEO_MAX_PLANES); i++) {
-			bool ion_hndl_matches =
+			bool ion_hndl_matches = temp->handle[i] ?
 				msm_smem_compare_buffers(inst->mem_client, fd,
-				temp->handle[i]->smem_priv);
+				temp->handle[i]->smem_priv) : false;
 			if (temp &&
-				((fd == temp->fd[i]) ||
+				(ion_hndl_matches ||
 				(device_addr == temp->device_addr[i])) &&
 				(CONTAINS(temp->buff_off[i],
 				temp->size[i], buff_off)
@@ -271,7 +271,7 @@ struct buffer_info *get_registered_buf(struct msm_vidc_inst *inst,
 				size, temp->buff_off[i])
 				|| OVERLAPS(buff_off, size,
 				temp->buff_off[i],
-				temp->size[i])) && ion_hndl_matches) {
+				temp->size[i]))) {
 					dprintk(VIDC_DBG,
 						"This memory region is already mapped\n");
 					ret = temp;
@@ -1000,8 +1000,8 @@ int msm_vidc_dqbuf(void *instance, struct v4l2_buffer *b)
 		if (!inst->map_output_buffer)
 			continue;
 		if (EXTRADATA_IDX(b->length) &&
-			(i == EXTRADATA_IDX(b->length)) &&
-			!b->m.planes[i].m.userptr) {
+			i == EXTRADATA_IDX(b->length))
+		{
 			continue;
 		}
 		buffer_info = device_to_uvaddr(&inst->registeredbufs,