From owner-freebsd-hackers@FreeBSD.ORG Mon Nov 2 21:05:59 2009 Return-Path: Delivered-To: freebsd-hackers@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 8755F106566C; Mon, 2 Nov 2009 21:05:59 +0000 (UTC) (envelope-from a_best01@uni-muenster.de) Received: from zivm-exrelay1.uni-muenster.de (ZIVM-EXRELAY1.UNI-MUENSTER.DE [128.176.192.14]) by mx1.freebsd.org (Postfix) with ESMTP id CF7F68FC17; Mon, 2 Nov 2009 21:05:58 +0000 (UTC) X-IronPort-AV: E=Sophos;i="4.44,670,1249250400"; d="scan'208";a="287178683" Received: from zivmaildisp1.uni-muenster.de (HELO ZIVMAILUSER03.UNI-MUENSTER.DE) ([128.176.188.85]) by zivm-relay1.uni-muenster.de with ESMTP; 02 Nov 2009 22:05:57 +0100 Received: by ZIVMAILUSER03.UNI-MUENSTER.DE (Postfix, from userid 149459) id 0E0431B0751; Mon, 2 Nov 2009 22:05:56 +0100 (CET) Date: Mon, 02 Nov 2009 22:05:56 +0100 (CET) From: Alexander Best Sender: Organization: Westfaelische Wilhelms-Universitaet Muenster To: John Baldwin , Alexander Best Message-ID: In-Reply-To: <200911021028.43044.jhb@freebsd.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Cc: freebsd-hackers@freebsd.org Subject: Re: mmap(2) with MAP_ANON honouring offset although it shouldn't X-BeenThere: freebsd-hackers@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Technical Discussions relating to FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 02 Nov 2009 21:05:59 -0000 John Baldwin schrieb am 2009-11-02: > On Friday 30 October 2009 10:38:24 pm Alexander Best wrote: > > John Baldwin schrieb am 2009-10-21: > > > On Wednesday 21 October 2009 11:51:04 am Alexander Best wrote: > > > > although the mmap(2) manual states in section MAP_ANON: > > > > "The offset argument is ignored." > > > > this doesn't seem to be true. running > > > > printf("%p\n", mmap((void*)0x1000, 0x1000, PROT_NONE, MAP_ANON, > > > > -1, > > > > 0x12345678)); > > > > and > > > > printf("%p\n", mmap((void*)0x1000, 0x1000, PROT_NONE, MAP_ANON, > > > > -1, > > > > 0)); > > > > produces different outputs. i've attached a patch to solve the > > > > problem. the > > > > patch is similar to the one proposed in this PR, but should > > > > apply > > > > cleanly to > > > > CURRENT: http://www.freebsd.org/cgi/query-pr.cgi?pr=kern/71258 > > > A simpler patch would be to simply set pos = 0 below the > > > MAP_STACK > > > line if > > > MAP_ANON is set. > > how about the following patch. problem seems to be that pos = 0 > > needs to be > > set before pageoff is being calculated. > I think that that patch is fine, but will defer to alc@. I think he > argued > that any non-zero offset passed to MAP_ANON should fail with EINVAL. thanks. if that's what the POSIX standard requests that's ok. however in that case we need to change the mmap(2) manual, because right now it says in section MAP_ANON: "The offset argument is ignored." which should be changed to something like: "The offset argument must be zero." also if the behaviour of MAP_ANON changes this also changes the semantics of MAP_STACK since it implies MAP_ANON. so we need to decide if MAP_STACK should silently reset any offset value to zero or like MAP_ANON should fail if offset isn't zero in which case the MAP_STACK section of the mmap(2) manual needs to be changed to someting like: "MAP_STACK implies MAP_ANON, and requires offset to be zero." cheers. alex