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> (cherry picked from commitef89b6648e
)
This commit is contained in:
parent
9a59631a49
commit
e49738f0c9
|
@ -1763,24 +1763,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
Block a user