[PATCH] Enable full memory dump

Frodo Baggins frodo.drogo at gmail.com
Tue Sep 11 18:41:37 UTC 2007


If user is root, we can remove the limit on core dump size. This may
make it easier to debug dumps.
The old limit is saved and restored at exit via atexit(3).
---
 parted/parted.c |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+), 0 deletions(-)

diff --git a/parted/parted.c b/parted/parted.c
index 6a606ae..154e710 100644
--- a/parted/parted.c
+++ b/parted/parted.c
@@ -57,6 +57,8 @@
 #endif

 #include <getopt.h>
+#include <sys/time.h>
+#include <sys/resource.h>

 /* minimum amount of free space to leave, or maximum amount to gobble up */
 #define MIN_FREESPACE           (1000 * 2)      /* 1000k */
@@ -147,9 +149,24 @@ static Command* commands [256] = {NULL};
 static PedTimer* g_timer;
 static TimerContext timer_context;

+#ifdef HAVE_GETUID
+static struct rlimit old_limit;
+static void restore_rlimit(void);
+#endif
+
 static int _print_list ();
 static void _done (PedDevice* dev);

+#ifdef HAVE_GETUID
+static void
+restore_rlimit(void)
+{
+       if(getuid() == 0){
+           setrlimit(RLIMIT_CORE,&old_limit);
+       }
+}
+#endif
+
 static void
 _timer_handler (PedTimer* timer, void* context)
 {
@@ -2397,6 +2414,7 @@ static PedDevice*
 _init (int* argc_ptr, char*** argv_ptr)
 {
 PedDevice*      dev;
+struct rlimit infinity={RLIM_INFINITY,RLIM_INFINITY};

 #ifdef ENABLE_MTRACE
 mtrace();
@@ -2416,6 +2434,11 @@ if (!_parse_options (argc_ptr, argv_ptr)
             puts (_("WARNING: You are not superuser.  Watch out for "
                     "permissions."));
         }
+       /* Set maximum permitted core file size to infinity if possible */
+       if(getuid() == 0){
+           getrlimit(RLIMIT_CORE,&old_limit);
+           setrlimit(RLIMIT_CORE,&infinity);
+       }
 #endif

 dev = _choose_device (argc_ptr, argv_ptr);
@@ -2470,6 +2493,7 @@ main (int argc, char** argv)

         program_name = argv[0];
         atexit (close_stdout);
+       atexit (restore_rlimit);

         dev = _init (&argc, &argv);
         if (!dev)
--
1.4.3.4



More information about the parted-devel mailing list