xfree86: Fix NULL pointer dereference crash
screenp->displays[count] (passed to configDisplay() in
configScreen()) is NULL if there is no Virtual setting
in the configuration.
Fixes: f8a6be04d0 ("xfree86: Change
displays array to pointers array to fix invalid pointer issues
after table reallocation")
Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
			
			
This commit is contained in:
		
							parent
							
								
									aad61e8e03
								
							
						
					
					
						commit
						ef89b6648e
					
				| 
						 | 
				
			
			@ -1797,24 +1797,21 @@ configScreen(confScreenPtr screenp, XF86ConfScreenPtr conf_screen, int scrnum,
 | 
			
		|||
    screenp->displays = xnfallocarray(count, sizeof(DispPtr));
 | 
			
		||||
    screenp->numdisplays = count;
 | 
			
		||||
 | 
			
		||||
    /* Fill in the default Virtual size, if any */
 | 
			
		||||
    if (conf_screen->scrn_virtualX && conf_screen->scrn_virtualY) {
 | 
			
		||||
        for (count = 0, dispptr = conf_screen->scrn_display_lst;
 | 
			
		||||
             dispptr;
 | 
			
		||||
             dispptr = (XF86ConfDisplayPtr) dispptr->list.next, count++) {
 | 
			
		||||
            screenp->displays[count] = xnfcalloc(1, sizeof(DispRec));
 | 
			
		||||
    for (count = 0, dispptr = conf_screen->scrn_display_lst;
 | 
			
		||||
         dispptr;
 | 
			
		||||
         dispptr = (XF86ConfDisplayPtr) dispptr->list.next, count++) {
 | 
			
		||||
 | 
			
		||||
        /* Allocate individual Display records */
 | 
			
		||||
        screenp->displays[count] = xnfcalloc(1, sizeof(DispRec));
 | 
			
		||||
 | 
			
		||||
        /* Fill in the default Virtual size, if any */
 | 
			
		||||
        if (conf_screen->scrn_virtualX && conf_screen->scrn_virtualY) {
 | 
			
		||||
            screenp->displays[count]->virtualX = conf_screen->scrn_virtualX;
 | 
			
		||||
            screenp->displays[count]->virtualY = conf_screen->scrn_virtualY;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* Now do the per-Display Virtual sizes */
 | 
			
		||||
    count = 0;
 | 
			
		||||
    dispptr = conf_screen->scrn_display_lst;
 | 
			
		||||
    while (dispptr) {
 | 
			
		||||
        /* Now do the per-Display Virtual sizes */
 | 
			
		||||
        configDisplay(screenp->displays[count], dispptr);
 | 
			
		||||
        count++;
 | 
			
		||||
        dispptr = (XF86ConfDisplayPtr) dispptr->list.next;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue