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->displays = xnfallocarray(count, sizeof(DispPtr));
|
||||||
screenp->numdisplays = count;
|
screenp->numdisplays = count;
|
||||||
|
|
||||||
/* Fill in the default Virtual size, if any */
|
for (count = 0, dispptr = conf_screen->scrn_display_lst;
|
||||||
if (conf_screen->scrn_virtualX && conf_screen->scrn_virtualY) {
|
dispptr;
|
||||||
for (count = 0, dispptr = conf_screen->scrn_display_lst;
|
dispptr = (XF86ConfDisplayPtr) dispptr->list.next, count++) {
|
||||||
dispptr;
|
|
||||||
dispptr = (XF86ConfDisplayPtr) dispptr->list.next, count++) {
|
/* Allocate individual Display records */
|
||||||
screenp->displays[count] = xnfcalloc(1, sizeof(DispRec));
|
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]->virtualX = conf_screen->scrn_virtualX;
|
||||||
screenp->displays[count]->virtualY = conf_screen->scrn_virtualY;
|
screenp->displays[count]->virtualY = conf_screen->scrn_virtualY;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/* Now do the per-Display Virtual sizes */
|
/* Now do the per-Display Virtual sizes */
|
||||||
count = 0;
|
|
||||||
dispptr = conf_screen->scrn_display_lst;
|
|
||||||
while (dispptr) {
|
|
||||||
configDisplay(screenp->displays[count], dispptr);
|
configDisplay(screenp->displays[count], dispptr);
|
||||||
count++;
|
|
||||||
dispptr = (XF86ConfDisplayPtr) dispptr->list.next;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in New Issue