Mercurial > illumos > illumos-gate
changeset 13705:70355eedf57a
1991 svccfg describe -t Segmentation Fault
2742 minor memory allocation issue in svccfg:upgrade_manifestfiles()
Reviewed by: Albert Lee <trisk@nexenta.com>
Reviewed by: T Nguyen <truongqnguien@gmail.com>
Approved by: Rich Lowe <richlowe@richlowe.net>
Approved by: Garrett D'Amore <garrett@damore.org>
author | Milan Jurik <milan.jurik@xylab.cz> |
---|---|
date | Sun, 27 May 2012 16:49:00 +0200 |
parents | b0c0d877d231 |
children | b83bad61dfe1 |
files | usr/src/cmd/svc/svccfg/svccfg_libscf.c usr/src/lib/libscf/common/scf_tmpl.c |
diffstat | 2 files changed, 20 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/usr/src/cmd/svc/svccfg/svccfg_libscf.c Tue May 29 10:57:43 2012 -0400 +++ b/usr/src/cmd/svc/svccfg/svccfg_libscf.c Sun May 27 16:49:00 2012 +0200 @@ -21,6 +21,7 @@ /* * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012 Milan Jurik. All rights reserved. */ @@ -3900,8 +3901,8 @@ pgroup_t *mfst_pgroup; property_t *mfst_prop; property_t *old_prop; - char *pname = malloc(MAXPATHLEN); - char *fval = NULL; + char *pname; + char *fval; char *old_pname; char *old_fval; int no_upgrade_pg; @@ -3971,6 +3972,13 @@ SCF_SUCCESS) return (-1); + if ((pname = malloc(MAXPATHLEN)) == NULL) + return (ENOMEM); + if ((fval = malloc(MAXPATHLEN)) == NULL) { + free(pname); + return (ENOMEM); + } + while ((r = scf_iter_next_property(ud_prop_iter, ud_prop)) == 1) { mfst_seen = 0; if (scf_property_get_name(ud_prop, pname, MAXPATHLEN) < 0) @@ -3990,16 +3998,12 @@ * property list to get proccessed into the repo. */ if (mfst_seen == 0) { - if (fval == NULL) - fval = malloc(MAXPATHLEN); - /* * If we cannot get the value then there is no * reason to attempt to attach the value to * the property group */ - if (fval != NULL && - prop_get_val(ud_prop, fname_value) == 0 && + if (prop_get_val(ud_prop, fname_value) == 0 && scf_value_get_astring(fname_value, fval, MAXPATHLEN) != -1) { old_pname = safe_strdup(pname); @@ -4016,6 +4020,7 @@ } } } + free(pname); free(fval); cbdata.sc_handle = g_hndl;
--- a/usr/src/lib/libscf/common/scf_tmpl.c Tue May 29 10:57:43 2012 -0400 +++ b/usr/src/lib/libscf/common/scf_tmpl.c Sun May 27 16:49:00 2012 +0200 @@ -20,6 +20,7 @@ */ /* * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. + * Copyright 2012 Milan Jurik. All rights reserved. */ /* @@ -913,8 +914,10 @@ scf_handle_t *h; h = scf_instance_handle(inst); - if (h == NULL) + if (h == NULL) { + *snap = NULL; return (-1); + } if ((*snap = scf_snapshot_create(h)) == NULL) { return (-1); @@ -2150,7 +2153,8 @@ scf_instance_destroy(t->pt_inst); t->pt_inst = _get_restarter_inst(h, t->pt_orig_svc, t->pt_orig_inst, t->pt_snap); - scf_service_destroy(t->pt_svc); + if (t->pt_svc != t->pt_orig_svc) + scf_service_destroy(t->pt_svc); t->pt_svc = NULL; break; @@ -2159,7 +2163,8 @@ if (t->pt_inst != t->pt_orig_inst) scf_instance_destroy(t->pt_inst); t->pt_inst = _get_global_inst(h); - scf_service_destroy(t->pt_svc); + if (t->pt_svc != t->pt_orig_svc) + scf_service_destroy(t->pt_svc); t->pt_svc = NULL; break; @@ -2181,7 +2186,6 @@ goto fail; } - iter = _get_svc_or_inst_iter(h, t); fail: return (iter);