[lxc-devel] [PATCH v2] don't truncate environment sometimes in setproctitle
Tycho Andersen
tycho.andersen at canonical.com
Mon Nov 16 21:55:17 UTC 2015
Instead, let's just allocate new space for the proctitle to live and point
the kernel at that.
v2: take out testing hunk
Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
---
src/lxc/utils.c | 29 +++++++++--------------------
1 file changed, 9 insertions(+), 20 deletions(-)
diff --git a/src/lxc/utils.c b/src/lxc/utils.c
index dac6418..a5ec2ec 100644
--- a/src/lxc/utils.c
+++ b/src/lxc/utils.c
@@ -1349,6 +1349,7 @@ char *get_template_path(const char *t)
*/
int setproctitle(char *title)
{
+ static char *proctitle = NULL;
char buf[2048], *tmp;
FILE *f;
int i, len, ret = 0;
@@ -1413,28 +1414,16 @@ int setproctitle(char *title)
* want to have room for it. */
len = strlen(title) + 1;
- /* We're truncating the environment, so we should use at most the
- * length of the argument + environment for the title. */
- if (len > env_end - arg_start) {
- arg_end = env_end;
- len = env_end - arg_start;
- title[len-1] = '\0';
- } else {
- /* Only truncate the environment if we're actually going to
- * overwrite part of it. */
- if (len >= arg_end - arg_start) {
- env_start = env_end;
- }
-
- arg_end = arg_start + len;
-
- /* check overflow */
- if (arg_end < len || arg_end < arg_start) {
- return -1;
- }
-
+ /* If we don't have enough room by just overwriting the old proctitle,
+ * let's allocate a new one.
+ */
+ if (len > arg_end - arg_start) {
+ proctitle = realloc(proctitle, len);
+ arg_start = (unsigned long) proctitle;
}
+ arg_end = arg_start + len;
+
brk_val = syscall(__NR_brk, 0);
prctl_map = (struct prctl_mm_map) {
--
2.5.0
More information about the lxc-devel
mailing list