Received: by 10.192.165.156 with SMTP id m28csp451311imm; Mon, 16 Apr 2018 03:09:28 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/OvpVY360RSS1sTqh6OQ9FfkzeHDm/g5qILhDYeyWKOmdYRx0/L1c8Tq3Qsl2/6imwnKdo X-Received: by 10.99.143.77 with SMTP id r13mr12226032pgn.375.1523873368825; Mon, 16 Apr 2018 03:09:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523873368; cv=none; d=google.com; s=arc-20160816; b=IMsXwpZJtj1yCMzoBnU4zAPhdpuoX6QMd7XRzg4JGszOKFjPoGpK2LpJeLGqkKbdoc OMR76AOVKP1wh13bP7LKnWovYmofrftUmSCNNUT9kyrPIFz1INVdHAW1f6pakG7C75az GxoXZeTvXQWtREFvJdxyS93RwYhCtZP5oAg98Nm0bdsOfLQJ05TUjAJdwN7mYm+uXdG2 /IjrbStGlfoRSWh9hcmOQ4dr5uLwMqzQ14N57zazkM2WQfb5G5DfGpEIr1mBtbQ5OpKJ POPdjK5BZzuw/qqn8TB7Cyx4wA57O380hwIePpbJc45TM5OZuts8vUCxXIlcJpNPoRGU 1Nzw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=rYa299GI6U0VmR8L4w1yD5xYPrnlB8FV/4/BHwKVUM0=; b=DJlEKRBNuwDp59EK6moS9KB2zZG2UD57kM5dc521Lc6DwqwvUcmDHkopZxUV27o6Ym TE5JAK2q3fSBt2O6rSg1aSSI5saFCY2FSpoMnuGt2MDIukmP/bhjHA3x7VCmqe/AD4dk oxBTZh1xPw9KhX1Cb/AmOJ+YoJz3ETlRG6Ai54yo6uWH/hE43iVuw2SduAjjB9rzE4G0 CjsGWvhnu513cEpikfJB0l5gP38dmyFGtah+v52kcO+TkqyuxqoG3GtDZB1Xe/FNiTD0 Ml6fm8Z3mDOMxHHKesZtnKSB7k5BzASH5p5aVnatsD3+N/+p/d+Jne8j8H336ECzsbgf dlnA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id be3-v6si11072854plb.75.2018.04.16.03.09.14; Mon, 16 Apr 2018 03:09:28 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752924AbeDPKHk (ORCPT + 99 others); Mon, 16 Apr 2018 06:07:40 -0400 Received: from mx2.suse.de ([195.135.220.15]:57170 "EHLO mx2.suse.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752067AbeDPKHj (ORCPT ); Mon, 16 Apr 2018 06:07:39 -0400 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (charybdis-ext.suse.de [195.135.220.254]) by mx2.suse.de (Postfix) with ESMTP id 21AC0AD0C; Mon, 16 Apr 2018 10:07:37 +0000 (UTC) Date: Mon, 16 Apr 2018 12:07:36 +0200 From: Michal Hocko To: Jann Horn Cc: "Michael Kerrisk (man-pages)" , John Hubbard , linux-man , Andrew Morton , Linux-MM , lkml , Linux API Subject: Re: [PATCH] mmap.2: MAP_FIXED is okay if the address range has been reserved Message-ID: <20180416100736.GG17484@dhcp22.suse.cz> References: <13801e2a-c44d-e940-f872-890a0612a483@nvidia.com> <9c714917-fc29-4d12-b5e8-cff28761a2c1@gmail.com> <20180413064917.GC17484@dhcp22.suse.cz> <20180413160435.GA17484@dhcp22.suse.cz> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.9.4 (2018-02-28) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri 13-04-18 18:17:36, Jann Horn wrote: > On Fri, Apr 13, 2018 at 6:05 PM, Jann Horn wrote: > > On Fri, Apr 13, 2018 at 6:04 PM, Michal Hocko wrote: > >> On Fri 13-04-18 17:04:09, Jann Horn wrote: > >>> On Fri, Apr 13, 2018 at 8:49 AM, Michal Hocko wrote: > >>> > On Fri 13-04-18 08:43:27, Michael Kerrisk wrote: > >>> > [...] > >>> >> So, you mean remove this entire paragraph: > >>> >> > >>> >> For cases in which the specified memory region has not been > >>> >> reserved using an existing mapping, newer kernels (Linux > >>> >> 4.17 and later) provide an option MAP_FIXED_NOREPLACE that > >>> >> should be used instead; older kernels require the caller to > >>> >> use addr as a hint (without MAP_FIXED) and take appropriate > >>> >> action if the kernel places the new mapping at a different > >>> >> address. > >>> >> > >>> >> It seems like some version of the first half of the paragraph is worth > >>> >> keeping, though, so as to point the reader in the direction of a remedy. > >>> >> How about replacing that text with the following: > >>> >> > >>> >> Since Linux 4.17, the MAP_FIXED_NOREPLACE flag can be used > >>> >> in a multithreaded program to avoid the hazard described > >>> >> above. > >>> > > >>> > Yes, that sounds reasonable to me. > >>> > >>> But that kind of sounds as if you can't avoid it before Linux 4.17, > >>> when actually, you just have to call mmap() with the address as hint, > >>> and if mmap() returns a different address, munmap() it and go on your > >>> normal error path. > >> > >> This is still racy in multithreaded application which is the main point > >> of the whole section, no? > > > > No, it isn't. I could have been more specific, sorry. > mmap() with a hint (without MAP_FIXED) will always non-racily allocate > a memory region for you or return an error code. If it does allocate a > memory region, it belongs to you until you deallocate it. It might be > at a different address than you requested - Yes, this all is true. Except the atomicity is guaranteed only for the syscall. Once you return to the userspace any error handling is error prone and racy because your mapping might change under you feet. So... > in that case you can > emulate MAP_FIXED_NOREPLACE by calling munmap() and treating it as an > error; or you can do something else with it. > > MAP_FIXED_NOREPLACE is just a performance optimization. This is not quite true because you get _your_ area or _an error_ atomically which is not possible with 2 syscalls. -- Michal Hocko SUSE Labs