From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12256 invoked by alias); 7 Dec 2009 17:26:57 -0000 Received: (qmail 12133 invoked by uid 22791); 7 Dec 2009 17:26:56 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL,BAYES_00,SPF_HELO_PASS,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.45.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 07 Dec 2009 17:26:54 +0000 Received: from kpbe20.cbf.corp.google.com (kpbe20.cbf.corp.google.com [172.25.105.84]) by smtp-out.google.com with ESMTP id nB7HQidV005634; Mon, 7 Dec 2009 09:26:45 -0800 Received: from ruffy.mtv.corp.google.com (ruffy.mtv.corp.google.com [172.18.118.116]) by kpbe20.cbf.corp.google.com with ESMTP id nB7HQfWP032117; Mon, 7 Dec 2009 09:26:42 -0800 Received: by ruffy.mtv.corp.google.com (Postfix, from userid 67641) id 398198456F; Mon, 7 Dec 2009 09:26:41 -0800 (PST) To: gcc-patches@gcc.gnu.org cc: gdb-patches@sourceware.org Subject: [RFA] save/restore environ in libiberty pex_unix_exec_child Message-Id: <20091207172641.398198456F@ruffy.mtv.corp.google.com> Date: Mon, 07 Dec 2009 17:26:00 -0000 From: dje@google.com (Doug Evans) X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-12/txt/msg00078.txt.bz2 Hi. I ran into this while using pex_run_in_environment in gdb. Ok to check in? 2009-12-07 Doug Evans * pex-unix.c (pex_unix_exec_child): Save/restore environ. ==== //depot2/gcctools/google_vendor_src_branch/gdb/gdb-7.0.x-prod/libiberty/pex-unix.c#1 - /usr/local/google/home/dje/ctools/gdb/7.0.x-prod/depot2/gcctools/google_vendor_src_branch/gdb/gdb-7.0.x-prod/libiberty/pex-unix.c ==== --- /tmp/g4-67641/cache/depot2/gcctools/google_vendor_src_branch/gdb/gdb-7.0.x-prod/libiberty/pex-unix.c#1 2009-12-06 12:30:36.000000000 -0800 +++ /usr/local/google/home/dje/ctools/gdb/7.0.x-prod/depot2/gcctools/google_vendor_src_branch/gdb/gdb-7.0.x-prod/libiberty/pex-unix.c 2009-12-06 12:27:46.000000000 -0800 @@ -397,6 +397,10 @@ volatile int sleep_interval; volatile int retries; + /* We vfork and then set environ in the child before calling execvp. + This clobbers the parent's environ so we need to restore it. */ + char **save_environ = environ; + sleep_interval = 1; pid = -1; for (retries = 0; retries < 4; ++retries) @@ -468,6 +472,7 @@ default: /* Parent process. */ + environ = save_environ; if (in != STDIN_FILE_NO) { if (close (in) < 0)