diff options
| author | Niels de Vos <ndevos@redhat.com> | 2017-04-10 10:10:30 +0200 | 
|---|---|---|
| committer | Jeff Darcy <jeff@pl.atyp.us> | 2017-04-10 11:19:24 -0400 | 
| commit | 88551d8567503b3eba17e54fbe7dd9ee6266c1ab (patch) | |
| tree | c01193c0fe77431cd66a89a831b7dbfd60ef9f97 | |
| parent | 3594f960a8b5ccf81b6d06c89003f175ddd6a2c8 (diff) | |
upcall: correct the cleanup path in init() when GF_CALLOC() fails
Coverity found that "priv" can be NULL when the 1st GF_CALLOC() fails,
and still is being used with "priv->xattrs" before the functon returns.
While cleaning this up, also removing the log message for out of memory,
as this is already logged through GF_CALLOC().
BUG: 789278
Change-Id: I887eaa9136dc25a39c107cd2152b1ba11f9fa925
Signed-off-by: Niels de Vos <ndevos@redhat.com>
Reviewed-on: https://review.gluster.org/17023
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: soumya k <skoduri@redhat.com>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Amar Tumballi <amarts@redhat.com>
| -rw-r--r-- | xlators/features/upcall/src/upcall.c | 19 | 
1 files changed, 10 insertions, 9 deletions
diff --git a/xlators/features/upcall/src/upcall.c b/xlators/features/upcall/src/upcall.c index 40ad1c4e379..0e9919d41c4 100644 --- a/xlators/features/upcall/src/upcall.c +++ b/xlators/features/upcall/src/upcall.c @@ -2355,12 +2355,12 @@ init (xlator_t *this)          priv = GF_CALLOC (1, sizeof (*priv),                            gf_upcall_mt_private_t); -        if (!priv) { -                gf_msg ("upcall", GF_LOG_WARNING, 0, -                        UPCALL_MSG_NO_MEMORY, -                        "Memory allocation failed"); +        if (!priv) +                goto out; + +        priv->xattrs = dict_new (); +        if (!priv->xattrs)                  goto out; -        }          GF_OPTION_INIT ("cache-invalidation", priv->cache_invalidation_enabled,                          bool, out); @@ -2369,12 +2369,11 @@ init (xlator_t *this)          LOCK_INIT (&priv->inode_ctx_lk);          INIT_LIST_HEAD (&priv->inode_ctx_list); -        priv->xattrs = dict_new (); -        this->private = priv;          priv->fini = 0;          priv->reaper_init_done = _gf_false; +        this->private = priv;          this->local_pool = mem_pool_new (upcall_local_t, 512);          ret = 0; @@ -2391,8 +2390,10 @@ init (xlator_t *this)                  priv->reaper_init_done = _gf_true;          }  out: -        if (ret) { -                dict_unref (priv->xattrs); +        if (ret && priv) { +                if (priv->xattrs) +                        dict_unref (priv->xattrs); +                  GF_FREE (priv);          }  | 
