[Xf86-video-armsoc] [PATCH 1/1] Fix malloc/calloc/free usage
armsoc-bugs at arm.com
armsoc-bugs at arm.com
Mon Feb 3 04:17:21 PST 2014
From: Daniel Kurtz <djkurtz at chromium.org>
. Use calloc when allocating objects.
. Use malloc when allocating a buffer that we are about to completely fill.
. In both cases, NULL check the result, unless using X built-in "kill server
on alloc fail" versions (e.g., xnfcalloc())
. The canonical way to call calloc is:
ptr = calloc(nelem, sizeof *ptr); /* or sizeof(*ptr) */
if (ptr) {
/* Handle OOM */
}
. Don't NULL check before calling free().
BUG=none
TEST=compiles clean; sanity check ui on device
(cherry picked from commit 79795728e366a56013aa4affa2d42128441a5eb9)
From: https://chromium.googlesource.com/chromiumos/third_party/xf86-video-armsoc
Change-Id: I18b6a6c7c173c0120ec6da948b1e55cbe96e1e1d
---
src/armsoc_dri2.c | 6 ++++--
src/armsoc_driver.c | 4 ++--
src/armsoc_dumb.c | 2 +-
src/armsoc_exa.c | 3 +--
src/armsoc_exa_null.c | 21 ++++++++++-----------
src/drmmode_display.c | 15 +++++++--------
6 files changed, 25 insertions(+), 26 deletions(-)
diff --git a/src/armsoc_dri2.c b/src/armsoc_dri2.c
index a9700d7..f79ac51 100644
--- a/src/armsoc_dri2.c
+++ b/src/armsoc_dri2.c
@@ -164,7 +164,7 @@ ARMSOCDRI2CreateBuffer(DrawablePtr pDraw, unsigned int attachment,
{
ScreenPtr pScreen = pDraw->pScreen;
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
- struct ARMSOCDRI2BufferRec *buf = calloc(1, sizeof(*buf));
+ struct ARMSOCDRI2BufferRec *buf;
struct ARMSOCRec *pARMSOC = ARMSOCPTR(pScrn);
PixmapPtr pPixmap = NULL;
struct armsoc_bo *bo;
@@ -173,6 +173,7 @@ ARMSOCDRI2CreateBuffer(DrawablePtr pDraw, unsigned int attachment,
DEBUG_MSG("pDraw=%p, attachment=%d, format=%08x",
pDraw, attachment, format);
+ buf = calloc(1, sizeof *buf);
if (!buf) {
ERROR_MSG("Couldn't allocate internal buffer structure");
return NULL;
@@ -602,11 +603,12 @@ ARMSOCDRI2ScheduleSwap(ClientPtr client, DrawablePtr pDraw,
struct ARMSOCRec *pARMSOC = ARMSOCPTR(pScrn);
struct ARMSOCDRI2BufferRec *src = ARMSOCBUF(pSrcBuffer);
struct ARMSOCDRI2BufferRec *dst = ARMSOCBUF(pDstBuffer);
- struct ARMSOCDRISwapCmd *cmd = calloc(1, sizeof(*cmd));
+ struct ARMSOCDRISwapCmd *cmd;
struct armsoc_bo *src_bo, *dst_bo;
int src_fb_id, dst_fb_id;
int new_canflip, ret, do_flip;
+ cmd = calloc(1, sizeof(*cmd));
if (!cmd)
return FALSE;
diff --git a/src/armsoc_driver.c b/src/armsoc_driver.c
index 329e11d..590352e 100644
--- a/src/armsoc_driver.c
+++ b/src/armsoc_driver.c
@@ -663,7 +663,7 @@ ARMSOCProbe(DriverPtr drv, int flags)
* driverPrivate field.
*/
pScrn->driverPrivate =
- calloc(1, sizeof(struct ARMSOCRec));
+ calloc(1, sizeof *pARMSOC);
if (!pScrn->driverPrivate)
return FALSE;
@@ -823,7 +823,7 @@ ARMSOCPreInit(ScrnInfoPtr pScrn, int flags)
* Process the "xorg.conf" file options:
*/
xf86CollectOptions(pScrn, NULL);
- pARMSOC->pOptionInfo = calloc(1, sizeof(ARMSOCOptions));
+ pARMSOC->pOptionInfo = malloc(sizeof(ARMSOCOptions));
if (!pARMSOC->pOptionInfo)
goto fail2;
diff --git a/src/armsoc_dumb.c b/src/armsoc_dumb.c
index c232251..f27728c 100644
--- a/src/armsoc_dumb.c
+++ b/src/armsoc_dumb.c
@@ -68,7 +68,7 @@ struct armsoc_device *armsoc_device_new(int fd,
int (*create_custom_gem)(int fd,
struct armsoc_create_gem *create_gem))
{
- struct armsoc_device *new_dev = malloc(sizeof(*new_dev));
+ struct armsoc_device *new_dev = calloc(1, sizeof *new_dev);
if (!new_dev)
return NULL;
diff --git a/src/armsoc_exa.c b/src/armsoc_exa.c
index 57e2a6d..79c8970 100644
--- a/src/armsoc_exa.c
+++ b/src/armsoc_exa.c
@@ -78,8 +78,7 @@ ARMSOCCreatePixmap2(ScreenPtr pScreen, int width, int height,
int depth, int usage_hint, int bitsPerPixel,
int *new_fb_pitch)
{
- struct ARMSOCPixmapPrivRec *priv =
- calloc(sizeof(struct ARMSOCPixmapPrivRec), 1);
+ struct ARMSOCPixmapPrivRec *priv = calloc(1, sizeof *priv);
ScrnInfoPtr pScrn = xf86ScreenToScrn(pScreen);
struct ARMSOCRec *pARMSOC = ARMSOCPTR(pScrn);
enum armsoc_buf_type buf_type = ARMSOC_BO_NON_SCANOUT;
diff --git a/src/armsoc_exa_null.c b/src/armsoc_exa_null.c
index 782694a..17f5dd0 100644
--- a/src/armsoc_exa_null.c
+++ b/src/armsoc_exa_null.c
@@ -107,20 +107,21 @@ FreeScreen(FREE_SCREEN_ARGS_DECL)
struct ARMSOCEXARec *
InitNullEXA(ScreenPtr pScreen, ScrnInfoPtr pScrn, int fd)
{
- struct ARMSOCNullEXARec *null_exa = calloc(sizeof(*null_exa), 1);
+ struct ARMSOCNullEXARec *null_exa;
struct ARMSOCEXARec *armsoc_exa;
ExaDriverPtr exa;
INFO_MSG("Soft EXA mode");
+ null_exa = calloc(1, sizeof(*null_exa));
if (!null_exa)
- return NULL;
+ goto out;
armsoc_exa = (struct ARMSOCEXARec *)null_exa;
exa = exaDriverAlloc();
if (!exa)
- goto fail;
+ goto free_null_exa;
null_exa->exa = exa;
@@ -152,7 +153,7 @@ InitNullEXA(ScreenPtr pScreen, ScrnInfoPtr pScrn, int fd)
if (!exaDriverInit(pScreen, exa)) {
ERROR_MSG("exaDriverInit failed");
- goto fail;
+ goto free_exa;
}
armsoc_exa->CloseScreen = CloseScreen;
@@ -160,13 +161,11 @@ InitNullEXA(ScreenPtr pScreen, ScrnInfoPtr pScrn, int fd)
return armsoc_exa;
-fail:
- if (exa)
- free(exa);
-
- if (null_exa)
- free(null_exa);
-
+free_exa:
+ free(exa);
+free_null_exa:
+ free(null_exa);
+out:
return NULL;
}
diff --git a/src/drmmode_display.c b/src/drmmode_display.c
index a5f844d..f7b0dc6 100644
--- a/src/drmmode_display.c
+++ b/src/drmmode_display.c
@@ -267,7 +267,7 @@ drmmode_set_mode_major(xf86CrtcPtr crtc, DisplayModePtr mode,
crtc->y = y;
crtc->rotation = rotation;
- output_ids = calloc(sizeof(uint32_t), xf86_config->num_output);
+ output_ids = calloc(xf86_config->num_output, sizeof *output_ids);
if (!output_ids) {
ERROR_MSG(
"memory allocation failed in drmmode_set_mode_major()");
@@ -839,7 +839,7 @@ drmmode_crtc_init(ScrnInfoPtr pScrn, struct drmmode_rec *drmmode, int num)
if (crtc == NULL)
return;
- drmmode_crtc = xnfcalloc(sizeof(struct drmmode_crtc_private_rec), 1);
+ drmmode_crtc = xnfcalloc(1, sizeof *drmmode_crtc);
drmmode_crtc->crtc_id = drmmode->mode_res->crtcs[num];
drmmode_crtc->drmmode = drmmode;
drmmode_crtc->last_good_mode = NULL;
@@ -1021,9 +1021,8 @@ drmmode_output_create_resources(xf86OutputPtr output)
uint32_t value;
int i, j, err;
- drmmode_output->props =
- calloc(connector->count_props,
- sizeof(struct drmmode_prop_rec));
+ drmmode_output->props = calloc(connector->count_props,
+ sizeof *connector->props);
if (!drmmode_output->props)
return;
@@ -1051,7 +1050,7 @@ drmmode_output_create_resources(xf86OutputPtr output)
INT32 range[2];
p->num_atoms = 1;
- p->atoms = calloc(p->num_atoms, sizeof(Atom));
+ p->atoms = calloc(p->num_atoms, sizeof *p->atoms);
if (!p->atoms)
continue;
p->atoms[0] = MakeAtom(drmmode_prop->name,
@@ -1083,7 +1082,7 @@ drmmode_output_create_resources(xf86OutputPtr output)
} else if (drmmode_prop->flags & DRM_MODE_PROP_ENUM) {
p->num_atoms = drmmode_prop->count_enums + 1;
- p->atoms = calloc(p->num_atoms, sizeof(Atom));
+ p->atoms = calloc(p->num_atoms, sizeof *p->atoms);
if (!p->atoms)
continue;
p->atoms[0] = MakeAtom(drmmode_prop->name,
@@ -1312,7 +1311,7 @@ drmmode_output_init(ScrnInfoPtr pScrn, struct drmmode_rec *drmmode, int num)
if (!output)
goto free_encoders_exit;
- drmmode_output = calloc(sizeof(struct drmmode_output_priv), 1);
+ drmmode_output = calloc(1, sizeof *drmmode_output);
if (!drmmode_output) {
xf86OutputDestroy(output);
goto free_encoders_exit;
--
1.7.9.5
More information about the Xf86-video-armsoc
mailing list