[microcode_ctl] memory leak fix.

Anton Arapov aarapov at fedoraproject.org
Thu Mar 24 09:47:30 UTC 2011


commit d47699adffccd899164115568b1c290bdfa30b8b
Author: Anton Arapov <aarapov at redhat.com>
Date:   Thu Mar 24 10:47:11 2011 +0100

    memory leak fix.

 microcode_ctl.patch |   54 ++++++++++++++++++++++++++++++++++++++++++--------
 microcode_ctl.spec  |    7 ++++-
 2 files changed, 50 insertions(+), 11 deletions(-)
---
diff --git a/microcode_ctl.patch b/microcode_ctl.patch
index 48a809c..a7bbc57 100644
--- a/microcode_ctl.patch
+++ b/microcode_ctl.patch
@@ -1,6 +1,6 @@
-diff -Naurp microcode_ctl-1.17.orig/Makefile microcode_ctl-1.17/Makefile
---- microcode_ctl-1.17.orig/Makefile	2007-04-26 06:59:44.000000000 -0400
-+++ microcode_ctl-1.17/Makefile	2008-02-05 11:22:23.000000000 -0500
+diff -urpN microcode_ctl-1.17.orig/Makefile microcode_ctl-1.17/Makefile
+--- microcode_ctl-1.17.orig/Makefile	2011-03-24 10:28:12.553269014 +0100
++++ microcode_ctl-1.17/Makefile	2011-03-24 10:28:26.644387088 +0100
 @@ -20,8 +20,8 @@ DESTDIR		=
  PREFIX		= /usr/local
  
@@ -21,9 +21,9 @@ diff -Naurp microcode_ctl-1.17.orig/Makefile microcode_ctl-1.17/Makefile
  	$(INS) -m 644 $(MICROCODE) $(DESTDIR)$(MICDIR)/microcode.dat
  
  	$(INS) -m 644 $(MANPAGE) $(DESTDIR)$(MANDIR)
-diff -Naurp microcode_ctl-1.17.orig/microcode_ctl.c microcode_ctl-1.17/microcode_ctl.c
---- microcode_ctl-1.17.orig/microcode_ctl.c	2006-06-28 10:51:31.000000000 -0400
-+++ microcode_ctl-1.17/microcode_ctl.c	2008-02-05 11:21:31.000000000 -0500
+diff -urpN microcode_ctl-1.17.orig/microcode_ctl.c microcode_ctl-1.17/microcode_ctl.c
+--- microcode_ctl-1.17.orig/microcode_ctl.c	2011-03-24 10:28:12.553269014 +0100
++++ microcode_ctl-1.17/microcode_ctl.c	2011-03-24 10:28:29.244262053 +0100
 @@ -25,7 +25,7 @@ int print_error_messages=1;
  #define MAX_MICROCODE	2000000
  
@@ -33,7 +33,7 @@ diff -Naurp microcode_ctl-1.17.orig/microcode_ctl.c microcode_ctl-1.17/microcode
  
  static void usage(void)
  {
-@@ -52,11 +52,13 @@ static int do_update(char *device, char 
+@@ -52,17 +52,19 @@ static int do_update(char *device, char 
  {
  	FILE *fp;
  	char line_buffer[BUFFER_SIZE];
@@ -48,8 +48,28 @@ diff -Naurp microcode_ctl-1.17.orig/microcode_ctl.c microcode_ctl-1.17/microcode
  
  	if( (fp=fopen(filename, "r")) == NULL){
  		if(print_error_messages)
-@@ -101,7 +103,7 @@ static int do_update(char *device, char 
- 		return errno;
+ 			fprintf(stderr, "%s: cannot open source file '%s' errno=%d (%s)\n",
+ 				progname, filename, errno, strerror(errno));
+-		return errno;
++		goto end;
+ 	}
+ 
+ 	pos = microcode;
+@@ -84,7 +86,7 @@ static int do_update(char *device, char 
+ 				fprintf(stderr, "%s: file too large for utility microcode buffer\n"
+ 						"%s: change MAX_MICROCODE yourself :)\n", progname, progname);
+ 			fclose(fp);	
+-			return errno;
++			goto end;
+ 		}
+ 		
+ 	}
+@@ -98,16 +100,16 @@ static int do_update(char *device, char 
+ 		if(print_error_messages)
+ 			fprintf(stderr, "%s: cannot open %s for writing errno=%d (%s)\n",
+ 				progname, device, errno, strerror(errno));
+-		return errno;
++		goto end;
  	}
  
 -	if( (wrote = write(outfd, &microcode, length)) < 0){
@@ -57,3 +77,19 @@ diff -Naurp microcode_ctl-1.17.orig/microcode_ctl.c microcode_ctl-1.17/microcode
  		if(print_error_messages)
  			fprintf(stderr, "%s: error writing to '%s' errno=%d (%s)\n"
  					"%s: there may be messages from the driver in your system log.\n",
+ 				progname, device, errno, strerror(errno), progname);
+ 		close(outfd);
+-		return errno;
++		goto end;
+ 	}
+ 
+ 	if((wrote == length) && print_normal_messages)
+@@ -116,6 +118,8 @@ static int do_update(char *device, char 
+ 
+ 	close(outfd);
+ 
++end:
++    free(microcode);
+ 	return errno;
+ }
+ 
diff --git a/microcode_ctl.spec b/microcode_ctl.spec
index 6c6b77f..9a3bc10 100644
--- a/microcode_ctl.spec
+++ b/microcode_ctl.spec
@@ -1,7 +1,7 @@
 Summary:        Tool to update x86/x86-64 CPU microcode.
 Name:           microcode_ctl
 Version:        1.17
-Release:        12%{?dist}
+Release:        13%{?dist}
 Epoch:          1
 Group:          System Environment/Base
 License:        GPLv2+ and Redistributable, no modification permitted
@@ -73,7 +73,10 @@ rm -rf %{buildroot}
 exit 0
 
 
-%changelog
+%changeloga
+* Thu Mar 24 2011 Anton Arapov <anton at redhat.com> 1.17-13
+- fix memory leak.
+
 * Mon Mar 07 2011 Anton Arapov <anton at redhat.com> 1.17-12
 - Update to amd-ucode-2011-01-11.tar
 


More information about the scm-commits mailing list