From owner-freebsd-current@FreeBSD.ORG Sun Jul 8 17:17:31 2007 Return-Path: X-Original-To: freebsd-current@FreeBSD.org Delivered-To: freebsd-current@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id 016BC16A476; Sun, 8 Jul 2007 17:17:31 +0000 (UTC) (envelope-from ache@nagual.pp.ru) Received: from nagual.pp.ru (nagual.pp.ru [194.87.13.69]) by mx1.freebsd.org (Postfix) with ESMTP id 6E08D13C4BB; Sun, 8 Jul 2007 17:17:30 +0000 (UTC) (envelope-from ache@nagual.pp.ru) Received: from nagual.pp.ru (ache@localhost [127.0.0.1]) by nagual.pp.ru (8.14.1/8.14.1) with ESMTP id l68HHSxd090815; Sun, 8 Jul 2007 21:17:28 +0400 (MSD) (envelope-from ache@nagual.pp.ru) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nagual.pp.ru; s=default; t=1183915049; bh=mGizx7K62AUiaa+Lp2q2NfEQImRNHufvJRWumb5 dYkE=; l=986; h=Received:Date:From:To:Subject:Message-ID: Mail-Followup-To:References:MIME-Version:Content-Type: Content-Disposition:In-Reply-To:User-Agent; b=dCmCctxw9HSHS4Pqir38 oZMc2+UTV4AtCNaOzdJl4bUM0CGerMnrpBTpuQYQ+mxSWcROzl9ZbfHRA56v+Aa4TVw XCd1RclgLx/O/HW+3wOgbMAqroUKRUGwQVcCXVhGgNcjgsZZhpcQt3GaDhTvP0VTXdd wHqs0FWlyCp4dtcGY= Received: (from ache@localhost) by nagual.pp.ru (8.14.1/8.14.1/Submit) id l68HHSQp090814; Sun, 8 Jul 2007 21:17:28 +0400 (MSD) (envelope-from ache) Date: Sun, 8 Jul 2007 21:17:27 +0400 From: Andrey Chernov To: "Sean C. Farley" , Robert Watson , freebsd-current , Michal Mertl Message-ID: <20070708171727.GA90490@nagual.pp.ru> Mail-Followup-To: Andrey Chernov , "Sean C. Farley" , Robert Watson , freebsd-current , Michal Mertl References: <20070704235630.GA42227@nagual.pp.ru> <20070704215154.O77978@thor.farley.org> <20070705115816.GA50506@nagual.pp.ru> <20070705105922.F98700@thor.farley.org> <20070707130859.GA96605@nagual.pp.ru> <20070707131359.GB96605@nagual.pp.ru> <20070707133102.C14065@thor.farley.org> <20070707191835.GA4368@nagual.pp.ru> <20070707205410.B14065@thor.farley.org> <20070708020940.GA80166@nagual.pp.ru> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20070708020940.GA80166@nagual.pp.ru> User-Agent: Mutt/1.5.16 (2007-06-09) Cc: Subject: Re: Environment handling broken in /bin/sh with changes to {get,set,put}env() X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 08 Jul 2007 17:17:31 -0000 On Sun, Jul 08, 2007 at 06:09:40AM +0400, Andrey Chernov wrote: > On Sat, Jul 07, 2007 at 09:03:59PM -0500, Sean C. Farley wrote: > > > > Surprisingly, keeping the pointers saved time even if calling setenv(). > > Ok. It feels like time to commit comes :) Hmm. I just think a bit more and feel worry about that place in the merge code: *equals = '\0'; if (setenv(*env, equals + 1, 1) == -1) return (-1); *equals = '='; because it modifies memory which may be treated like const one. Consider following scenario: getenv() is not thread-safe, but may be called by thread-safe app if it is sure no other *env() calls in progress. In the same time another thread of this app use environ directly say for exec(), assuming it is const. In the middle of that getenv() modifies environ by *equals = '\0'; Could you please make setenv() wrapper like that to avoid modifying merged environ in the middle? __lsetenv(str, str_len, value) -- http://ache.pp.ru/