From nobody Tue Nov 30 02:16:40 2021 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 2091418B1BD2; Tue, 30 Nov 2021 02:16:42 +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 "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4J35ST0vSpz4Vk1; Tue, 30 Nov 2021 02:16:40 +0000 (UTC) (envelope-from git@FreeBSD.org) 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 8C0A65D23; Tue, 30 Nov 2021 02:16:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 1AU2Gekb008232; Tue, 30 Nov 2021 02:16:40 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 1AU2GeeS008231; Tue, 30 Nov 2021 02:16:40 GMT (envelope-from git) Date: Tue, 30 Nov 2021 02:16:40 GMT Message-Id: <202111300216.1AU2GeeS008231@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: a18ddf775744 - main - posix_spawn: add closefrom non-portable action 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: Sender: owner-dev-commits-src-main@freebsd.org X-BeenThere: dev-commits-src-main@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a18ddf775744f31a844fd01fbe90207f7c5e706d Auto-Submitted: auto-generated ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1638238601; 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=fFIqukKd2mQP6HANVWEZpuB2QDA+TE9Pd7gHbJ+50Ow=; b=ZlqRN3o1AlW2G7GpHHpja0KXeGGhwpdD5pICk+W4xbFCtPN5F/jsERhn22KrsZ+UfDm8zx Km2wTqqLN6eV1rQzAsyIK9l8vf9Mai8DPIbUjexyVPdBkTCxpzgFUu+fjAYrbqCnYDKfrL HCXdBipBbwww27x89MH/Q6QalWDqCeXQfIQLAwo+wydgGZb4TrRk39S4lJRsDAJVMsZ7Tp e7EKWO1lWCcHdDQOgel7h10m8/oDbWEweb/LsGysvJTRu2QDMe4co0qMdeScVzb2N35bm5 sryOKfLdHuJ1U8ENXyc0o/DnjbRuHJGQ40Xdt+0ERB7RDV/TO+iyTx64tRA3tA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1638238601; a=rsa-sha256; cv=none; b=iQ4pLE9ZVzhdQhE1jIGG88IGmLECDwg6PN4QKOSEa7YxMVAieC7HNaAt7ow3k+DOyZ6X4h Nzzfl4RAfzcni/PYk11FihXVfVV4zcyWVC8thDwRo7z/4PAKTR2Thie9xblvUI5Oqarj7F 1WeDAI7U5aLOlHLCBAAwis64mEuDrnU/4BRJ2wrS683lsxfcQW5MJgaKInRUv6ojI+cLHb rbFyzuZY6RhtE+q+sh/LcU8EH5n02TLnXvbN0uOGugK+PQITarH2eEMdV3THMi3MiDpJeR XZpE5U0FZDpUnKNI32qiarihl9KAIEzsONNM/HaL+Qw3iyZYojVXMYx0uJ2rxw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none X-ThisMailContainsUnwantedMimeParts: N The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=a18ddf775744f31a844fd01fbe90207f7c5e706d commit a18ddf775744f31a844fd01fbe90207f7c5e706d Author: Konstantin Belousov AuthorDate: 2021-11-27 22:54:16 +0000 Commit: Konstantin Belousov CommitDate: 2021-11-30 01:43:54 +0000 posix_spawn: add closefrom non-portable action Namely posix_spawn_file_actions_addclosefrom_np, in the form it is provided by glibc. Reviewed by: kevans, ngie (previous version) Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D33143 --- include/spawn.h | 2 ++ lib/libc/gen/Symbol.map | 1 + lib/libc/gen/posix_spawn.c | 25 +++++++++++++++++++++++++ 3 files changed, 28 insertions(+) diff --git a/include/spawn.h b/include/spawn.h index 4ba3998a3e90..53373a6c8db8 100644 --- a/include/spawn.h +++ b/include/spawn.h @@ -92,6 +92,8 @@ int posix_spawn_file_actions_addchdir_np(posix_spawn_file_actions_t * __restrict, const char * __restrict); int posix_spawn_file_actions_addfchdir_np(posix_spawn_file_actions_t *, int); +int posix_spawn_file_actions_addclosefrom_np(posix_spawn_file_actions_t *, + int); #endif /* diff --git a/lib/libc/gen/Symbol.map b/lib/libc/gen/Symbol.map index bae2463d99d4..5554c32ab4f2 100644 --- a/lib/libc/gen/Symbol.map +++ b/lib/libc/gen/Symbol.map @@ -437,6 +437,7 @@ FBSD_1.6 { FBSD_1.7 { posix_spawn_file_actions_addchdir_np; + posix_spawn_file_actions_addclosefrom_np; posix_spawn_file_actions_addfchdir_np; sched_getaffinity; sched_setaffinity; diff --git a/lib/libc/gen/posix_spawn.c b/lib/libc/gen/posix_spawn.c index 00d1724a6515..909db9a60a02 100644 --- a/lib/libc/gen/posix_spawn.c +++ b/lib/libc/gen/posix_spawn.c @@ -68,6 +68,7 @@ typedef struct __posix_spawn_file_actions_entry { FAE_CLOSE, FAE_CHDIR, FAE_FCHDIR, + FAE_CLOSEFROM, } fae_action; int fae_fildes; @@ -190,6 +191,9 @@ process_file_actions_entry(posix_spawn_file_actions_entry_t *fae) if (fchdir(fae->fae_fildes) != 0) return (errno); break; + case FAE_CLOSEFROM: + closefrom(fae->fae_fildes); + break; } return (0); } @@ -533,6 +537,27 @@ posix_spawn_file_actions_addfchdir_np(posix_spawn_file_actions_t *__restrict fa, return (0); } +int +posix_spawn_file_actions_addclosefrom_np (posix_spawn_file_actions_t * + __restrict fa, int from) +{ + posix_spawn_file_actions_entry_t *fae; + + if (from < 0) + return (EBADF); + + /* Allocate object */ + fae = malloc(sizeof(posix_spawn_file_actions_entry_t)); + if (fae == NULL) + return (errno); + + fae->fae_action = FAE_CLOSEFROM; + fae->fae_fildes = from; + + STAILQ_INSERT_TAIL(&(*fa)->fa_list, fae, fae_list); + return (0); +} + /* * Spawn attributes */