diff options
author | Justus Winter <justus@gnupg.org> | 2016-06-05 00:34:31 +0200 |
---|---|---|
committer | Justus Winter <justus@gnupg.org> | 2016-06-05 00:34:31 +0200 |
commit | b40d64ee96c3f0fb7a753cf3a13067f99e21a619 (patch) | |
tree | 6ac4e0f520e6e42710c0e7734799ded392133344 /debian | |
parent | 3d0357ea3bda6b046bece263f585e1c22d1d54bb (diff) |
drop old patch series
Diffstat (limited to 'debian')
-rw-r--r-- | debian/patches/corefiles0001-trans-crash-fix-resource-leaks.patch | 55 | ||||
-rw-r--r-- | debian/patches/corefiles0002-trans-crash-xxx-core-file-templates.patch | 245 | ||||
-rw-r--r-- | debian/patches/series | 2 |
3 files changed, 0 insertions, 302 deletions
diff --git a/debian/patches/corefiles0001-trans-crash-fix-resource-leaks.patch b/debian/patches/corefiles0001-trans-crash-fix-resource-leaks.patch deleted file mode 100644 index 79baca58..00000000 --- a/debian/patches/corefiles0001-trans-crash-fix-resource-leaks.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 16b91e459e52b985d32ff3f6280fafe59dc3aa80 Mon Sep 17 00:00:00 2001 -From: Justus Winter <justus@gnupg.org> -Date: Fri, 3 Jun 2016 16:55:55 +0200 -Subject: [PATCH hurd 1/2] trans/crash: fix resource leaks - -* trans/crash.c (S_crash_dump_task): Properly deallocate 'task', -'core_file', and 'ctty_id'. ---- - trans/crash.c | 17 +++++++++++------ - 1 file changed, 11 insertions(+), 6 deletions(-) - -diff --git a/trans/crash.c b/trans/crash.c -index 5db9974..e60ce7e 100644 ---- a/trans/crash.c -+++ b/trans/crash.c -@@ -217,7 +217,9 @@ S_crash_dump_task (mach_port_t port, - proc_mark_stop (user_proc, signo, sigcode); - - c->task = task; -+ task = MACH_PORT_NULL; - c->core_file = core_file; -+ core_file = MACH_PORT_NULL; - c->core_limit = (off_t) -1; /* XXX should core limit in RPC */ - c->signo = signo; - c->sigcode = sigcode; -@@ -251,17 +253,20 @@ S_crash_dump_task (mach_port_t port, - if (!err) - err = proc_mark_exit (user_proc, W_EXITCODE (0, signo), sigcode); - err = task_terminate (task); -- if (!err) -- { -- mach_port_deallocate (mach_task_self (), task); -- mach_port_deallocate (mach_task_self (), core_file); -- mach_port_deallocate (mach_task_self (), ctty_id); -- } - } - } - - if (user_proc != MACH_PORT_NULL) - mach_port_deallocate (mach_task_self (), user_proc); -+ if (err == 0 || err = MIG_NO_REPLY) -+ { -+ if (MACH_PORT_VALID (task)) -+ mach_port_deallocate (mach_task_self (), task); -+ if (MACH_PORT_VALID (core_file)) -+ mach_port_deallocate (mach_task_self (), core_file); -+ if (MACH_PORT_VALID (ctty_id)) -+ mach_port_deallocate (mach_task_self (), ctty_id); -+ } - - ports_port_deref (cred); - return err; --- -2.1.4 - diff --git a/debian/patches/corefiles0002-trans-crash-xxx-core-file-templates.patch b/debian/patches/corefiles0002-trans-crash-xxx-core-file-templates.patch deleted file mode 100644 index 7f2922ed..00000000 --- a/debian/patches/corefiles0002-trans-crash-xxx-core-file-templates.patch +++ /dev/null @@ -1,245 +0,0 @@ -From 647834f82039e395acbb948fb2778ba799fa640d Mon Sep 17 00:00:00 2001 -From: Justus Winter <justus@gnupg.org> -Date: Fri, 3 Jun 2016 00:52:06 +0200 -Subject: [PATCH hurd 2/2] trans/crash: xxx core file templates - ---- - hurd/crash.defs | 6 +- - trans/crash.c | 166 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- - 2 files changed, 168 insertions(+), 4 deletions(-) - -diff --git a/hurd/crash.defs b/hurd/crash.defs -index 442957d..aead8ee 100644 ---- a/hurd/crash.defs -+++ b/hurd/crash.defs -@@ -25,8 +25,10 @@ subsystem crash 32000; - - /* Handle a crashing task, whose task control port is TASK. - -- FILE is a file port open for writing. The caller will link it to "core" -- (or whatever name) if the RPC returns success. -+ FILE is a file port open for writing. The caller will link it to -+ "core" (or whatever name) if the RPC returns success. If EEXIST is -+ returned, the caller assumes that a core file has been written to a -+ different file, and that FILE can be discarded. - - SIGNO, SIGCODE, and SIGERROR indicate the signal that killed the - process. EXC is zero for a software signal; otherwise EXC, CODE, and -diff --git a/trans/crash.c b/trans/crash.c -index e60ce7e..0fe9b24 100644 ---- a/trans/crash.c -+++ b/trans/crash.c -@@ -70,7 +70,105 @@ enum crash_action - #define CRASH_ORPHANS_DEFAULT crash_corefile - - static enum crash_action crash_how, crash_orphans_how; -+static char *corefile_template; - -+ -+ -+/* Template parsing. */ -+static int -+template_valid (const char *template, const char **errp) -+{ -+ int valid = 0; -+ const char *t; -+ int specifier = 0; -+ -+ for (t = template; *t; t++) -+ { -+ if (specifier) -+ switch (*t) -+ { -+ case '%': -+ case 'p': -+ case 's': -+ case 't': -+ specifier = 0; -+ break; -+ default: -+ goto out; -+ } -+ else if (*t == '%') -+ specifier = 1; -+ } -+ -+ out: -+ valid = ! specifier; -+ *errp = valid? NULL: t; -+ return valid; -+} -+ -+static char * -+template_make_file_name (const char *template, -+ task_t task, -+ int signo) -+{ -+ const char *t; -+ char *file_name = NULL; -+ size_t file_name_len = 0; -+ FILE *stream; -+ int specifier = 0; -+ -+ if (! template_valid (template, &t)) -+ { -+ errno = EINVAL; -+ return NULL; -+ } -+ -+ stream = open_memstream (&file_name, &file_name_len); -+ if (stream == NULL) -+ return NULL; -+ -+ for (t = template; *t; t++) -+ { -+ if (specifier) -+ { -+ switch (*t) -+ { -+ case '%': -+ fprintf (stream, "%%"); -+ break; -+ -+ case 'p': -+ fprintf (stream, "%d", task2pid (task)); -+ break; -+ -+ case 's': -+ fprintf (stream, "%d", signo); -+ break; -+ -+ case 't': -+ fprintf (stream, "%d", time (NULL)); -+ break; -+ -+ default: -+ assert (!"reached!"); -+ } -+ specifier = 0; -+ } -+ else if (*t == '%') -+ specifier = 1; -+ else -+ fprintf (stream, "%c", *t); -+ } -+ -+ assert (! specifier); -+ -+ fprintf (stream, "%c", 0); -+ fclose (stream); -+ -+ return file_name; -+} -+ -+ - - /* This is defined in ../exec/elfcore.c, or we could have - different implementations for other formats. */ -@@ -237,10 +335,42 @@ S_crash_dump_task (mach_port_t port, - err = task_suspend (task); - if (!err) - { -- err = dump_core (task, core_file, -+ file_t sink = core_file; -+ if (corefile_template) -+ { -+ char *file_name; -+ -+ file_name = template_make_file_name (corefile_template, -+ task, signo); -+ if (file_name == NULL) -+ error (0, errno, "template_make_file_name"); -+ else -+ { -+ sink = file_name_lookup (file_name, O_WRONLY|O_CREAT, -+ S_IRUSR); -+ if (! MACH_PORT_VALID (sink)) -+ { -+ error (0, errno, "%s", file_name); -+ sink = core_file; -+ } -+ free (file_name); -+ } -+ } -+ -+ err = dump_core (task, sink, - (off_t) -1, /* XXX should get core limit in RPC */ - signo, sigcode, sigerror); - task_resume (task); -+ -+ if (sink != core_file) -+ { -+ mach_port_deallocate (mach_task_self (), sink); -+ -+ /* We return an error so that the libc discards -+ CORE_FILE. */ -+ if (! err) -+ err = EEXIST; -+ } - } - break; - -@@ -450,13 +580,25 @@ static const struct argp_option options[] = - {"kill", 'k', 0, 0, "Kill the process", 2}, - {"core-file", 'c', 0, 0, "Dump a core file", 2}, - {"dump-core", 0, 0, OPTION_ALIAS }, -+ {"core-file-name", 'C', "TEMPLATE", 0, -+ "Specify core file name (see below)", 2}, - {0} - }; - static const char doc[] = - "Server to handle crashing tasks and dump core files or equivalent.\v" - "The ACTION values can be `suspend', `kill', or `core-file'.\n\n" - "If `--orphan-action' is not specified, the `--action' value is used for " --"orphans. The default is `--action=suspend --orphan-action=core-file'."; -+"orphans. The default is `--action=suspend --orphan-action=core-file'.\n" -+"\n" -+"The core file is either written to the file provided by the " -+"crashing process, or if a TEMPLATE value is given, to the file " -+"with the name constructed by expanding TEMPLATE value. " -+"TEMPLATE may contain % specifiers:\n" -+"\n" -+"\t%% just %\n" -+"\t%p the process' PID\n" -+"\t%s the signal number that caused the dump\n" -+"\t%t time of crash in seconds since the EPOCH\n"; - - static error_t - parse_opt (int opt, char *arg, struct argp_state *state) -@@ -494,6 +636,14 @@ parse_opt (int opt, char *arg, struct argp_state *state) - case 's': crash_how = crash_suspend; break; - case 'k': crash_how = crash_kill; break; - case 'c': crash_how = crash_corefile; break; -+ case 'C': -+ { -+ char *errp; -+ if (! template_valid (arg, &errp)) -+ error (1, 0, "Invalid template: ...'%s'", errp); -+ } -+ corefile_template = arg; -+ break; - - case ARGP_KEY_SUCCESS: - if (crash_orphans_how == crash_unspecified) -@@ -536,6 +686,18 @@ trivfs_append_args (struct trivfs_control *fsys, - err = argz_add (argz, argz_len, opt); - } - -+ if (!err && corefile_template) -+ { -+ char *template; -+ if (asprintf (&template, "--core-file-name=%s", corefile_template) < 0) -+ err = errno; -+ else -+ { -+ err = argz_add (argz, argz_len, template); -+ free (template); -+ } -+ } -+ - return err; - } - --- -2.1.4 - diff --git a/debian/patches/series b/debian/patches/series index 194ac423..563f1d69 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -40,7 +40,5 @@ hurdutil0001-libhurdutil-New-library-containing-utils-to-be-used-.patch external.patch crash0001-xxx-crash-logging-works.patch nfs0001-nfs-fix-memory-leak.patch -corefiles0001-trans-crash-fix-resource-leaks.patch -corefiles0002-trans-crash-xxx-core-file-templates.patch leaks0001-xxx-print-fail.patch leaks0002-libshouldbeinlibc-add-safe-port-handling-macros.patch |