From owner-freebsd-current@FreeBSD.ORG Tue Sep 16 15:01:25 2008 Return-Path: Delivered-To: current@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 876DB1065677 for ; Tue, 16 Sep 2008 15:01:25 +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 D4BA68FC0A for ; Tue, 16 Sep 2008 15:01:24 +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.3/8.14.3) with ESMTP id m8GF1KdP040215; Tue, 16 Sep 2008 19:01:20 +0400 (MSD) (envelope-from ache@nagual.pp.ru) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=nagual.pp.ru; s=default; t=1221577280; bh=gPiAbVRmLpon5clS7reva8rNT1mra+EGwpzMtQ+ DTfg=; l=1620; h=Date:From:To:Cc:Subject:Message-ID:References: MIME-Version:Content-Type:In-Reply-To; b=ahWSmGtrCwujlro7+zpm+T1rs d5Iu0AwlrRa6mqxI1OxQT4MwYrIGSVc4swv9kLONAheNVyRD/YYtoWFQhJHz4YvEBYk +a/ahmKOuJwxtw4nnDPNQaUEhX4rtDnWDxaKsjgN005qvgpAMrGEjLpAcYw9hBTAJ+S ERv9gPiTJW2Q= Received: (from ache@localhost) by nagual.pp.ru (8.14.3/8.14.3/Submit) id m8GF1K1n040214; Tue, 16 Sep 2008 19:01:20 +0400 (MSD) (envelope-from ache) Date: Tue, 16 Sep 2008 19:01:20 +0400 From: Andrey Chernov To: Attilio Rao Message-ID: <20080916150120.GA40087@nagual.pp.ru> Mail-Followup-To: Andrey Chernov , Attilio Rao , Bob Bishop , current@freebsd.org References: <20080916140319.GA34447@nagual.pp.ru> <20080916144502.GA39765@nagual.pp.ru> <3bbf2fe10809160753o7e5e8a78q7c6bd44c02bfd5c2@mail.gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <3bbf2fe10809160753o7e5e8a78q7c6bd44c02bfd5c2@mail.gmail.com> User-Agent: Mutt/1.5.18 (2008-05-17) Cc: current@freebsd.org Subject: Re: Is fork() hook ever possible? 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: Tue, 16 Sep 2008 15:01:25 -0000 On Tue, Sep 16, 2008 at 04:53:54PM +0200, Attilio Rao wrote: > 2008/9/16, Andrey Chernov : > > On Tue, Sep 16, 2008 at 03:38:16PM +0100, Bob Bishop wrote: > > > Hi, > > > > > > > > On 16 Sep 2008, at 15:03, Andrey Chernov wrote: > > > > > > > I need some sort of fork() hook to detect that pid is changed to re- > > > > stir > > > > ar4random() after that (in the child), simple flag variable with > > > > child's pid is needed. > > > > > > > > Currently OpenBSD does almost that checking getpid() every time > > > > arc4random() called, but it is very slow way to use getpid() syscall > > > > repeatedly, about 12-15 times slower than just arc4random() without > > > > getpid(). > > > > > > > > Any ideas? > > > > > > > > How about something hacky using mmap()/minherit()? > > > > Could you please provide working low cost example to detect that we are in > > the child (pid changed or something else)? Calling getpid() as OpenBSD > > does definitely is very high cost. :( > > An idea would be to implement a shared page between process and system > which exports such informations. > I'm sure we have a SoC project (2007) implementing this and perforce > branches for it, I'm just not sure how far it did end. Please keep in mind that the hook itself must be invisible to user application, we have standard API only - fork() and arc4random() family, no additional setup or functions are possible outside of existen API. I.e. the low cost hack must be completely inside ether the fork() wrapper or arc4random(). -- http://ache.pp.ru/