* Urgency high for etch-targetted bugfix.
* New patch, 20_glibtop_get_proc_map-stack-overflow, fixes a stack overflow in get_proc_map-stack(); from upstream SVN r2546; thanks Benoît Dejean.
This commit is contained in:
7
debian/changelog
vendored
7
debian/changelog
vendored
@@ -1,8 +1,11 @@
|
|||||||
libgtop2 (2.14.4-3) UNRELEASED; urgency=low
|
libgtop2 (2.14.4-3) unstable; urgency=high
|
||||||
|
|
||||||
|
* Urgency high for etch-targetted bugfix.
|
||||||
* Add a get-orig-source target to retrieve the upstream tarball.
|
* Add a get-orig-source target to retrieve the upstream tarball.
|
||||||
|
* New patch, 20_glibtop_get_proc_map-stack-overflow, fixes a stack overflow
|
||||||
|
in get_proc_map-stack(); from upstream SVN r2546; thanks Benoît Dejean.
|
||||||
|
|
||||||
-- Loic Minier <lool@dooz.org> Sat, 13 Jan 2007 23:33:24 +0100
|
-- Loic Minier <lool@dooz.org> Sun, 14 Jan 2007 21:18:52 +0100
|
||||||
|
|
||||||
libgtop2 (2.14.4-2) unstable; urgency=low
|
libgtop2 (2.14.4-2) unstable; urgency=low
|
||||||
|
|
||||||
|
108
debian/patches/20_glibtop_get_proc_map-stack-overflow.patch
vendored
Normal file
108
debian/patches/20_glibtop_get_proc_map-stack-overflow.patch
vendored
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
Index: sysdeps/linux/procmap.c
|
||||||
|
===================================================================
|
||||||
|
--- sysdeps/linux/procmap.c (révision 2545)
|
||||||
|
+++ sysdeps/linux/procmap.c (révision 2546)
|
||||||
|
@@ -38,7 +38,7 @@
|
||||||
|
#define SMAPS_FILE "/proc/%u/smaps"
|
||||||
|
|
||||||
|
|
||||||
|
-#define PROC_MAPS_FORMAT "%16llx-%16llx %4c %16llx %02hx:%02hx %llu%*[ ]%[^\n]\n"
|
||||||
|
+#define PROC_MAPS_FORMAT "%16llx-%16llx %4c %16llx %02hx:%02hx %llu%*[ ]%n"
|
||||||
|
|
||||||
|
|
||||||
|
static const unsigned long _glibtop_sysdeps_proc_map =
|
||||||
|
@@ -132,6 +132,8 @@
|
||||||
|
FILE *maps;
|
||||||
|
const char *filename;
|
||||||
|
gboolean has_smaps;
|
||||||
|
+ char *line = NULL;
|
||||||
|
+ size_t line_size = 0;
|
||||||
|
|
||||||
|
glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROC_MAP, 0);
|
||||||
|
|
||||||
|
@@ -152,33 +154,29 @@
|
||||||
|
|
||||||
|
while(TRUE)
|
||||||
|
{
|
||||||
|
- char line[1024];
|
||||||
|
-
|
||||||
|
unsigned long perm = 0;
|
||||||
|
- int rv;
|
||||||
|
guint len;
|
||||||
|
+ int line_end;
|
||||||
|
|
||||||
|
unsigned short dev_major, dev_minor;
|
||||||
|
guint64 start, end, offset, inode;
|
||||||
|
char flags[4];
|
||||||
|
- char filename [GLIBTOP_MAP_FILENAME_LEN+1];
|
||||||
|
+ char *filename;
|
||||||
|
|
||||||
|
glibtop_map_entry *entry;
|
||||||
|
|
||||||
|
- if (!fgets(line, sizeof line, maps))
|
||||||
|
+ if (getline(&line, &line_size, maps) == -1)
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* 8 arguments */
|
||||||
|
- rv = sscanf(line, PROC_MAPS_FORMAT,
|
||||||
|
- &start, &end, flags, &offset,
|
||||||
|
- &dev_major, &dev_minor, &inode, filename);
|
||||||
|
+ if (sscanf(line, PROC_MAPS_FORMAT,
|
||||||
|
+ &start, &end, flags, &offset,
|
||||||
|
+ &dev_major, &dev_minor, &inode, &line_end) != 7)
|
||||||
|
+ break;
|
||||||
|
|
||||||
|
- if(rv == EOF || rv < 7)
|
||||||
|
- break;
|
||||||
|
+ filename = line + line_end;
|
||||||
|
+ g_strstrip(filename);
|
||||||
|
|
||||||
|
- if(rv == 7) /* no filename */
|
||||||
|
- filename[0] = '\0';
|
||||||
|
-
|
||||||
|
/* Compute access permissions. */
|
||||||
|
|
||||||
|
if (flags [0] == 'r')
|
||||||
|
@@ -217,6 +215,7 @@
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
+ free(line);
|
||||||
|
fclose (maps);
|
||||||
|
|
||||||
|
buf->flags = _glibtop_sysdeps_proc_map;
|
||||||
|
Index: sysdeps/linux/procopenfiles.c
|
||||||
|
===================================================================
|
||||||
|
--- sysdeps/linux/procopenfiles.c (révision 2545)
|
||||||
|
+++ sysdeps/linux/procopenfiles.c (révision 2546)
|
||||||
|
@@ -58,7 +58,8 @@
|
||||||
|
parse_file(const char *filename, LineParser parser, GHashTable *dict)
|
||||||
|
{
|
||||||
|
FILE *f;
|
||||||
|
- char line[1024];
|
||||||
|
+ char *line = NULL;
|
||||||
|
+ size_t size = 0;
|
||||||
|
|
||||||
|
f = fopen(filename, "r");
|
||||||
|
|
||||||
|
@@ -67,15 +68,16 @@
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+
|
||||||
|
/* skip the first line */
|
||||||
|
- if(!fgets(line, sizeof line, f)) goto eof;
|
||||||
|
+ if (getline(&line, &size, f) == -1)
|
||||||
|
+ goto eof;
|
||||||
|
|
||||||
|
- while(fgets(line, sizeof line, f))
|
||||||
|
- {
|
||||||
|
+ while (getline(&line, &size, f) != -1)
|
||||||
|
parser(dict, line);
|
||||||
|
- }
|
||||||
|
|
||||||
|
eof:
|
||||||
|
+ free(line);
|
||||||
|
fclose(f);
|
||||||
|
}
|
||||||
|
|
Reference in New Issue
Block a user