From nobody Mon Jun 23 20:39:00 2025 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4bR0Kw6g01z5ymSR; Mon, 23 Jun 2025 20:39:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R10" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4bR0Kw4G5Bz3ndP; Mon, 23 Jun 2025 20:39:00 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1750711140; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8T1Zcaa3keI6jgJPw5WcbAYyR+KeL+WYS8RgDODc5lM=; b=IEsXCjl5DVOMlYy5AhkjHse+PyJTX6UMKCjyyaYDxvR3J9QrhoWP2j8N++2Fax7wRK2Spr 5gZXEv1B7tyvg0T43yvsDgcH6FHAGJ+r1ZQwUnXzt+SSyhFwb7NHcLLta/wu1EYgfBYQrE meoqFnVGDapxkcE7tO1Fv1547eVdpebdaPEWZ66J2Jf/eXYqbblqOJY5pw7VVbEr9dYOl8 By/Dl/eWHjnLhoUnH8BSH9ouuMhSWIU7HDrpTcBqzHYgIrLUJdHR07IkpQ1ZV5zoZlbFgJ d2/fo4VO5xQ2vFKdYy4Lwu5GtSsrvFc4KJyuXm6FHGbj4vg7p2hdxslYiUpnZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1750711140; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=8T1Zcaa3keI6jgJPw5WcbAYyR+KeL+WYS8RgDODc5lM=; b=DtLF6ZPb1TmX9CFos2YscSch2SrPrDQxvac6ks271ErgZTwdotS1ESMA2BF0h+H3W6CV2G wXsfZJLLM2MYb1YXFNx1Y7HZT97Wp5U0X4eduUZ9bXgy3p0tM2/5rQ9MvDyh40453elZPv 1xbQNiC52S0eHe5AJRbd0Y8wX+Qkb2QnDV3pMhsYZfK0kTrU2N62QnG/B8LOBB8yuLpGPz PK4qH3dkN7ZHM6OCsOKgJjydDu2n8YyOayEMe6Ie5zdqhNw8aatLV6QMSr/3T+oRbFxONZ HoR7ZOoMO+laIyeKQyMaPQUD/o5nLrwxqWb/tu+7RTJH4EmPBHoRqzuOJKIVFQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1750711140; a=rsa-sha256; cv=none; b=ruVfq6C6PTto4PZwXDemwwpmHw4F4JBeG68jwuaobXJlvClLss5iQ4dsp1b0N8MnitfjtX +JphId0akiReKyHJ+oJ5kh/OlfWiBXDynQ6FdfetL0D2RP7MKoIVoAGWw4dqyiCSCSBYGS jRwcn/PdIxfbCveF24fTFzmkRT4bhIXOsphL0RKCMt0XSwTlMZEhPC/Jw0MACWkrx8gLGn 4w/XyNis3hKNmUWYKFpKrruCPaykwNLC7vwRGSzi17yaiqxANIFAMstLjaKS82I7j9pnRD m9HWDPyaE7kR5OaKFONfLfmmsmB0awrQFATHrov8Q7jczHfnsMpmcAJ0XmBOXg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4bR0Kw3jpxz36b; Mon, 23 Jun 2025 20:39:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 55NKd04O023327; Mon, 23 Jun 2025 20:39:00 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 55NKd0v2023324; Mon, 23 Jun 2025 20:39:00 GMT (envelope-from git) Date: Mon, 23 Jun 2025 20:39:00 GMT Message-Id: <202506232039.55NKd0v2023324@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling =?utf-8?Q?Sm=C3=B8rgrav?= Subject: git: 0e0df1fc6753 - main - cp: Fix improper use of O_PATH. List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0e0df1fc6753567c0ba1dd81859073b5d59a5a33 Auto-Submitted: auto-generated The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=0e0df1fc6753567c0ba1dd81859073b5d59a5a33 commit 0e0df1fc6753567c0ba1dd81859073b5d59a5a33 Author: Dag-Erling Smørgrav AuthorDate: 2025-06-23 20:38:34 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2025-06-23 20:38:50 +0000 cp: Fix improper use of O_PATH. This does not appear to make any practical difference at the moment, but technically `O_PATH` means “I'm not going to use this descriptor for any other purposes than vnode lookups”, so using it to read the directory's ACLs is improper and might fail in the future. Fixes: 82fc0d09e8625 Sponsored by: Klara, Inc. Reviewed by: kevans Differential Revision: https://reviews.freebsd.org/D50984 --- bin/cp/tests/cp_test.sh | 18 ++++++++++++++++++ bin/cp/utils.c | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/bin/cp/tests/cp_test.sh b/bin/cp/tests/cp_test.sh index f06238c89367..d5268ed4c4c9 100755 --- a/bin/cp/tests/cp_test.sh +++ b/bin/cp/tests/cp_test.sh @@ -183,6 +183,7 @@ atf_test_case pflag_acls pflag_acls_body() { mkdir dir + ln -s dir lnk echo "hello" >dir/file if ! setfacl -m g:staff:D::allow dir || ! setfacl -m g:staff:d::allow dir/file ; then @@ -204,12 +205,21 @@ pflag_acls_body() atf_check cp -rp dir dst4 atf_check -o match:"group:staff:-+D-+" getfacl dst4 atf_check -o match:"group:staff:-+d-+" getfacl dst4/file + # source is a link without -p + atf_check cp -r lnk dst5 + atf_check -o not-match:"group:staff:-+D-+" getfacl dst5 + atf_check -o not-match:"group:staff:-+d-+" getfacl dst5/file + # source is a link with -p + atf_check cp -rp lnk dst6 + atf_check -o match:"group:staff:-+D-+" getfacl dst6 + atf_check -o match:"group:staff:-+d-+" getfacl dst6/file } atf_test_case pflag_flags pflag_flags_body() { mkdir dir + ln -s dir lnk echo "hello" >dir/file if ! chflags nodump dir || ! chflags nodump dir/file ; then @@ -231,6 +241,14 @@ pflag_flags_body() atf_check cp -rp dir dst4 atf_check -o match:"nodump" stat -f%Sf dst4 atf_check -o match:"nodump" stat -f%Sf dst4/file + # source is a link without -p + atf_check cp -r lnk dst5 + atf_check -o not-match:"nodump" stat -f%Sf dst5 + atf_check -o not-match:"nodump" stat -f%Sf dst5/file + # source is a link with -p + atf_check cp -rp lnk dst6 + atf_check -o match:"nodump" stat -f%Sf dst6 + atf_check -o match:"nodump" stat -f%Sf dst6/file } recursive_link_setup() diff --git a/bin/cp/utils.c b/bin/cp/utils.c index 3e669b4b513d..cfc0f0f12603 100644 --- a/bin/cp/utils.c +++ b/bin/cp/utils.c @@ -458,7 +458,7 @@ preserve_dir_acls(const char *source_dir, const char *dest_dir) { int source_fd = -1, dest_fd = -1, ret; - if ((source_fd = open(source_dir, O_PATH)) < 0) { + if ((source_fd = open(source_dir, O_DIRECTORY | O_RDONLY)) < 0) { warn("%s: failed to copy ACLs", source_dir); return (-1); }