From nobody Sat Oct 24 20:18:36 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1791480175; cv=none; d=zohomail.com; s=zohoarc; b=iFU1tF831UPQT5EJ0NUkkr8HJYLH1W6iubh6SrQbmQhWWziL/mwqfeLb0YrSpsBQBoyOtFwmzThdmThevma8KUmyYhS8xjlNK+sKv122npfoCmfDmYR3/mt9pFXxZ5B8axAhH9IpRCzjmIXxN0VAcQiWMZltxk7Znkum7aoEWHo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791480175; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=6FINO3ZvotFa/f+NXQD3gMY8DPBa7K6t5CB8ysYl9Xk=; b=BrgQJ4RMgMHp3pJ3ZrfcqGOIOv1cYvhxo1fhzD1m9b0pHNSSuV7hbuDIwgJurFYb5dzHlGg/jKSH7BTI0dVh0cPs4YPnG0rSfMV0jY9e6XyQt1PF1PVG49RSSSJmcgGbda/spZ8NRbs2Okzd0k14x+g8jaT0w0PnWOwpkWCtkbA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1791480175790887.6391601974747; Thu, 8 Oct 2026 10:22:55 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 5A68C4190C; Thu, 8 Oct 2026 13:22:54 -0400 (EDT) Received: from [172.19.199.16] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 98CE241B93; Thu, 8 Oct 2026 13:20:51 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 1E30C41902; Thu, 8 Oct 2026 13:20:35 -0400 (EDT) Received: from mail-ed1-x530.google.com (mail-ed1-x530.google.com [IPv6:2a00:1450:4864:20::530]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 381563F320 for ; Thu, 8 Oct 2026 13:20:34 -0400 (EDT) Received: by mail-ed1-x530.google.com with SMTP id 4fb4d7f45d1cf-6ae14eecc64so8097797a12.1 for ; Thu, 08 Oct 2026 10:20:34 -0700 (PDT) Received: from tulp.my.domain (2001-1c02-1a15-3000-2727-f7d1-9628-aa81.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:2727:f7d1:9628:aa81]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6b009c6a195sm1821703a12.3.2026.10.08.10.20.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Oct 2026 10:20:32 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791480033; x=1792084833; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=6FINO3ZvotFa/f+NXQD3gMY8DPBa7K6t5CB8ysYl9Xk=; b=tA18thtsQw05lYRbMXp2IPiXxB+XaYt2AB3krjQUjSzp7sQ7CDgTIECLV/XWPRhJk8 4vM95ejYCQN+BaTlSP+8/kf9eTghlvMZ8J25UCPl8HGqWId6tzAflktOBumuVR5jPCT5 PmIkbUv0mz/7NY8G2ofdLq8VT/Me8MkwTp4NsNilM2zAi7efCBA4gMueKkrZNGHkYtY0 6hmetea/KpktAzkdOdEqQDPSLmGJ3kA3N4rq2crBaQ7qD4xRmncC53lnpTF/BDrpEv33 nLAFpVZzHIOjV768g1H5zM1cXSqpGAYNN3l/mqtK/tgMcp1iABXH5ztKEdJMXfZaXYhX BLVw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791480033; x=1792084833; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=6FINO3ZvotFa/f+NXQD3gMY8DPBa7K6t5CB8ysYl9Xk=; b=OBMPM0zmjmo9U1X8WaGJK+03D5gHY3tAnjVUh0UaaL67yNl241QsNy7JQ+yxTQEgdv Pd4ZpFIzq/JjonegpCQcsv3LW0lnVI/SZPZFx6BhmyBMTcuerebSnKlaXjVoDc49iKnC jApfWG4sfjJ4fHun+WhMgAEEcY7iCU8wyHoz2l9nRJdtjrRocJaWrqo60vCdGTA0iBRB ihIZOHpWXaa/pQc7z8mTkeT62hUB37yFbcb8G71o/3V1TPysZpKMVQ3j8qASMHdSzzHn YZVJee1LPjaAGhAFHph6j4khgFk0mn6gKaraYzCfwv+Muwb/8zwXF4K2ZkLOqcfYgTn6 pVUA== X-Gm-Message-State: AFq9FYL7RqYjgVXI/n8ulm0M1RwWsFch7IykiRfCAiL2J8oXuyF3gO3o 6/L6AvlGvpFNPWSxyNJOUcx7DypcgQwY0zMEG4DCbkRfkAhHoh2yBWSXU2wXyMBd X-Gm-Gg: AYBFou0NhA8XbvKlvcGN4uUveXpxX+gucahbl1aPprBKnoYvsgQ07nYjO6Hk1I86X26 N0HZhiy8Uuw27V47PRP+K3xc8WX9arU3O5kllC7gxBgiAPj623iCns9vi0RYPJZJEfZSRU8W5Bq kI0shaSlQ56saTH0Nfiw1lQ9mgWd1c4eoB48NMbqubU5mR/Wy6d9OqIHMeLeF6UF4caPKdE/iKd WD6X33t/toztUFDr90a3/vK7kz8M/aLfw+SNuvExttexrOHdERzkKCpMsw3phijFfEkVJta/1fH Zgqm7FENxc6gWp8CDd3HqZJ+GlzoYvkyToa3N2EKMdZAaKhu3b7NlLlA+9SgzbDV4vDE5pMFQr2 cXOWZW+He3qUr/K7E8Pk9CiqrBGUZY7SBJMNeKtt4Ad+rcwuT4XFbPgc/A9t4etUSWaBHrEP1Tu vk9S68YO9UpZ63OfowYE42tOQyCU/8ysvZ5SzIjNVuOdCPa1xhNQ9p8sWfrQ7kraOx525YHl1cB +gKbvTdPZ2Pi2GfnBWdQsSHGr4s7XCSeEh4L3JAoLu1l4ptR1P+/BbbhReffDxeDa1QdCnEhDwA C0rXX1yT X-Received: by 2002:a05:6402:2809:b0:6ac:689e:ad5f with SMTP id 4fb4d7f45d1cf-6aff37e8c96mr5498494a12.23.1791480032742; Thu, 08 Oct 2026 10:20:32 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 1/4] bhyve: capabilities: use consistent function names Date: Thu, 8 Oct 2026 19:20:04 +0200 Message-ID: <20261008172007.149-2-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261008172007.149-1-bogorodskiy@gmail.com> References: <20261008172007.149-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: YCTZSC6LYST3PPMJ3LQXQQDFJDUHNW2Y X-Message-ID-Hash: YCTZSC6LYST3PPMJ3LQXQQDFJDUHNW2Y X-MailFrom: bogorodskiy@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Roman Bogorodskiy X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1791480176893158500 Content-Type: text/plain; charset="utf-8" Use more consistent camel case function names. No functional changes. Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- src/bhyve/bhyve_capabilities.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c index 85988a2ce8..b321633b23 100644 --- a/src/bhyve/bhyve_capabilities.c +++ b/src/bhyve/bhyve_capabilities.c @@ -315,7 +315,7 @@ bhyveProbeCapsFromSHelp(unsigned int *caps, char *binar= y) } =20 static int -bhyveProbeCapsLPC_Bootrom(unsigned int *caps, char *binary) +bhyveProbeCapsLpcBootrom(unsigned int *caps, char *binary) { return bhyveProbeCapsDeviceHelper(caps, binary, "-l", @@ -373,7 +373,7 @@ virBhyveProbeCaps(unsigned int *caps) if ((ret =3D bhyveProbeCapsFromSHelp(caps, binary))) goto out; =20 - if ((ret =3D bhyveProbeCapsLPC_Bootrom(caps, binary))) + if ((ret =3D bhyveProbeCapsLpcBootrom(caps, binary))) goto out; =20 if ((ret =3D bhyveProbeCapsVNCPassword(caps, binary))) --=20 2.55.0 From nobody Sat Oct 24 20:18:36 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1791480238; cv=none; d=zohomail.com; s=zohoarc; b=e7PSlHJcQYQ2HIluXGHpAFxTzfEi4NpPzYg7531hA3s3Dv2B4Km26GweayhQzFuzlnAUqmzp0kIbp//WkDE4A9hselkFwfMOkfuIYBTZq1dUtoOGJrrohmac+/g4oxCqe9YCqURjpp5R+ReSmfaR+vcwg7ZxbTNPFTnmmqrTgqk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791480238; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=4gaRFR90l1QI9iXHbLY8Zoya0qMYIE3/0QK0jqpnQCY=; b=X8rwP9VrSpkcMjAYPBeIYgSck2OeVpYzYHqgdAyj+6TaaVEzLE/2Laeawf4HuVyhW1xrzTS95mlOkZzO3Edr/mcoXCIKXgCwO0oYI7crn7dJxZg+zkXr7sATz3liPr0VWnxwqO/xj60Ngngk9Vr8EZR6XT+ccyREeQItR6NhP4o= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1791480238721622.9040105123837; Thu, 8 Oct 2026 10:23:58 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 2E6AC419ED; Thu, 8 Oct 2026 13:23:57 -0400 (EDT) Received: from [172.19.199.16] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id 4016D41C01; Thu, 8 Oct 2026 13:20:57 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 6761A41853; Thu, 8 Oct 2026 13:20:35 -0400 (EDT) Received: from mail-ej1-x62a.google.com (mail-ej1-x62a.google.com [IPv6:2a00:1450:4864:20::62a]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id CA94A41853 for ; Thu, 8 Oct 2026 13:20:34 -0400 (EDT) Received: by mail-ej1-x62a.google.com with SMTP id a640c23a62f3a-c2e36c3478aso812342966b.0 for ; Thu, 08 Oct 2026 10:20:34 -0700 (PDT) Received: from tulp.my.domain (2001-1c02-1a15-3000-2727-f7d1-9628-aa81.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:2727:f7d1:9628:aa81]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6b009c6a195sm1821703a12.3.2026.10.08.10.20.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Oct 2026 10:20:32 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791480033; x=1792084833; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=4gaRFR90l1QI9iXHbLY8Zoya0qMYIE3/0QK0jqpnQCY=; b=ggL6Su1oN38xVbvWiXmYgikFeXM7dQB98XfYtodztwCdkaBmZ1vpe2GdUJK4wg/PLJ KOlOWikjhJcZIDrOP2L9aezD3taPouviBhoW3UIYNc98Uq3l0fD0xWimHVzdONZtMHDv 5+V2kqOXmgRsoT1s6mP5etOfDoMMMljG1LBpEB2jggQUaWmdfzf6lIjeon20RVswJ9al KAGFgUoZE8L1El2OxrA3I600lnkmsfAsr/OajKJbUp04FFn4f/wMnM0f2NQ4oJRF4hoQ 9tLAdKHzAYX6JOa9PFSPoc1/cKoX8W/cdr9EFpbKpGzk0IFXaNI6QErssORUodu8LaiW aunw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791480033; x=1792084833; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=4gaRFR90l1QI9iXHbLY8Zoya0qMYIE3/0QK0jqpnQCY=; b=ytE7cxOd4DwbQMnpg6zi9wUxePRk+w9VvaWY277NZ76ERhMqOyfxHrZZ1B/+SD1K2Y uIXo+Y6BPomnG81ou14Q/hRALdoAR3216KC9vkMFyOK8tPUixObFNs2JaX7qzAUhUiTo wI//lxgxcxxRFWYLjFn8ivASwsa00/1abVStfjDkh8a8oPCn6fG0+Cmp2YPZkZZJrItq t9WBzuOkkTJI15ltglpPWu55955teCRFktCAVs9bEkAB0mdpMROn6G5A1XVgkK67P9RG 9/7bWOTDf/760gbGiYX+NhnWe/Dkpnn006vXACIZrEpY7eTUdhViPUxNfT9FTQjxHkw/ 6uRQ== X-Gm-Message-State: AFuF++nKJnqo1Z/ut4YAmQAj7kl1d4c4lg/C0CQE0xzyBzT3E9LlToUd KpeZlx2twT2TtZjI6HocTVC4X821VU6rhVScWwamVLa4w0bG6VyUMc2Y1bAT3J3i X-Gm-Gg: AYBFou3c73gLKQftGdofhmSrjmeYvWLMFDCUsJzr8Le8lrA9MPuP2BlGz3CCkUk49yR Z3qx6ef5nU+opca2dLZtT7q3LiB88S53MSksNWav39HL64mVtvJL+IUhmLYFA2ef47kAe0skJjo DO1Y2H9tlH/NjwA7ElO7e1M200uRMMexPVQ23b59VxeMp/svkM6BLnM/uo0ua10gKJ8nkzd/ceH mxRPTAniKkLSrPdIN2GttJwgLvFXSBUUgZ6j6Idib08aVL36G3shhrKLsjY2uDWDRWukhXuF4N6 pLwLDY4QkbxifTQJc8Pwuz7MY3/uylBEVV+KaD7+OFMmsSMwooREXwqDHI0nJPruLcZsGJfVeuv kuhdkq9Qtk4S99j0DuV+6+aPYJAjeRFMoGERWGGbv2Q0hEed1wO3IKYDI7PTCKVnXkt/59mjFwa X9CAoKX6c6+gE8J0sU+P/X5vUsPr2gX+JQEAFALqYhad1qyzzH2rtHD4S4hqM1eQ7eiarfmRK4I jeVtZKaIZnEwgy+IBxFQbTiumtBnh08NqDJyuBh63m7s3/geW6Scsh8GaEIK3XAvlsEOJiBt9ol S8SeD9uU X-Received: by 2002:a17:907:6d11:b0:c21:9b4b:2690 with SMTP id a640c23a62f3a-c317bd56b5dmr589104666b.17.1791480033250; Thu, 08 Oct 2026 10:20:33 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 2/4] bhyve: capabilities: probe TPM support Date: Thu, 8 Oct 2026 19:20:05 +0200 Message-ID: <20261008172007.149-3-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261008172007.149-1-bogorodskiy@gmail.com> References: <20261008172007.149-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: RZMC2IBQC3AOMT5TGMM43NIAZMCNAL4L X-Message-ID-Hash: RZMC2IBQC3AOMT5TGMM43NIAZMCNAL4L X-MailFrom: bogorodskiy@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Roman Bogorodskiy X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1791480240447158500 Content-Type: text/plain; charset="utf-8" Probe the bhyve binary to determine whether it supports TPM devices. Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- src/bhyve/bhyve_capabilities.c | 15 +++++++++++++++ src/bhyve/bhyve_capabilities.h | 1 + 2 files changed, 16 insertions(+) diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c index b321633b23..1fbee71205 100644 --- a/src/bhyve/bhyve_capabilities.c +++ b/src/bhyve/bhyve_capabilities.c @@ -357,6 +357,18 @@ bhyveProbeCapsRctl(unsigned int *caps) return; } =20 + +static int +bhyveProbeCapsLpcTpm(unsigned int *caps, char *binary) +{ + return bhyveProbeCapsDeviceHelper(caps, binary, + "-l", + "tpm", + "bhyve: invalid lpc device configura= tion 'tpm'", + BHYVE_CAP_LPC_TPM); +} + + int virBhyveProbeCaps(unsigned int *caps) { @@ -381,6 +393,9 @@ virBhyveProbeCaps(unsigned int *caps) =20 bhyveProbeCapsRctl(caps); =20 + if ((ret =3D bhyveProbeCapsLpcTpm(caps, binary))) + goto out; + out: VIR_FREE(binary); return ret; diff --git a/src/bhyve/bhyve_capabilities.h b/src/bhyve/bhyve_capabilities.h index 0302b68e22..9b3163b9ef 100644 --- a/src/bhyve/bhyve_capabilities.h +++ b/src/bhyve/bhyve_capabilities.h @@ -58,6 +58,7 @@ typedef enum { BHYVE_CAP_ACPI =3D 1 << 12, BHYVE_CAP_NUMA =3D 1 << 13, BHYVE_CAP_RCTL =3D 1 << 14, + BHYVE_CAP_LPC_TPM =3D 1 << 15, } virBhyveCapsFlags; =20 int virBhyveProbeGrubCaps(virBhyveGrubCapsFlags *caps); --=20 2.55.0 From nobody Sat Oct 24 20:18:36 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1791480359; cv=none; d=zohomail.com; s=zohoarc; b=n4KXBSLS2ait8HcwOGOlSrbC5n0e0TBTNZZ58t/toUGHh3NMGdUCLwP1ReaHIxHR+zT0n86LAUgDUuKb1dc0LMbla8wox/ebmh1Lu1EEuHA6tRX9ZL8WJXrQasEXA13cD2Ldc8IkY3iDGGhVHVPTCMFALiFKqclS2skywgiq7OM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791480359; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=x2suSKitaUZiX+8NMC7L2delFqmJEyyBodf7rBKlFoE=; b=EI8dqK4o53eE2oCUNVh2uSNa4iS9M7n0US9urfNX4rI+Qs1z3MVWLDM0VOVHgu0HhsV+3fXi8MzutZznn9tewKjyXQ01kk+jILGYfboOoEV4UdCiPMYdnUt4h1J00o2YJPuIVV1Ms+pMAax7+3UvjfrZ8ETQ0wu3+HrPdxwivDY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1791480359446128.4165261836897; Thu, 8 Oct 2026 10:25:59 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 611B6419EE; Thu, 8 Oct 2026 13:25:58 -0400 (EDT) Received: from [172.19.199.16] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id C599241AA1; Thu, 8 Oct 2026 13:21:03 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id A4D833F320; Thu, 8 Oct 2026 13:20:36 -0400 (EDT) Received: from mail-ed1-x52a.google.com (mail-ed1-x52a.google.com [IPv6:2a00:1450:4864:20::52a]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 5D8983F320 for ; Thu, 8 Oct 2026 13:20:35 -0400 (EDT) Received: by mail-ed1-x52a.google.com with SMTP id 4fb4d7f45d1cf-6b1701294d0so562026a12.0 for ; Thu, 08 Oct 2026 10:20:35 -0700 (PDT) Received: from tulp.my.domain (2001-1c02-1a15-3000-2727-f7d1-9628-aa81.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:2727:f7d1:9628:aa81]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6b009c6a195sm1821703a12.3.2026.10.08.10.20.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Oct 2026 10:20:33 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791480034; x=1792084834; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=x2suSKitaUZiX+8NMC7L2delFqmJEyyBodf7rBKlFoE=; b=rBdD5NXbvdeBZ2t1lXNb1pHBkkT4G+hsNm9JnLz9OaTMrQUazHK3e5nds1Pt6UyuYt drGI2iyHGzvjQ4tb9a91i8A+Rxv+WiyIiu5R7k99YECyyy1+v1N2c3JQFrczdON7vhh4 N4FZF2qfJwSC4zceCMxIa8qpYSHBThSAWljrDy0bRHZwfgYMILptg05ljF1ziJTJ0MRV WW+Ib9Wxt4edZBl5mP/teky+P8YPnYLKdW0tPMP2zL78pd740dR7O/7PR5OauYOOcHmG 3BYp/fH0MjF0eMqLlUvrjJHvEzPpj8JCEDissiAs7CgJEFdAvd7SX8FyrUX4cvWwEtZg E4Rg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791480034; x=1792084834; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=x2suSKitaUZiX+8NMC7L2delFqmJEyyBodf7rBKlFoE=; b=DVO0ToahBiH3fpfkjz8T5tUbDi+QoD9rZHKm3NKwwlYYSsmPFTzO5FcOAV3qJIuhH6 QMtsEBUx1qzGVbbFmwLaOtA1LBI6Adrnl8+GffsBRIrlfIeezed8t+U/32K/PguR+d9C xSB9f0lEYDzexBiGOb9Jvu0UPu6xOjkwEooQnDGJNVOsrK/YNlxeoABFGmLyg5DTJpYR vJKpghNdl8hvkl9sQCtIYkpsgzic6FFz6/r1d2mvNj5t9wWnV3LAlJDFshoKmH9YU+dw oxKJxU2pyOijdLo1kcdp0e6sR5eSwxGENBY0IGRNMnh5UljXQ3SUPjuPoWiHzJs01QHE Fr1w== X-Gm-Message-State: AFq9FYIkOxOJ3u5my/8Ml/RYAlZszTVzWj6ZVKHH4tRYQijvKaZORySg kFWMmzc5rnKbf4DRExQwbJv0bYs8bsnArpcijVj7cwqOlWPuKeKmRDwuz9OUkbId X-Gm-Gg: AYBFou00c7GpUFmf/66bWuThZyw8HnZjjKchxyUPpzVFs/BKJTdHVv7ZRJq6d0SX67a 02o6DnoQeK+1ZVNKPtCzlrxKH17AOomAaNz0/TMP0xPdTGEgYOiO02oEz7jqn9B6Iqxguqt87iI CAFbFumMSr+bX93L4hhw7U+pVho5Nfz1bRl2RzyPyh5+po9xRVaGlyYaQlNYLuWzyMhX/w/qKgm DEAJ6a/yQnYbL5I90+KplmvOn0ZWSjFAiM+QX4mda//T0hV45FSfMMD35kDaAe5xYcd4eqvtvxH DZ3/EHskidfoWGl3evErUSudIWjeKlpWU8DJteDpUpB0OEqEQnFs2dHOZyJ+jwo/IqTzNMlNvxj o2o/Q9pzSaStYMTYYV20T8mbR/C8ZniA0uXL67eVKNGbrMD15ppsUfvLI6sgD/nv2il3GVEiiya T5NJY+sD3mfhk7vi1n5PJU/BuqSoKix1t2i3cenu/+KxHZfDUVg+6NlZ184Gldxa4LmBeSmdhIF 1hXE1I7TC8iAoEt/YL3/gPJe+BQQnbDrRUvx6qfZNucmDeu89R2nKXZfii3hlGw8dvgIDo3FAqm AEaFYeqNHg== X-Received: by 2002:a05:6402:4499:b0:6aa:f76d:3727 with SMTP id 4fb4d7f45d1cf-6aff3774cafmr5699386a12.1.1791480033826; Thu, 08 Oct 2026 10:20:33 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 3/4] bhyve: implement TPM support Date: Thu, 8 Oct 2026 19:20:06 +0200 Message-ID: <20261008172007.149-4-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261008172007.149-1-bogorodskiy@gmail.com> References: <20261008172007.149-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: GTGEFUCNIHRHZSTA7TIKMZYRFKCTTOW3 X-Message-ID-Hash: GTGEFUCNIHRHZSTA7TIKMZYRFKCTTOW3 X-MailFrom: bogorodskiy@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Roman Bogorodskiy X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1791480360525158500 Content-Type: text/plain; charset="utf-8" Implement support of the TPM devices for bhyve. Currently, only the "external" backend type is supported. Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- src/bhyve/bhyve_capabilities.c | 10 +++ src/bhyve/bhyve_command.c | 27 ++++++++ src/bhyve/bhyve_domain.c | 3 + .../x86_64/bhyvexml2argv-tpm.args | 12 ++++ .../x86_64/bhyvexml2argv-tpm.ldargs | 4 ++ .../x86_64/bhyvexml2argv-tpm.xml | 28 ++++++++ tests/bhyvexml2argvtest.c | 6 +- tests/domaincapsdata/bhyve_tpm.x86_64.xml | 69 +++++++++++++++++++ tests/domaincapstest.c | 3 + 9 files changed, 161 insertions(+), 1 deletion(-) create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm.args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm.ldargs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm.xml create mode 100644 tests/domaincapsdata/bhyve_tpm.x86_64.xml diff --git a/src/bhyve/bhyve_capabilities.c b/src/bhyve/bhyve_capabilities.c index 1fbee71205..d3565bea29 100644 --- a/src/bhyve/bhyve_capabilities.c +++ b/src/bhyve/bhyve_capabilities.c @@ -121,6 +121,16 @@ virBhyveDomainCapsFill(virDomainCaps *caps, VIR_DOMAIN_CAPS_ENUM_SET(caps->rng.backendModel, VIR_DOMAIN_RNG_BACKEND_RANDOM); } + if (bhyvecaps & BHYVE_CAP_LPC_TPM) { + caps->tpm.supported =3D VIR_TRISTATE_BOOL_YES; + caps->tpm.model.report =3D true; + caps->tpm.backendModel.report =3D true; + + VIR_DOMAIN_CAPS_ENUM_SET(caps->tpm.model, + VIR_DOMAIN_TPM_MODEL_CRB); + VIR_DOMAIN_CAPS_ENUM_SET(caps->tpm.backendModel, + VIR_DOMAIN_TPM_TYPE_EXTERNAL); + } =20 caps->hostdev.supported =3D VIR_TRISTATE_BOOL_YES; caps->features[VIR_DOMAIN_CAPS_FEATURE_IOTHREADS] =3D VIR_TRISTATE_BOO= L_NO; diff --git a/src/bhyve/bhyve_command.c b/src/bhyve/bhyve_command.c index f48d86d6f6..026ec40da8 100644 --- a/src/bhyve/bhyve_command.c +++ b/src/bhyve/bhyve_command.c @@ -263,7 +263,30 @@ bhyveBuildHostdevArgStr(const virDomainDef *def, subsys->u.pci.addr.slot, subsys->u.pci.addr.function); } + return 0; +} + +static int +bhyveBuildTPMArgStr(const virDomainDef *def G_GNUC_UNUSED, + virDomainTPMDef *tpm, + struct _bhyveConn *driver, + virCommand *cmd) +{ + if (!(bhyveDriverGetBhyveCaps(driver) & BHYVE_CAP_LPC_TPM)) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Installed bhyve binary does not support TPM devi= ces")); + return -1; + } + + if (tpm->type !=3D VIR_DOMAIN_TPM_TYPE_EXTERNAL) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("TPM backend is not supported")); + return -1; + } =20 + virCommandAddArg(cmd, "-l"); + virCommandAddArgFormat(cmd, "tpm,swtpm,%s", + tpm->data.external.source->data.nix.path); return 0; } =20 @@ -1313,6 +1336,10 @@ virBhyveProcessBuildBhyveCmd(struct _bhyveConn *driv= er, virDomainDef *def, if (bhyveBuildRNGArgStr(def, def->rngs[i], cmd) < 0) return NULL; =20 + for (i =3D 0; i < def->ntpms; i++) + if (bhyveBuildTPMArgStr(def, def->tpms[i], driver, cmd) < 0) + return NULL; + if (def->namespaceData) { bhyveDomainCmdlineDef *bhyvecmd; =20 diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index 1a19b3f888..93be75d52d 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -115,6 +115,9 @@ bhyveDomainDefNeedsISAController(virDomainDef *def) if (def->ngraphics && def->nvideos) return true; =20 + if (def->ntpms) + return true; + return false; } =20 diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm.args b/tests/= bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm.args new file mode 100644 index 0000000000..9b3b639a94 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm.args @@ -0,0 +1,12 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 1:0,lpc \ +-s 2:0,ahci,hd:/tmp/freebsd.img \ +-s 3:0,virtio-net,faketapdev,mac=3D52:54:00:b9:94:02 \ +-l tpm,swtpm,/var/run/swtpm/tpm \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm.ldargs b/test= s/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm.ldargs new file mode 100644 index 0000000000..5905f4b3e6 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm.xml b/tests/b= hyvexml2argvdata/x86_64/bhyvexml2argv-tpm.xml new file mode 100644 index 0000000000..e927d2b378 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm.xml @@ -0,0 +1,28 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + +
+ + + + + +
+ + + + + + + + diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index d00ceab825..58e6d11cec 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -202,7 +202,8 @@ mymain(void) BHYVE_CAP_FBUF | BHYVE_CAP_XHCI | \ BHYVE_CAP_CPUTOPOLOGY | BHYVE_CAP_SOUND_HDA | \ BHYVE_CAP_VNC_PASSWORD | BHYVE_CAP_VIRTIO_9P | \ - BHYVE_CAP_NVME | BHYVE_CAP_NUMA; + BHYVE_CAP_NVME | BHYVE_CAP_NUMA | \ + BHYVE_CAP_LPC_TPM; =20 DO_TEST("base"); DO_TEST("bootorder"); @@ -309,6 +310,9 @@ mymain(void) DO_TEST("memtune"); DO_TEST_FAILURE("memtune-unsupported-params"); DO_TEST("sysinfo-smbios"); + DO_TEST("tpm"); + driver.bhyvecaps &=3D ~BHYVE_CAP_LPC_TPM; + DO_TEST_FAILURE("tpm"); =20 /* Address allocation tests */ DO_TEST("addr-single-sata-disk"); diff --git a/tests/domaincapsdata/bhyve_tpm.x86_64.xml b/tests/domaincapsda= ta/bhyve_tpm.x86_64.xml new file mode 100644 index 0000000000..72ed457650 --- /dev/null +++ b/tests/domaincapsdata/bhyve_tpm.x86_64.xml @@ -0,0 +1,69 @@ + + /usr/sbin/bhyve + bhyve + x86_64 + + + + /foo/bar + /foo/baz + + pflash + + + yes + + + + + + + + + + + + + disk + cdrom + + + virtio + sata + + + + + + vnc + + + + + + + tpm-crb + + + external + + + + + tcp + nmdm + + + + + + + + + + + diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c index ec2ac8cb36..b3e9ff7051 100644 --- a/tests/domaincapstest.c +++ b/tests/domaincapstest.c @@ -530,6 +530,9 @@ mymain(void) =20 bhyve_caps |=3D BHYVE_CAP_FBUF; DO_TEST_BHYVE("fbuf", "/usr/sbin/bhyve", &bhyve_caps, VIR_DOMAIN_VIRT_= BHYVE); + + bhyve_caps |=3D BHYVE_CAP_LPC_TPM; + DO_TEST_BHYVE("tpm", "/usr/sbin/bhyve", &bhyve_caps, VIR_DOMAIN_VIRT_B= HYVE); #endif /* WITH_BHYVE */ =20 return ret =3D=3D 0 ? EXIT_SUCCESS : EXIT_FAILURE; --=20 2.55.0 From nobody Sat Oct 24 20:18:36 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1791480467; cv=none; d=zohomail.com; s=zohoarc; b=Kntq6LeyarC8K64sUx94o0F76L5hHQybfOE8IDzejkIgu5CYLmr/xH9+iJjQHXwU3Qm3un2GAP6wIWUSXINl9vtZt8Di03PJDVU74R2bv5FgHEEuZgyhF0u8nWna5k9RB4oHnRZuikoVwFbJ2P5gDxy7OB1qXJktRfrH0p8Fpt0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1791480467; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=iB9x43rKNDyNW/uSy3JDSfsP4mocGRv08QCDhbQvY6A=; b=D6Nr7494zq4QGDzIWE9PTESnM4FwFBA0dDX6H87zF8lWnJ4Vj2pqg4ykPAo+kH4ArWsj7vNquh2zG915NQ8G/SJLEd76ceJVf04jyr7/neGxtLA7Oy9zLejCpyCOhdeIDS6KNyVpqefsghpeaATCcMdNaZmVwyqTb3KTooxPyAA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [38.145.34.151]) by mx.zohomail.com with SMTPS id 1791480467222576.3413040267654; Thu, 8 Oct 2026 10:27:47 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id C88A741904; Thu, 8 Oct 2026 13:27:45 -0400 (EDT) Received: from [172.19.199.16] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id F394241AEE; Thu, 8 Oct 2026 13:21:08 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 022F53F320; Thu, 8 Oct 2026 13:20:37 -0400 (EDT) Received: from mail-ed1-x52e.google.com (mail-ed1-x52e.google.com [IPv6:2a00:1450:4864:20::52e]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 6BA8C41904 for ; Thu, 8 Oct 2026 13:20:36 -0400 (EDT) Received: by mail-ed1-x52e.google.com with SMTP id 4fb4d7f45d1cf-6a601ba6870so9353770a12.0 for ; Thu, 08 Oct 2026 10:20:36 -0700 (PDT) Received: from tulp.my.domain (2001-1c02-1a15-3000-2727-f7d1-9628-aa81.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:2727:f7d1:9628:aa81]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6b009c6a195sm1821703a12.3.2026.10.08.10.20.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Oct 2026 10:20:34 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1791480035; x=1792084835; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=iB9x43rKNDyNW/uSy3JDSfsP4mocGRv08QCDhbQvY6A=; b=eSuwn3inYs0mbU6rPGn4pgsu7X7LRh3bjPzyecpdUZ0hlQgjSYT7NfY5+19VtCXmvu ydZwt3y/B7Zl04is0tNARQDdR7oVggJznih8UQWYYtV0tmv+hhwcO630K6jpewT5qbTR M/rzWfFxduPoljeC4WCGzE8oW1TIzH5vGVXKsrdeHW1veZebS2YhTeVIBgxAsp4spy5B kRQehIXH9qqroTk5rcLr5dpWw8wVfjSErufwWLA865uCfSZ4WD+pBztWqEDFVyXmm2a/ akivaDMHs4eFJzOYpJ6UFx/7hnZcB/nr5TUGosudriE64MSZudP4kQfBnjQ34Vm4NCsI ciqg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1791480035; x=1792084835; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=iB9x43rKNDyNW/uSy3JDSfsP4mocGRv08QCDhbQvY6A=; b=h18DfdMxr1hsq1Wv6GnpxiB84nV0oGo+hohGwFmvds3jGNoW8/FDRxuf6xTKU7TO7y Lxi2nufYfDPBjhd8cVVqhSbHT8lhHQAf+Kv7FnFRbmTQVTWTdpulTQv8YZ14WWwAVaah 8R9iw/NGW0KRctlEw18XDGzv0aCbyBHlqSye8/pbYscCCYh8D8tmEHLAx6uehsvCqjsf xYa66bULUWmDbpplfYJIt5XPOS7oLHzWkm0kurTVbpnweEi0dp0S88aNILnCpUtA8tBT g6tw68Paxrlz2FnaWKavrWDuscrS9qkimF9ilPVriaOig9FySU2XrY0BzMmCYJdsDFNH 007g== X-Gm-Message-State: AFq9FYKyXxi2RuCSAnDxge3gsNH4ZgpWkB1kPBWz6YG/DUj3ER9rgEki rKPVx6IFRwD9amvz1IFIhHL14/YIIQvTIIp2yaW7GC9zcpUNnCeFEFpBr4c00byw X-Gm-Gg: AYBFou11/+QZ7A/J+mr/wGRc2OKtqPUGDwzubGAQjDYswkcEiJMdmBfaFQNC6pNSl2p GftHU18OXvoJBmNTa8fjIomceeAOxJ36ZHc7jYUVBKQqp7GQCoKZ2czhZ86uQXa7GJzPykh0DbK j7kS/4dAuU14jRcSOrwPWkMMq/Jwfmvo4g9cnWWu+eRUd5bRmOAUzmGgO3JNroH4OE7x2nK0pXl hr8iOzPbYDRcm/8ClH7glbNWDOn8a3MxMDXmiChg8LAxb3sF5+CAIs8kAjBGR1RRfFU2xf8ehC4 zt/ZkO32QVcb4p4Loqd9gNeWbNaQ53/7WfUlNrERiOtUd2ZhtY9xVN9N/IiPHfS54/4zNGB4DpX 436lpM07eFLleo5GTHQQ4U7vXoPg7AYGvwoqKN9ffGPcQvRJeIK0W1+zCTicDnq243KCj+eI5zN RRyKsQMM+y51fZp4HsQkqJg4IlGRFDfBklruTBkAJT9022yhVVsuYudPn19CiDLIQY+RRg3iV8R IiS69OaNBVrV1R8O8wFJHsefuTtaxEyMPU0ktrkAnmtngI9bomKx9YfDswLkC8FCsncqeb3qMMU bvSlMJd3DX2RSi5pPDI= X-Received: by 2002:a05:6402:4541:b0:6ac:72dc:c3c5 with SMTP id 4fb4d7f45d1cf-6aff45a7b0amr4492137a12.30.1791480035013; Thu, 08 Oct 2026 10:20:35 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH 4/4] bhyve: domain: validate TPM devices Date: Thu, 8 Oct 2026 19:20:07 +0200 Message-ID: <20261008172007.149-5-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20261008172007.149-1-bogorodskiy@gmail.com> References: <20261008172007.149-1-bogorodskiy@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: E3GGOCJ4J7KXSL6FLHWTR4C4UIVGXWM7 X-Message-ID-Hash: E3GGOCJ4J7KXSL6FLHWTR4C4UIVGXWM7 X-MailFrom: bogorodskiy@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Roman Bogorodskiy X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1791480468579158500 Content-Type: text/plain; charset="utf-8" Add TPM device validation: - Accept only the external TPM backend supported by bhyve. - Accept only one TPM device as bhyve does not support more than one. - Do not accept UNIX socket paths with commas as commas are used to delimit options in bhyve. - Accept only the CRB model as it's the only one supported by bhyve. Also, explicitly set model to CRB when it's not specified. Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- src/bhyve/bhyve_domain.c | 35 +++++++++++++++- .../x86_64/bhyvexml2argv-tpm-comma-path.xml | 16 ++++++++ .../x86_64/bhyvexml2argv-tpm-crb.args | 12 ++++++ .../x86_64/bhyvexml2argv-tpm-crb.ldargs | 4 ++ .../x86_64/bhyvexml2argv-tpm-crb.xml | 28 +++++++++++++ .../bhyvexml2argv-tpm-invalid-model.xml | 16 ++++++++ .../bhyvexml2argv-tpm-multiple-devices.xml | 21 ++++++++++ tests/bhyvexml2argvtest.c | 4 ++ .../x86_64/bhyvexml2xmlout-tpm.xml | 41 +++++++++++++++++++ tests/bhyvexml2xmltest.c | 4 ++ 10 files changed, 180 insertions(+), 1 deletion(-) create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-comma-= path.xml create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-crb.ar= gs create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-crb.ld= args create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-crb.xml create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-invali= d-model.xml create mode 100644 tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-multip= le-devices.xml create mode 100644 tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-tpm.xml diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index 93be75d52d..e0004e6dab 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -311,6 +311,11 @@ bhyveDomainDeviceDefPostParse(virDomainDeviceDef *dev, dev->data.video->type =3D VIR_DOMAIN_VIDEO_TYPE_GOP; } =20 + if (dev->type =3D=3D VIR_DOMAIN_DEVICE_TPM && + dev->data.tpm->model =3D=3D VIR_DOMAIN_TPM_MODEL_DEFAULT) { + dev->data.tpm->model =3D VIR_DOMAIN_TPM_MODEL_CRB; + } + if (dev->type =3D=3D VIR_DOMAIN_DEVICE_CHR && dev->data.chr->source->type =3D=3D VIR_DOMAIN_CHR_TYPE_NMDM) { virDomainChrDef *chr =3D dev->data.chr; @@ -521,11 +526,33 @@ bhyveDomainDeviceDefValidate(const virDomainDeviceDef= *dev, case VIR_DOMAIN_DEVICE_SHMEM: case VIR_DOMAIN_DEVICE_SMARTCARD: case VIR_DOMAIN_DEVICE_SOUND: - case VIR_DOMAIN_DEVICE_TPM: case VIR_DOMAIN_DEVICE_VIDEO: case VIR_DOMAIN_DEVICE_VSOCK: case VIR_DOMAIN_DEVICE_WATCHDOG: break; + + case VIR_DOMAIN_DEVICE_TPM: + if (dev->data.tpm->type !=3D VIR_DOMAIN_TPM_TYPE_EXTERNAL) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Only 'external' TPM device backend is suppor= ted")); + return -1; + } + + if (dev->data.tpm->model !=3D VIR_DOMAIN_TPM_MODEL_DEFAULT && + dev->data.tpm->model !=3D VIR_DOMAIN_TPM_MODEL_CRB) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("TPM model '%1$s' is not supported by bhyve"), + virDomainTPMModelTypeToString(dev->data.tpm->mo= del)); + return -1; + } + + if (virStringHasChars(dev->data.tpm->data.external.source->data.ni= x.path, + ",")) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("Commas (',') are not allowed in UNIX socket = paths")); + return -1; + } + break; } =20 return 0; @@ -600,6 +627,12 @@ bhyveDomainDefValidate(const virDomainDef *def, } } =20 + if (def->ntpms > 1) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", + _("bhyve only supports a single TPM device")); + return -1; + } + if (def->nhostdevs && !def->mem.locked) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", _("using passthrough devices requires locking guest= memory")); diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-comma-path.xm= l b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-comma-path.xml new file mode 100644 index 0000000000..a12466d743 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-comma-path.xml @@ -0,0 +1,16 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + + + + diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-crb.args b/te= sts/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-crb.args new file mode 100644 index 0000000000..9b3b639a94 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-crb.args @@ -0,0 +1,12 @@ +bhyve \ +-c 1 \ +-m 214 \ +-u \ +-H \ +-P \ +-s 0:0,hostbridge \ +-s 1:0,lpc \ +-s 2:0,ahci,hd:/tmp/freebsd.img \ +-s 3:0,virtio-net,faketapdev,mac=3D52:54:00:b9:94:02 \ +-l tpm,swtpm,/var/run/swtpm/tpm \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-crb.ldargs b/= tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-crb.ldargs new file mode 100644 index 0000000000..5905f4b3e6 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-crb.ldargs @@ -0,0 +1,4 @@ +bhyveload \ +-m 214 \ +-d /tmp/freebsd.img \ +bhyve diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-crb.xml b/tes= ts/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-crb.xml new file mode 100644 index 0000000000..76f690a6d6 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-crb.xml @@ -0,0 +1,28 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + +
+ + + + + +
+ + + + + + + + diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-invalid-model= .xml b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-invalid-model.xml new file mode 100644 index 0000000000..634aa4d9f1 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-invalid-model.xml @@ -0,0 +1,16 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + + + + diff --git a/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-multiple-devi= ces.xml b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-multiple-devices= .xml new file mode 100644 index 0000000000..4a7160b695 --- /dev/null +++ b/tests/bhyvexml2argvdata/x86_64/bhyvexml2argv-tpm-multiple-devices.xml @@ -0,0 +1,21 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 1 + + hvm + + + + + + + + + + + + + + diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index 58e6d11cec..679467fe72 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -311,6 +311,10 @@ mymain(void) DO_TEST_FAILURE("memtune-unsupported-params"); DO_TEST("sysinfo-smbios"); DO_TEST("tpm"); + DO_TEST("tpm-crb"); + DO_TEST_FAILURE("tpm-comma-path"); + DO_TEST_FAILURE("tpm-invalid-model"); + DO_TEST_FAILURE("tpm-multiple-devices"); driver.bhyvecaps &=3D ~BHYVE_CAP_LPC_TPM; DO_TEST_FAILURE("tpm"); =20 diff --git a/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-tpm.xml b/tes= ts/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-tpm.xml new file mode 100644 index 0000000000..2a75a723db --- /dev/null +++ b/tests/bhyvexml2xmloutdata/x86_64/bhyvexml2xmlout-tpm.xml @@ -0,0 +1,41 @@ + + bhyve + df3be7e7-a104-11e3-aeb0-50e5492bd3dc + 219136 + 219136 + 1 + + hvm + + + + destroy + restart + destroy + + + + + +
+ + + +
+ + +
+ + + + + +
+ + + + + + + + diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c index 336278ce1c..be3459b200 100644 --- a/tests/bhyvexml2xmltest.c +++ b/tests/bhyvexml2xmltest.c @@ -155,6 +155,10 @@ mymain(void) DO_TEST_FAILURE("virtio-console-invalid-name"); DO_TEST_FAILURE("virtio-console-invalid-path"); DO_TEST_FAILURE("sata-disk-invalid-serial"); + DO_TEST_DIFFERENT("tpm"); + DO_TEST_FAILURE("tpm-comma-path"); + DO_TEST_FAILURE("tpm-invalid-model"); + DO_TEST_FAILURE("tpm-multiple-devices"); =20 /* Address allocation tests */ DO_TEST_DIFFERENT("addr-single-sata-disk"); --=20 2.55.0