[PATCH:xserver] Missing memory allocation checks.
Alan Coopersmith
alan.coopersmith at oracle.com
Thu Dec 3 22:58:43 PST 2015
On 11/30/15 12:54 PM, Miod Vallat wrote:
> This is a potpourri of missing memory allocation checks. Routines will return
> BadAlloc whenever possible, or fall back to a different behaviour, whenever
> possible. Unfortunately some functions are void and can not propagate failure
> to their callers.
>
> Signed-off-by: Miod Vallat <miod at online.fr>
> ---
> Xext/panoramiX.c | 15 ++++++++++++++-
> Xext/panoramiXprocs.c | 16 ++++++++++++++++
> Xext/xres.c | 2 ++
> Xi/getprop.c | 3 +++
> Xi/getselev.c | 2 ++
> dix/enterleave.c | 2 ++
> dix/window.c | 2 ++
> exa/exa_accel.c | 12 ++++++++++++
> glamor/glamor_core.c | 10 +++++++---
> hw/dmx/config/dmxconfig.c | 18 ++++++++++++++++++
> hw/dmx/dmxcursor.c | 6 ++++--
> hw/dmx/dmxextension.c | 3 +++
> hw/dmx/dmxfont.c | 8 ++++++++
> hw/dmx/dmxgc.c | 24 +++++++++++++-----------
> hw/dmx/dmxinit.c | 14 +++++++++-----
> hw/dmx/dmxpict.c | 8 ++++++++
> hw/dmx/dmxprop.c | 15 ++++++++++++---
> hw/dmx/dmxwindow.c | 48 +++++++++++++++++++++++++----------------------
> 18 files changed, 161 insertions(+), 47 deletions(-)
>
> diff --git a/Xext/panoramiX.c b/Xext/panoramiX.c
> index 209df29..7b94ba7 100644
> --- a/Xext/panoramiX.c
> +++ b/Xext/panoramiX.c
> @@ -807,7 +807,7 @@ extern void
> PanoramiXConsolidate(void)
> {
> int i;
> - PanoramiXRes *root, *defmap, *saver;
> + PanoramiXRes *root = NULL, *defmap = NULL, *saver = NULL;
> ScreenPtr pScreen = screenInfo.screens[0];
> DepthPtr pDepth = pScreen->allowedDepths;
> VisualPtr pVisual = pScreen->visuals;
> @@ -822,10 +822,16 @@ PanoramiXConsolidate(void)
> PanoramiXMaybeAddVisual(pVisual++);
>
> root = malloc(sizeof(PanoramiXRes));
> + if (!root)
> + goto outOfMemory;
> root->type = XRT_WINDOW;
> defmap = malloc(sizeof(PanoramiXRes));
> + if (!defmap)
> + goto outOfMemory;
> defmap->type = XRT_COLORMAP;
> saver = malloc(sizeof(PanoramiXRes));
> + if (!saver)
> + goto outOfMemory;
> saver->type = XRT_WINDOW;
>
> FOR_NSCREENS(i) {
> @@ -843,6 +849,13 @@ PanoramiXConsolidate(void)
> AddResource(root->info[0].id, XRT_WINDOW, root);
> AddResource(saver->info[0].id, XRT_WINDOW, saver);
> AddResource(defmap->info[0].id, XRT_COLORMAP, defmap);
> +
> + return;
> +
> + outOfMemory:
> + free(saver);
> + free(defmap);
> + free(root);
> }
>
> VisualID
I'd be tempted to just change those to XNFalloc() instead, since if we can't
allocate memory for a struct that small in the Xserver initialization process,
we're going to crash and burn soon anyway.
The rest look good to me, thanks.
--
-Alan Coopersmith- alan.coopersmith at oracle.com
Oracle Solaris Engineering - http://blogs.oracle.com/alanc
More information about the xorg-devel
mailing list