{"id":23393,"url":"https://patchwork.libcamera.org/api/patches/23393/?format=json","web_url":"https://patchwork.libcamera.org/patch/23393/","project":{"id":1,"url":"https://patchwork.libcamera.org/api/projects/1/?format=json","name":"libcamera","link_name":"libcamera","list_id":"libcamera_core","list_email":"libcamera-devel@lists.libcamera.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20250519122352.1675360-2-julien.vuillaumier@nxp.com>","date":"2025-05-19T12:23:52","name":"[v3,1/1] libcamera: process: Pass stderr and reserve stdin and stdout fds","commit_ref":null,"pull_url":null,"state":"accepted","archived":false,"hash":"6acd4fdb23762632c45d8b5760a5e4025c0901c4","submitter":{"id":190,"url":"https://patchwork.libcamera.org/api/people/190/?format=json","name":"Julien Vuillaumier","email":"julien.vuillaumier@nxp.com"},"delegate":null,"mbox":"https://patchwork.libcamera.org/patch/23393/mbox/","series":[{"id":5183,"url":"https://patchwork.libcamera.org/api/series/5183/?format=json","web_url":"https://patchwork.libcamera.org/project/libcamera/list/?series=5183","date":"2025-05-19T12:23:51","name":"libcamera: process: Pass stderr and reserve stdin and stdout fds","version":3,"mbox":"https://patchwork.libcamera.org/series/5183/mbox/"}],"comments":"https://patchwork.libcamera.org/api/patches/23393/comments/","check":"pending","checks":"https://patchwork.libcamera.org/api/patches/23393/checks/","tags":{},"headers":{"Return-Path":"<libcamera-devel-bounces@lists.libcamera.org>","X-Original-To":"parsemail@patchwork.libcamera.org","Delivered-To":"parsemail@patchwork.libcamera.org","Received":["from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id CEA0DBD78E\n\tfor <parsemail@patchwork.libcamera.org>;\n\tMon, 19 May 2025 12:24:37 +0000 (UTC)","from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id 7F76468D79;\n\tMon, 19 May 2025 14:24:37 +0200 (CEST)","from EUR05-AM6-obe.outbound.protection.outlook.com\n\t(mail-am6eur05on20613.outbound.protection.outlook.com\n\t[IPv6:2a01:111:f403:2612::613])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 6253368B6C\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tMon, 19 May 2025 14:24:35 +0200 (CEST)","from AM9PR04MB8147.eurprd04.prod.outlook.com\n\t(2603:10a6:20b:3e0::22)\n\tby AM9PR04MB7489.eurprd04.prod.outlook.com (2603:10a6:20b:281::15)\n\twith Microsoft SMTP Server (version=TLS1_2,\n\tcipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8746.30;\n\tMon, 19 May 2025 12:24:34 +0000","from AM9PR04MB8147.eurprd04.prod.outlook.com\n\t([fe80::eace:e980:28a4:ef8a]) by\n\tAM9PR04MB8147.eurprd04.prod.outlook.com\n\t([fe80::eace:e980:28a4:ef8a%7]) with mapi id 15.20.8722.027;\n\tMon, 19 May 2025 12:24:33 +0000"],"Authentication-Results":["lancelot.ideasonboard.com; dkim=pass (2048-bit key;\n\tunprotected) header.d=nxp.com header.i=@nxp.com header.b=\"DPIN928k\";\n\tdkim-atps=neutral","dkim=none (message not signed)\n\theader.d=none;dmarc=none action=none header.from=nxp.com;"],"ARC-Seal":"i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n\tb=SjW6FyQzRtouZ4zf9iwm9k0RuRTiitnk28aJd2bxnL/+sQPK+NXmXqNd6+yLLPe1Rcd9chf/OJQlFyFkDzSEw8gfZjRGQYquLlpU/Nu8niVMOUgpq4PnGqh3iDrWkGwqlZ/aQbu8yd6wtNmkkP/asU1cSn6fXzFGMNcRWsRvZ3GGARXW6INH7BOW6x0bv55yw3OaSa+CmnHBmyENskOWIKdw3YhFWOMCTJjoSWcwYXfnLPxhQbvtAxZfk1lYSG2dCdK4Q/5Y1NcPKD09B585JAxP+HiyVkGC4sF2ZlacRC5XsPU36YcDIJTAiZzYjkxYz9SUC2250Pf4fFczgcwilQ==","ARC-Message-Signature":"i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n\ts=arcselector10001;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;\n\tbh=+kDfd5YBpxk7CHXEXpUtVZyyhCoqhU0PLfMLA0zCwLk=;\n\tb=J0zpwG5glOM8Uqt7S5YRj9c0qwPJ2zjHc/o//LEiE7NFJ0GRruC11RwILyLYKOgM3K8WOmnpoHIvxacOk6ofiNvqowBY4CXVwvqiVphNgzrqGPct9kWTdh8xzUFZuogk5HR/wyutVDB9foo9kOe/zpwrqaBuGbVFkvPGz3w9dQ+HgypFBQBHFwx62uyrnL1WySGX1xx/SA7vwg+oDSPzvJUguN1MiE/R3NTzCALY194V3A2Y9lud7tJA9BApzYy8QEFFRyPCKCnvfxQn/LsXaiWkCDYPon5ltGWfugRnzA/3Nk/Y5qu03v0K8i6Ez8o6Rw8QY4yGkN1iUkA0bXzDIg==","ARC-Authentication-Results":"i=1; mx.microsoft.com 1; spf=pass\n\tsmtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com;\n\tdkim=pass header.d=nxp.com; arc=none","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1;\n\th=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n\tbh=+kDfd5YBpxk7CHXEXpUtVZyyhCoqhU0PLfMLA0zCwLk=;\n\tb=DPIN928kiTztU/L3wat18c/C2z7XuHl7l7hCC6QSQWhS058tYG8cLDieR6yF4NGMiPJhFYtw4Im/hJEc3f8WfnSPcEC7rdbJyn9pvmYwNivWbGrLndDhMLo/5XT9eWzdZNHmvXQdCHZGzI2vB0d4eHVDnIJLXWk/R4U0UTL/mnbS83xQ8N+PtiiLkTUnpW7X4T7XsAeWpsiOEhBEazuEehVyRQphoAtoimCstilZt7k6JBC9FuWNDDorYWKxV6qysJmnoenUo3ub9qbsthaRIBJjDNr3kIxPoJ3jaiDye+OnvKhCICLQlHDnQqwPopQ1Ev3dobaHxZGgXOrdQeK79g==","From":"Julien Vuillaumier <julien.vuillaumier@nxp.com>","To":"libcamera-devel@lists.libcamera.org,\n\tbarnabas.pocze@ideasonboard.com","Cc":"Julien Vuillaumier <julien.vuillaumier@nxp.com>","Subject":"[PATCH v3 1/1] libcamera: process: Pass stderr and reserve stdin and\n\tstdout fds","Date":"Mon, 19 May 2025 14:23:52 +0200","Message-Id":"<20250519122352.1675360-2-julien.vuillaumier@nxp.com>","X-Mailer":"git-send-email 2.34.1","In-Reply-To":"<20250519122352.1675360-1-julien.vuillaumier@nxp.com>","References":"<20250519122352.1675360-1-julien.vuillaumier@nxp.com>","Content-Transfer-Encoding":"8bit","Content-Type":"text/plain","X-ClientProxiedBy":"AM8P191CA0020.EURP191.PROD.OUTLOOK.COM\n\t(2603:10a6:20b:21a::25) To AM9PR04MB8147.eurprd04.prod.outlook.com\n\t(2603:10a6:20b:3e0::22)","MIME-Version":"1.0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"AM9PR04MB8147:EE_|AM9PR04MB7489:EE_","X-MS-Office365-Filtering-Correlation-Id":"ca2ae528-d0c5-4f91-ae85-08dd96d01cd3","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"BCL:0;\n\tARA:13230040|52116014|376014|1800799024|366016|38350700014; ","X-Microsoft-Antispam-Message-Info":"7VRG2aDuyKToST01SSmeXi7fk3orqd0ce7pXxwZG3cZ87PUBjtDoEZfXykhT+rectW1WaCkoZNEVX7Op95Pc/4Km2KMIatdFyjf1rkoTWECRZ6EgUJpacqa5QxlyC2UbwjBxXBGMrNHSf0hzrcIYLStumVrtw2ypUwOJ+sORNry6EphTedM8SwQi/ygS/8bGpX+TBncQAy01fDXC9Ya+yX54rij5bm3/5qec7c8RRC5t9+DKIGbwtE+xQ5gv56MSBfNzeyvfwn0IakySdN2rkLDwrgPJcP6uc1NhDVkyysVFtEpnOT2VvGqGSyJWT4cksnp1m2OueeE/malanDTipiIGGxpbjxBkPimdmAirMYjnbjpfkUiHpgNHbmf7qTEwb+gVxqT63dBnCON5N0smgzLdgZ6sE4s9kIGE9Tl2VS5iu6l14VyCXmkmz6eV4Uqdcu5ux+JDU4JKTuEOVXfdtCL8SpGNwwmnME2t3pfBB/0N0Kq/9pq+QAGMaXJVWj0Cnf6dM9O4W+FpbotzKwNMy0io3OvUMXAm/wdVqca/lxcRjvKvvPrvhYYHYOpyfBqbzqK9jDGNOu23nmBLbIrRmEGJgbNJD2KkYq+ORtaz/nE+0hXzDqO5x5xE1KJrHX5po/smk1onAFZuq4p49qUv3JSfxsCmDTO7GurkGzxpU5zpDEPRXDxtY6d8oCzDawBrQmF3O+iOMket5k9do8HINXZSj1RXIpwFhErpf1Hdrt2bTH+NGhcE6ED3lAia/xbd4JyhhUAlrGHbhpuNqLpTVMUO1MlJgfaGvwEClHW2kb1/zGcBnCQQ8rpRmOVgaZXDi9aavtb5KIk3gCAXamRa4kJFZ5JmaIp64cliOgMIjyCNWM2dfkI5FBruOMbESCQWR8qgvZ1uSCMW0unqrZmV3IogwYb6p8t9sF9I4GrHo41pdlm8EUVZAa28XStxW/1kPC1GE3DSXC9GLsNbv1j1xxijsEQzwazVDHWFHHs0yYdMvItp8aqrQNk1oziwdZhgQ5OVlLf1ZlR0S1zi+2yHcRMTphXo8wKfLYuZ6HcUEh3UrQB6t9UABSbP8pwH7gwGSmQyB5O+uhEmoY8ciAQBGdPr5Hi0rqOwxzItVRo3ryfJIlasOXJz/ZP5SSTKOdlUrLqj/XLWiEU2KK0iuwgsqrEV6OklxezFDxntSM08tFsMhhsv8o5ch13+hyzGGe/EHqxxA97p1oyxagJN3LA0aEOZFMdrePiLOUlRPLd0oKN7mfYzVoVd5BRNq1bSOyGCuB+Xz8fKpcn9gS9RDUyCRC93hMTNS3GIH55+eloRu7NHXxP3nGAZfLfBska2QLG3zJJEay0n8+9VrZvSJyDzaVV4st/QFNQAlMy8xS7aCT+yvjInZd7RpzqDHI7s1algx1AP4jONy8HBu+yIeLcmpwdnDy7SV2JgzsZ+gEdgMcuIylimheV1ySpV6kXtc6QYYfaokFH+Neev/kZNm486Og==","X-Forefront-Antispam-Report":"CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;\n\tIPV:NLI; SFV:NSPM; H:AM9PR04MB8147.eurprd04.prod.outlook.com; PTR:;\n\tCAT:NONE; \n\tSFS:(13230040)(52116014)(376014)(1800799024)(366016)(38350700014);\n\tDIR:OUT; SFP:1101; ","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"LrrAVxZEQ1USg0S36iVSgb1BE6Lm/JO/raePPM+68AfCbzHQm2eJPGfZJqXpKtonUnNkqi9rTBuE8/nZ5Jo9ec2ILjdVYWhA4nFH+TOMDeRVJdFgXn9oAIHivkKyssgT2UR1ZNrLkYew49n1V0G35fZkwA2LRYfzQhfETADGKLupRX6qSocpioNiwu+W+pevd1wlceZdgl3kHMMwEo+eSXxS9T4F8BbD5HeObRAePznHuF+N82KMPPxCTyVoVgu8OMDtH8Y1Hb0Uc6LiC1l5d9viyIkhNPnkAnpdIpHcL8qsMSdDHufva7jt6XivtAbWypMH5kazYqv49BBs/v8p7j//Gi0VQTQGVjcs/fQTeSXUl8plr3DkDFzAQ+V8QKpgc+yCoTMuUfniXblyQ/aaD3V4/CG89AEokrbcfKybelUy6QyUhARSMEPg/knJCs9IuzOjMC+2ad/BvqlXQdTi/act8NG1LrbqPKYZH0a1uE5C/qlhcx5/nvr1UesYBic8c4Ilt23E+eukCnDbR57nMXI5op2KJ2H0cTbHN+OaQe4Xik16apMLX4NEJ93dKHowfKTqPChSk4Mwrwqd/zaSlsqChN3iz6lKXfIX6UCHi/PKmLWlVev/mqWdUaQbMlMRF1tDImR3ISF43Ru5PtV9toyLkLMYpennlj+MTGI2II50hgVE67iBYwvbTPXo1s9PdPt5Y7IvocrOM4bOOuLqOLZrxyfwlSSF43BsAYn+51/gYfwudb1n7F3nlIq2NlsyLp/Xqrmnw3LYEOjT1DQ7dGy4pkZtzz0qHnrEb0d0VQSjJPaKyC1IIuSWF7pA+UYywSPIh3jqaXywSEDlLCGPBwvNgr5qT7joRsdwL8RPi8pgdtbqooy2qT5JMpxy+3C8ETiRopdNk/O285W3kkEG6xz0r/39vq1EPUI2naO66gu3SnZEIozuhSz7MZ9gos/m3xX2ZgYuANiphuBPwDs7iBE/Io2EQvcMqni8jBLLVl3e2U9fk+xFL3K6oEasdVpU6BVxLgK3nrMJef1/1gmlL4DGckvGYNBpglX3+cX4rX2s9EiTOksf5VSNPEFRDnYhL/I1n/YRLldwDCgTxATJaR/6GcHdJKOdDUlXXaloWKnLqLEUoPu+n+z6q5H5nk27WyjbFD202bgP2jgZa2ck1EdkiHfNYjy03qSqAAX0ij7sPivOdIGZ3ZCryE6zP7w4fS5Zq4xNpb6d26SKnErGckCYgiRkZGe1F64aLuL/p/saqX04uwWt87pi984r5Ex4llVk62kwQ1IKsgJhZsXDGTbIkyjDsLBgfSo/TdkUPLhm5APaIPH2oefz0qKwvnNzuSf6+fs4kE7L0fKld1dTPkWRa8xFnKwSfDaG0zbOFQapzB2OsYJA0G3bxMnSaia+NnKNOwuTXwQNpBGpVaqr5yeBGOr5nGqz39ZJy50mRwyWntaGvequoty4rm65ek+dmr5UONeYcwxGfUQSSbmAENzcZBX63muNMZpKcKullzVQihEWCqqWg5aS4z3UqHV0uSgphsBKFF4z1by5fUHzbQZYHJEzqcfAWYcT1VdnsBhg6CkaDzqfwgQrhhA9WGHQp0ZpYfvbHgBJcpPuWYpTug==","X-OriginatorOrg":"nxp.com","X-MS-Exchange-CrossTenant-Network-Message-Id":"ca2ae528-d0c5-4f91-ae85-08dd96d01cd3","X-MS-Exchange-CrossTenant-AuthSource":"AM9PR04MB8147.eurprd04.prod.outlook.com","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"19 May 2025 12:24:33.8834\n\t(UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"686ea1d3-bc2b-4c6f-a92c-d99c5c301635","X-MS-Exchange-CrossTenant-MailboxType":"HOSTED","X-MS-Exchange-CrossTenant-UserPrincipalName":"eS4uveyZ/NDssVBtqWK1QTOMr1lCnOmKQWLEJj564mPXR5GUwaRtYJIpGOGhVzLGmC0LsDXUncsFT+aH9XMkIC4aFio3VQAWG5M3Nc1Syk8=","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"AM9PR04MB7489","X-BeenThere":"libcamera-devel@lists.libcamera.org","X-Mailman-Version":"2.1.29","Precedence":"list","List-Id":"<libcamera-devel.lists.libcamera.org>","List-Unsubscribe":"<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>","List-Archive":"<https://lists.libcamera.org/pipermail/libcamera-devel/>","List-Post":"<mailto:libcamera-devel@lists.libcamera.org>","List-Help":"<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>","List-Subscribe":"<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>","Errors-To":"libcamera-devel-bounces@lists.libcamera.org","Sender":"\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"},"content":"When a child process is started from Process::start(), the file\ndescriptors inherited from the parent process are closed, except\nthe ones explicitly listed in the fds[] argument.\n\nOne issue is that the file descriptors for stdin, stdout and stderr\nbeing closed, the subsequent file descriptors created by the child\nprocess will reuse the values 0, 1 and 2 that are now available.\nThus, usage of printf(), assert() or alike may direct its output\nto the new resource bound to one of these reused file descriptors.\nThe other issue is that the child process can no longer log on\nthe console because stderr has been closed.\n\nTo address the 2 issues, Process:start() is amended as below:\n- Child process inherits from parent's stderr fd in order to share\nthe same logging descriptor\n- Child process stdin, stdout and stderr fds are bound to /dev/null\nif not inherited from parent. That is to prevent those descriptors\nto be reused for any other resource, that could be corrupted by\nthe presence of printf(), assert() or alike.\n\nSigned-off-by: Julien Vuillaumier <julien.vuillaumier@nxp.com>\n---\n src/libcamera/process.cpp | 16 +++++++++++++++-\n 1 file changed, 15 insertions(+), 1 deletion(-)","diff":"diff --git a/src/libcamera/process.cpp b/src/libcamera/process.cpp\nindex 68fad327..fa92f58c 100644\n--- a/src/libcamera/process.cpp\n+++ b/src/libcamera/process.cpp\n@@ -259,7 +259,21 @@ int Process::start(const std::string &path,\n \t\tif (isolate())\n \t\t\t_exit(EXIT_FAILURE);\n \n-\t\tcloseAllFdsExcept(fds);\n+\t\tstd::vector<int> v(fds);\n+\t\tv.push_back(STDERR_FILENO);\n+\t\tcloseAllFdsExcept(v);\n+\n+\t\tconst auto tryDevNullLowestFd = [](int expected, int oflag) {\n+\t\t\tint fd = open(\"/dev/null\", oflag);\n+\t\t\tif (fd < 0)\n+\t\t\t\texit(EXIT_FAILURE);\n+\t\t\tif (fd != expected)\n+\t\t\t\tclose(fd);\n+\t\t};\n+\n+\t\ttryDevNullLowestFd(STDIN_FILENO, O_RDONLY);\n+\t\ttryDevNullLowestFd(STDOUT_FILENO, O_WRONLY);\n+\t\ttryDevNullLowestFd(STDERR_FILENO, O_WRONLY);\n \n \t\tconst char *file = utils::secure_getenv(\"LIBCAMERA_LOG_FILE\");\n \t\tif (file && strcmp(file, \"syslog\"))\n","prefixes":["v3","1/1"]}