Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp803094ybl; Fri, 6 Dec 2019 06:31:04 -0800 (PST) X-Google-Smtp-Source: APXvYqxEPvQYULcXe567F6V81tJsvxdEMrGo7xtzkJEhcW1w8CM29KcjhZ+j94N97ctpmWs7phfa X-Received: by 2002:a05:6808:2c9:: with SMTP id a9mr13004769oid.129.1575642664084; Fri, 06 Dec 2019 06:31:04 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1575642664; cv=none; d=google.com; s=arc-20160816; b=NYJ+uwVkTKxdlclqMAb82F7TdSSlyTpcex5kCKRVWauRuAFEWQRwLkUrLV1fGtKQ6S fpofJ7Lc+dDQN4NgjPr4/GpOZsRXOpDat+I9xqBSsy1azz6aVVixs/EAOZhkyc4q9IJC exV00xlKBg6ZyapLW2O5F3eAGWqUrD8cRd6lHXF85ckDsMZujnrelROXmL6jumZoLYuS c7PJmLDCxh32c3WE5PgYQCc+FqOYMNYWyk86p45yeFcUhYalzk4P1FtElwbz8hZwS1O9 6BE3NV0leQsVnGf5d2JxNdmmPOVjWOJmVC5Tu1FWtUpSAuWFJ42bc46cNxReNRKx5V9o ITvQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=/Y8R7jZNlES4vimAGPXH5ebL5xrMqauazsqZFuHgr+A=; b=u6Nh0EYYVCxT8arnbh1hwq/ZS0ikSSCExgncam5rOFD5wxSXsdGEfno4pGnVDHgMeU yJH6I6c/7ayzPoLF/uIs7xbEQ7HB8rxoYqqMlmkTHb2YuT5jsTgHPBkQ4TOi1fJqNv0F hcyxQvpdZUYCvEj8kwNH/hZZk8HqrbQj4skVcU/6gTzlmNITxWGSVheIkDIOAkrieKZO jkin3qMOSIBNcaPpdYsaa2RI+VvZJXbvWn+/fuc7QKUPbkNu3kbrVpQARwpiK/U1c1H1 reuPHWGhUnXfhiBDU7+D2yhQu8R8psDu/+vOOYBCAzj8RDF67ocn21ttHku6N2ILVO8h LHDQ== 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 v76si6851034oif.207.2019.12.06.06.30.51; Fri, 06 Dec 2019 06:31:04 -0800 (PST) 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 S1726403AbfLFOaZ (ORCPT + 99 others); Fri, 6 Dec 2019 09:30:25 -0500 Received: from mout-p-102.mailbox.org ([80.241.56.152]:11100 "EHLO mout-p-102.mailbox.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726245AbfLFOaY (ORCPT ); Fri, 6 Dec 2019 09:30:24 -0500 Received: from smtp1.mailbox.org (smtp1.mailbox.org [IPv6:2001:67c:2050:105:465:1:1:0]) (using TLSv1.2 with cipher ECDHE-RSA-CHACHA20-POLY1305 (256/256 bits)) (No client certificate requested) by mout-p-102.mailbox.org (Postfix) with ESMTPS id 47Tw3f0MqYzKmbF; Fri, 6 Dec 2019 15:30:22 +0100 (CET) X-Virus-Scanned: amavisd-new at heinlein-support.de Received: from smtp1.mailbox.org ([80.241.60.240]) by spamfilter04.heinlein-hosting.de (spamfilter04.heinlein-hosting.de [80.241.56.122]) (amavisd-new, port 10030) with ESMTP id d-2sNcd_mFNb; Fri, 6 Dec 2019 15:30:18 +0100 (CET) From: Aleksa Sarai To: Michael Kerrisk Cc: linux-api@vger.kernel.org, libc-alpha@sourceware.org, linux-man@vger.kernel.org, linux-kernel@vger.kernel.org, Aleksa Sarai Subject: [PATCH man-pages 2/2] path_resolution.7: update to mention openat2(2) features Date: Sat, 7 Dec 2019 01:29:31 +1100 Message-Id: <20191206142931.28138-2-cyphar@cyphar.com> In-Reply-To: <20191206142931.28138-1-cyphar@cyphar.com> References: <20191206141338.23338-1-cyphar@cyphar.com> <20191206142931.28138-1-cyphar@cyphar.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Signed-off-by: Aleksa Sarai --- man7/path_resolution.7 | 56 ++++++++++++++++++++++++++++-------------- 1 file changed, 38 insertions(+), 18 deletions(-) diff --git a/man7/path_resolution.7 b/man7/path_resolution.7 index 07664ed8faec..b4a65cc53120 100644 --- a/man7/path_resolution.7 +++ b/man7/path_resolution.7 @@ -29,30 +29,38 @@ path_resolution \- how a pathname is resolved to a file Some UNIX/Linux system calls have as parameter one or more filenames. A filename (or pathname) is resolved as follows. .SS Step 1: start of the resolution process -If the pathname starts with the \(aq/\(aq character, -the starting lookup directory -is the root directory of the calling process. -(A process inherits its -root directory from its parent. -Usually this will be the root directory -of the file hierarchy. -A process may get a different root directory -by use of the +If the pathname starts with the \(aq/\(aq character, the starting lookup +directory is the root directory of the calling process. +A process inherits its root directory from its parent. +Usually this will be the root directory of the file hierarchy. +A process may get a different root directory by use of the .BR chroot (2) -system call. +system call, or may temporarily use a different root directory by using +.BR openat2 (2) +with the +.B RESOLVE_IN_ROOT +flag set. +.PP A process may get an entirely private mount namespace in case it\(emor one of its ancestors\(emwas started by an invocation of the .BR clone (2) system call that had the .B CLONE_NEWNS -flag set.) +flag set. This handles the \(aq/\(aq part of the pathname. .PP -If the pathname does not start with the \(aq/\(aq character, the -starting lookup directory of the resolution process is the current working -directory of the process. -(This is also inherited from the parent. -It can be changed by use of the +If the pathname does not start with the \(aq/\(aq character, the starting +lookup directory of the resolution process is the current working directory of +the process \(em or in the case of +.BR openat (2)-style +system calls, the +.I dfd +argument (or the current working directory if +.B AT_FDCWD +is passed as the +.I dfd +argument). The current working directory is inherited from the parent, and can +be changed by use of the .BR chdir (2) system call.) .PP @@ -91,7 +99,7 @@ Upon error, that error is returned. If the result is not a directory, an .B ENOTDIR error is returned. -If the resolution of the symlink is successful and returns a directory, +If the resolution of the symbolic link is successful and returns a directory, we set the current lookup directory to that directory, and go to the next component. Note that the resolution process here can involve recursion if the @@ -124,6 +132,12 @@ the kernel's pathname-resolution code was reworked to eliminate the use of recursion, so that the only limit that remains is the maximum of 40 resolutions for the entire pathname. +.PP +The resolution of symbolic links during this stage can be blocked by using +.BR openat2 (2), +with the +.B RESOLVE_NO_SYMLINKS +flag set. .SS Step 3: find the final entry The lookup of the final component of the pathname goes just like that of all other components, as described in the previous step, @@ -145,7 +159,7 @@ The path resolution process will assume that these entries have their conventional meanings, regardless of whether they are actually present in the physical filesystem. .PP -One cannot walk down past the root: "/.." is the same as "/". +One cannot walk up past the root: "/.." is the same as "/". .SS Mount points After a "mount dev path" command, the pathname "path" refers to the root of the filesystem hierarchy on the device "dev", and no @@ -154,6 +168,12 @@ longer to whatever it referred to earlier. One can walk out of a mounted filesystem: "path/.." refers to the parent directory of "path", outside of the filesystem hierarchy on "dev". +.PP +Traversal of mount points can be blocked by using +.BR openat2 (2), +with the +.B RESOLVE_NO_XDEV +flag set (though note that this also restricts bind mount traversal). .SS Trailing slashes If a pathname ends in a \(aq/\(aq, that forces resolution of the preceding component as in Step 2: it has to exist and resolve to a directory. -- 2.24.0