Xext/sync: Avoid dereference of invalid pointer if malloc() failed

Reported incorrectly in #1817 as:

xwayland-24.1.6/redhat-linux-build/../Xext/sync.c:2835:33: acquire_memory: allocated here
xwayland-24.1.6/redhat-linux-build/../Xext/sync.c:2843:12: danger: ‘priv’ leaks here; was allocated at [(30)](sarif:/runs/0/results/5/codeFlows/0/threadFlows/0/locations/29)

but the "leak" is really saving the pointer in an uninitalized pointer in
a structure that was already freed when the malloc of the SysCounterInfo
struct failed in SyncCreateSystemCounter(), because it returned the address
of the freed struct instead of NULL to indicate failure.

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2072>
This commit is contained in:
Alan Coopersmith 2025-10-04 16:04:50 -07:00 committed by Marge Bot
parent 304d21854d
commit 6034ce11b6

View file

@ -1005,7 +1005,7 @@ SyncCreateSystemCounter(const char *name,
psci = malloc(sizeof(SysCounterInfo)); psci = malloc(sizeof(SysCounterInfo));
if (!psci) { if (!psci) {
FreeResource(pCounter->sync.id, X11_RESTYPE_NONE); FreeResource(pCounter->sync.id, X11_RESTYPE_NONE);
return pCounter; return NULL;
} }
pCounter->pSysCounterInfo = psci; pCounter->pSysCounterInfo = psci;
psci->pCounter = pCounter; psci->pCounter = pCounter;