tdm_client: check the dereference varaibales 79/256979/2
authorSooChan Lim <sc1.lim@samsung.com>
Fri, 16 Apr 2021 02:03:11 +0000 (11:03 +0900)
committerSooChan Lim <sc1.lim@samsung.com>
Fri, 16 Apr 2021 02:40:49 +0000 (02:40 +0000)
check the private_output and the private_client at
tdm_client_vblank_destory function. It prevent the segmentation fault
due to them.

Change-Id: Ifcb01380be362cd3d7151906bccc1d4a59ea48e1

client/tdm_client.c

index 0e50916..f322a49 100644 (file)
@@ -1306,13 +1306,27 @@ void
 tdm_client_vblank_destroy(tdm_client_vblank *vblank)
 {
        tdm_private_client_vblank *private_vblank;
+       tdm_private_client_output *private_output;
        tdm_private_client *private_client;
        tdm_client_wait_info *w = NULL, *ww = NULL;
 
        TDM_RETURN_IF_FAIL(vblank != NULL);
 
        private_vblank = vblank;
-       private_client = private_vblank->private_output->private_client;
+
+       private_output = private_vblank->private_output;
+       if (!private_output) {
+               TDM_WRN("private_output is already destroyed.");
+               free(private_vblank);
+               return;
+       }
+
+       private_client = private_output->private_client;
+       if (!private_client) {
+               TDM_WRN("private_client is already destroyed.");
+               free(private_vblank);
+               return;
+       }
 
        pthread_mutex_lock(&private_client->lock);