From mboxrd@z Thu Jan 1 00:00:00 1970 From: Samuel Thibault Subject: Re: [PATCH 23/28] mini-os: fix various memory leaks in {fb, kbd}front Date: Wed, 18 Sep 2013 13:50:15 +0200 Message-ID: <20130918115015.GP5664@type.bordeaux.inria.fr> References: <1379475484-25993-1-git-send-email-mattjd@gmail.com> <1379475484-25993-24-git-send-email-mattjd@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Return-path: Content-Disposition: inline In-Reply-To: <1379475484-25993-24-git-send-email-mattjd@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Matthew Daley Cc: Stefano Stabellini , xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org Matthew Daley, le Wed 18 Sep 2013 15:37:59 +1200, a =E9crit : > Coverity-ID: 1055819-1055826 > Signed-off-by: Matthew Daley Acked-by: Samuel Thibault > --- > extras/mini-os/fbfront.c | 48 ++++++++++++++++++++++++++++++----------= ------ > 1 file changed, 31 insertions(+), 17 deletions(-) > = > diff --git a/extras/mini-os/fbfront.c b/extras/mini-os/fbfront.c > index 3d0b8f5..a276193 100644 > --- a/extras/mini-os/fbfront.c > +++ b/extras/mini-os/fbfront.c > @@ -171,7 +171,8 @@ done: > err =3D xenbus_wait_for_state_change(path, &state, &dev->eve= nts); > if (state !=3D XenbusStateConnected) { > printk("backend not available, state=3D%d\n", state); > - xenbus_unwatch_path_token(XBT_NIL, path, path); > + if (err) free(err); > + err =3D xenbus_unwatch_path_token(XBT_NIL, path, path); > goto error; > } > = > @@ -181,7 +182,8 @@ done: > if((err =3D xenbus_switch_state(XBT_NIL, frontpath, XenbusStateC= onnected)) > !=3D NULL) { > printk("error switching state: %s\n", err); > - xenbus_unwatch_path_token(XBT_NIL, path, path); > + free(err); > + err =3D xenbus_unwatch_path_token(XBT_NIL, path, path); > goto error; > } > } > @@ -236,7 +238,7 @@ int kbdfront_receive(struct kbdfront_dev *dev, union = xenkbd_in_event *buf, int n > = > void shutdown_kbdfront(struct kbdfront_dev *dev) > { > - char* err =3D NULL; > + char* err =3D NULL, *err2; > XenbusState state; > = > char path[strlen(dev->backend) + strlen("/state") + 1]; > @@ -278,14 +280,18 @@ void shutdown_kbdfront(struct kbdfront_dev *dev) > = > close_kbdfront: > if (err) free(err); > - xenbus_unwatch_path_token(XBT_NIL, path, path); > + err2 =3D xenbus_unwatch_path_token(XBT_NIL, path, path); > + if (err2) free(err2); > = > snprintf(nodename, sizeof(nodename), "%s/page-ref", dev->nodename); > - xenbus_rm(XBT_NIL, nodename); > + err2 =3D xenbus_rm(XBT_NIL, nodename); > + if (err2) free(err2); > snprintf(nodename, sizeof(nodename), "%s/event-channel", dev->nodena= me); > - xenbus_rm(XBT_NIL, nodename); > + err2 =3D xenbus_rm(XBT_NIL, nodename); > + if (err2) free(err2); > snprintf(nodename, sizeof(nodename), "%s/request-abs-pointer", dev->= nodename); > - xenbus_rm(XBT_NIL, nodename); > + err2 =3D xenbus_rm(XBT_NIL, nodename); > + if (err2) free(err2); > = > if (!err) > free_kbdfront(dev); > @@ -405,7 +411,7 @@ struct fbfront_dev *init_fbfront(char *_nodename, uns= igned long *mfns, int width > char* message=3DNULL; > struct xenfb_page *s; > int retry=3D0; > - char* msg; > + char* msg=3DNULL; > int i, j; > struct fbfront_dev *dev; > int max_pd; > @@ -532,7 +538,8 @@ done: > err =3D xenbus_wait_for_state_change(path, &state, &dev->eve= nts); > if (state !=3D XenbusStateConnected) { > printk("backend not available, state=3D%d\n", state); > - xenbus_unwatch_path_token(XBT_NIL, path, path); > + if (err) free(err); > + err =3D xenbus_unwatch_path_token(XBT_NIL, path, path); > goto error; > } > = > @@ -545,7 +552,8 @@ done: > if ((err =3D xenbus_switch_state(XBT_NIL, frontpath, XenbusState= Connected)) > !=3D NULL) { > printk("error switching state: %s\n", err); > - xenbus_unwatch_path_token(XBT_NIL, path, path); > + free(err); > + err =3D xenbus_unwatch_path_token(XBT_NIL, path, path); > goto error; > } > } > @@ -556,6 +564,7 @@ done: > return dev; > = > error: > + free(msg); > free(err); > free_fbfront(dev); > return NULL; > @@ -627,7 +636,7 @@ void fbfront_resize(struct fbfront_dev *dev, int widt= h, int height, int stride, > = > void shutdown_fbfront(struct fbfront_dev *dev) > { > - char* err =3D NULL; > + char* err =3D NULL, *err2; > XenbusState state; > = > char path[strlen(dev->backend) + strlen("/state") + 1]; > @@ -654,7 +663,7 @@ void shutdown_fbfront(struct fbfront_dev *dev) > } > state =3D xenbus_read_integer(path); > if (state < XenbusStateClosed) { > - xenbus_wait_for_state_change(path, &state, &dev->events); > + err =3D xenbus_wait_for_state_change(path, &state, &dev->events); > if (err) free(err); > } > = > @@ -669,16 +678,21 @@ void shutdown_fbfront(struct fbfront_dev *dev) > = > close_fbfront: > if (err) free(err); > - xenbus_unwatch_path_token(XBT_NIL, path, path); > + err2 =3D xenbus_unwatch_path_token(XBT_NIL, path, path); > + if (err2) free(err2); > = > snprintf(nodename, sizeof(nodename), "%s/page-ref", dev->nodename); > - xenbus_rm(XBT_NIL, nodename); > + err2 =3D xenbus_rm(XBT_NIL, nodename); > + if (err2) free(err2); > snprintf(nodename, sizeof(nodename), "%s/event-channel", dev->nodena= me); > - xenbus_rm(XBT_NIL, nodename); > + err2 =3D xenbus_rm(XBT_NIL, nodename); > + if (err2) free(err2); > snprintf(nodename, sizeof(nodename), "%s/protocol", dev->nodename); > - xenbus_rm(XBT_NIL, nodename); > + err2 =3D xenbus_rm(XBT_NIL, nodename); > + if (err2) free(err2); > snprintf(nodename, sizeof(nodename), "%s/feature-update", dev->noden= ame); > - xenbus_rm(XBT_NIL, nodename); > + err2 =3D xenbus_rm(XBT_NIL, nodename); > + if (err2) free(err2); > = > if (!err) > free_fbfront(dev); > -- = > 1.7.10.4 > = -- = Samuel I am the "ILOVEGNU" signature virus. Just copy me to your signature. This email was infected under the terms of the GNU General Public License.