[PATCH] Fix memory leak in scdaemon

View: New views
2 Messages — Rating Filter:   Alert me  

[PATCH] Fix memory leak in scdaemon

by Klaus Flittner :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi,

in scd/command.c the buffer allocated by cmd_setdata is never freed.
The attached patch frees the buffer after use and before a second use
of setdata.

Regards
 Klaus Flittner

[scdaemon_fix_memory_leak.patch]

Index: scd/command.c
===================================================================
--- scd/command.c (Revision 5186)
+++ scd/command.c (Arbeitskopie)
@@ -800,6 +800,13 @@
   if ((n&1))
     return set_error (GPG_ERR_ASS_PARAMETER, "odd number of digits");
   n /= 2;
+      
+  if (ctrl->in_data.value)
+    {
+      xfree(ctrl->in_data.value);
+      ctrl->in_data.value = NULL;
+    }
+
   buf = xtrymalloc (n);
   if (!buf)
     return out_of_core ();
@@ -928,6 +935,12 @@
                  &outdata, &outdatalen);
 
   xfree (keyidstr);
+  if (ctrl->in_data.value)
+    {
+      xfree(ctrl->in_data.value);
+      ctrl->in_data.value = NULL;
+      ctrl->in_data.valuelen = 0;
+    }
   if (rc)
     {
       log_error ("app_sign failed: %s\n", gpg_strerror (rc));
@@ -978,6 +991,12 @@
                  ctrl->in_data.value, ctrl->in_data.valuelen,
                  &outdata, &outdatalen);
   xfree (keyidstr);
+  if (ctrl->in_data.value)
+    {
+      xfree(ctrl->in_data.value);
+      ctrl->in_data.value = NULL;
+      ctrl->in_data.valuelen = 0;
+    }
   if (rc)
     {
       log_error ("app_auth failed: %s\n", gpg_strerror (rc));
@@ -1022,6 +1041,12 @@
                      &outdata, &outdatalen);
 
   xfree (keyidstr);
+  if (ctrl->in_data.value)
+    {
+      xfree(ctrl->in_data.value);
+      ctrl->in_data.value = NULL;
+      ctrl->in_data.valuelen = 0;
+    }
   if (rc)
     {
       log_error ("app_decipher failed: %s\n", gpg_strerror (rc));


_______________________________________________
Gnupg-devel mailing list
Gnupg-devel@...
http://lists.gnupg.org/mailman/listinfo/gnupg-devel

Re: [PATCH] Fix memory leak in scdaemon

by Werner Koch :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

On Sat, 24 Oct 2009 18:49, klaus@... said:

> in scd/command.c the buffer allocated by cmd_setdata is never freed.
> The attached patch frees the buffer after use and before a second use
> of setdata.

Good catch.  The fix is eaven easier than yours; see below.


Shalom-Salam,

   Werner


Index: scd/command.c
===================================================================
--- scd/command.c       (revision 5172)
+++ scd/command.c       (working copy)
@@ -804,6 +804,7 @@
   if (!buf)
     return out_of_core ();
 
+  xfree (ctrl->in_data.value);
   ctrl->in_data.value = buf;
   ctrl->in_data.valuelen = n;
   for (p=line, n=0; n < ctrl->in_data.valuelen; p += 2, n++)
Index: scd/scdaemon.c
===================================================================
--- scd/scdaemon.c      (revision 5172)
+++ scd/scdaemon.c      (working copy)
@@ -892,7 +892,11 @@
 static void
 scd_deinit_default_ctrl (ctrl_t ctrl)
 {
-  (void)ctrl;
+  if (!ctrl)
+    return;
+  xfree (ctrl->in_data.value);
+  ctrl->in_data.value = NULL;
+  ctrl->in_data.valuelen = 0;
 }
 

--
Die Gedanken sind frei.  Auschnahme regelt ein Bundeschgesetz.


_______________________________________________
Gnupg-devel mailing list
Gnupg-devel@...
http://lists.gnupg.org/mailman/listinfo/gnupg-devel