Re: [SRU] update for powertop in 6.0.1
Hey,
> Impressive design. What would happen if it skips half of the "config"? I
> agree that not segfaulting is incredibly better than segfaulting, but like
> this the remaining bunch of lines will be silently ignored?
I've rewritten the patch from Mel Gorman, now you'll get a printf output on
the console if the config file is too large (and powertop will abort).
Please have a look on the updated debdiff attached to this mail.
Greetings
Winnie
diff -u powertop-1.11/debian/changelog powertop-1.11/debian/changelog
--- powertop-1.11/debian/changelog
+++ powertop-1.11/debian/changelog
@@ -1,3 +1,10 @@
+powertop (1.11-1+squeeze1) stable; urgency=low
+
+ * Fix segfault on newer kernels with large config files.
+ Thanks to Mel Gorman (Closes: #610101)
+
+ -- Patrick Winnertz <winnie@debian.org> Fri, 11 Mar 2011 11:22:33 +0100
+
powertop (1.11-1) unstable; urgency=low
* New upstream release
diff -u powertop-1.11/debian/patches/00list powertop-1.11/debian/patches/00list
--- powertop-1.11/debian/patches/00list
+++ powertop-1.11/debian/patches/00list
@@ -1,0 +2 @@
+increase-configlimit.dpatch
only in patch2:
unchanged:
--- powertop-1.11.orig/debian/patches/increase-configlimit.dpatch
+++ powertop-1.11/debian/patches/increase-configlimit.dpatch
@@ -0,0 +1,59 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## increase-configlimit.patch.dpatch by <mel@csn.ul.ie>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+@DPATCH@
+diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' powertop-1.11~/config.c powertop-1.11/config.c
+--- powertop-1.11~/config.c 2011-03-11 19:06:28.000000000 +0100
++++ powertop-1.11/config.c 2011-03-17 13:23:23.969122826 +0100
+@@ -33,9 +33,14 @@
+ #include "powertop.h"
+
+ /* static arrays are not nice programming.. but they're easy */
+-static char configlines[5000][100];
++static char configlines[MAXCONFIGLINES][100];
+ static int configcount;
+
++static void cleanup_curses_w_errormsg(void) {
++ endwin();
++ printf(_("Your kernel config exceeds the limit of %i lines, aborting!\n"),MAXCONFIGLINES);
++}
++
+ static void read_kernel_config(void)
+ {
+ FILE *file;
+@@ -49,6 +54,10 @@
+ char line[100];
+ if (fgets(line, 100, file) == NULL)
+ break;
++ if (configcount >= MAXCONFIGLINES) {
++ atexit(cleanup_curses_w_errormsg);
++ exit(EXIT_FAILURE);
++ }
+ strcpy(configlines[configcount++], line);
+ }
+ pclose(file);
+@@ -77,6 +86,10 @@
+ char line[100];
+ if (fgets(line, 100, file) == NULL)
+ break;
++ if (configcount >= MAXCONFIGLINES) {
++ atexit(cleanup_curses_w_errormsg);
++ exit(EXIT_FAILURE);
++ }
+ strcpy(configlines[configcount++], line);
+ }
+ fclose(file);
+diff -urNad '--exclude=CVS' '--exclude=.svn' '--exclude=.git' '--exclude=.arch' '--exclude=.hg' '--exclude=_darcs' '--exclude=.bzr' powertop-1.11~/powertop.h powertop-1.11/powertop.h
+--- powertop-1.11~/powertop.h 2008-12-30 19:52:54.000000000 +0100
++++ powertop-1.11/powertop.h 2011-03-17 13:23:35.981182381 +0100
+@@ -88,6 +88,7 @@
+
+ #define _(STRING) gettext(STRING)
+
++#define MAXCONFIGLINES 10000
+
+ #define PT_COLOR_DEFAULT 1
+ #define PT_COLOR_HEADER_BAR 2
Reply to: