From nobody Fri Sep 25 23:09:15 2026 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AD2594FDE4F for ; Mon, 7 Sep 2026 17:19:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788801581; cv=none; b=R6ipgXUWYjia03AvN01lcl5HVlXBxNcxHDqDa2ylcJ9mdnrFZpcdFVW9mLlIHEvbK4ZpF5hDJakXSclLKJlRBKL8CHbR3L+ihT5UeWHAveEgT8gLvW5P/Kuadr/rsdzAgOTzkO+2fUeVhjxhWhEUZ1h50OMlYUDAGJiORXNDZWM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788801581; c=relaxed/simple; bh=3aB790zGiVOG/HfZGHcb/tIqTnzy3lfiYNqJ4SlcI7Q=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=YdHc9jCggaxiU0FD7spnsLM1OWVZKz2vXJ7Iqdr4QfvKbnRwoiQmn7ME0JzPb/Ou1puqRbTLC7JtLJ6dj510z9HugnSiaGTz2oxuzAc6EfAqAKV+K5LfXZX2q1XEtBHFevqwxrgeWl8pGqw7ZCOUDD8QJoysp5x+T2RDgDBnnTM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=c5+NQAIt; arc=none smtp.client-ip=209.85.128.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="c5+NQAIt" Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-49d156c917cso5637075e9.1 for ; Mon, 07 Sep 2026 10:19:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788801578; x=1789406378; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=nteL4njDpbIytNAvu2VP8USt+sQ1w/IhgUr/WfH7fOI=; b=c5+NQAItnRJg6iiodjs6EcloBlQ1d3x+4jOPs/oo9HTx6GBG/jNqw4JYr3z+2tEXDE zTpWMYHsiJQhIHoJV6PIOiWL9qqqaJHTXlXLoNtjh+ZAvgmONl74cVl/MhebBkSKjmuj EApXbUh2dz3naDoscK5lbbdnaxd7DHzlSghZtv7eu/P2jZCG0VXFjo4BM5U3Vucy/sB5 KEg2fJTovbDwl0xfN1WAERgBv+Ux4q+sHe/cRUHfkwChSCliJAIS3e/vcAG3lO5MM5Zw NiLnVUKXmEyyfi2uIfXb7eLe6rzjlgNJXo2HQiwWgApvLO+Th09MlbiJnKXUB6HbrTxh 4f+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788801578; x=1789406378; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=nteL4njDpbIytNAvu2VP8USt+sQ1w/IhgUr/WfH7fOI=; b=F2tsrHtKD0eOLf9K2IMg5WWlUCtsyW9cPlLxclJxS5dhCzSs/NDMzqSdJ5mQYMU0N9 U5LlvdyiWBWW5JBd7LI0ruTs8HqFf7AMzH2oHLCymT+ODIHXGnOoYtAx7WKl7FyowQMi 39Y4y3NE2L/hnOkRuL4AenDw/eAlGT7XkywtdtxTdXqKHof36rzqxq39iWRpFvFBe7Vf reCAP1x8qJlWoyRxd4YI/vL3NpZ040h16SHORYfsgBCu99vLUs+MeQ5+JHfYBgCogWwx bRv5ZTmNc5G+U+lf8JvQG0Gg3nZ5ZfyP8Qmk03o2p80o8be1eFJyRebZ4tJS6xzKxAfy j/ow== X-Forwarded-Encrypted: i=1; AKwUvBwIXJlrHUaKbJHvJ1BoK3worHEHDLvj4m121cRrhDmssWRUslekD9cyyu4442ewaTJ3s4KdPHUtudKs4QQ=@vger.kernel.org X-Gm-Message-State: AFuF++mCAzUOTwoYToa/UUt/AHHF9xl4DlGzWJQLF4JjThzxeqQnTRke 6xywQ7sas0L/nW5RyMlCe6zrLmCq0ZcYHgT5PswzlP4McHWrCUVLklFQgcy8or9HSbhvLnQgpbF oguHAfpfuDqx9++k8hfNxjWaiAyegfg== X-Received: from wmpw23.prod.google.com ([2002:a05:600c:997:b0:49d:74b:4e06]) (user=sebastianene job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:4fd6:b0:49b:4eb6:6ffd with SMTP id 5b1f17b1804b1-49d1754ecbfmr25030805e9.5.1788801577617; Mon, 07 Sep 2026 10:19:37 -0700 (PDT) Date: Mon, 7 Sep 2026 17:19:23 +0000 In-Reply-To: <20260907171930.4037166-1-sebastianene@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260907171930.4037166-1-sebastianene@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260907171930.4037166-2-sebastianene@google.com> Subject: [PATCH v9 1/7] KVM: arm64: Forward FFA_NOTIFICATION_BITMAP calls to Trustzone From: Sebastian Ene To: catalin.marinas@arm.com, maz@kernel.org, oupton@kernel.org, fuad.tabba@linux.dev, will@kernel.org Cc: joey.gouly@arm.com, korneld@google.com, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, android-kvm@google.com, mrigendra.chaubey@gmail.com, perlarsen@google.com, sebastianene@google.com, suzuki.poulose@arm.com, vdonnefort@google.com, yuzenghui@huawei.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow FF-A notification bitmap messages to be forwarded to Trustzone from the host kernel driver and enforce the host vmid check. Reviewed-by: Vincent Donnefort Signed-off-by: Sebastian Ene --- arch/arm64/kvm/hyp/nvhe/ffa.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c index a327c2bbb6b6..aa82c58380a8 100644 --- a/arch/arm64/kvm/hyp/nvhe/ffa.c +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c @@ -692,8 +692,6 @@ static bool ffa_call_supported(u64 func_id) case FFA_MEM_DONATE: case FFA_MEM_RETRIEVE_REQ: /* Optional notification interfaces added in FF-A 1.1 */ - case FFA_NOTIFICATION_BITMAP_CREATE: - case FFA_NOTIFICATION_BITMAP_DESTROY: case FFA_NOTIFICATION_BIND: case FFA_NOTIFICATION_UNBIND: case FFA_NOTIFICATION_SET: @@ -878,6 +876,21 @@ static void do_ffa_part_get(struct arm_smccc_1_2_regs = *res, hyp_spin_unlock(&host_buffers.lock); } =20 +static void do_ffa_notif_bitmap(struct arm_smccc_1_2_regs *res, + struct kvm_cpu_context *ctxt) +{ + DECLARE_REG(u32, vmid, ctxt, 1); + struct arm_smccc_1_2_regs *args; + + if (vmid !=3D HOST_FFA_ID) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + + args =3D (void *)&ctxt->regs.regs[0]; + hyp_smccc_1_2_smc(args, res); +} + bool kvm_host_ffa_handler(struct kvm_cpu_context *host_ctxt, u32 func_id) { struct arm_smccc_1_2_regs res =3D {0}; @@ -936,6 +949,10 @@ bool kvm_host_ffa_handler(struct kvm_cpu_context *host= _ctxt, u32 func_id) case FFA_PARTITION_INFO_GET: do_ffa_part_get(&res, host_ctxt); goto out_handled; + case FFA_NOTIFICATION_BITMAP_CREATE: + case FFA_NOTIFICATION_BITMAP_DESTROY: + do_ffa_notif_bitmap(&res, host_ctxt); + goto out_handled; } =20 if (ffa_call_supported(func_id)) --=20 2.55.0.979.g7e5102b832-goog From nobody Fri Sep 25 23:09:15 2026 Received: from mail-ed1-f71.google.com (mail-ed1-f71.google.com [209.85.208.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 429E551FCA7 for ; Mon, 7 Sep 2026 17:19:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.208.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788801582; cv=none; b=sMTWlCN8O3B+9hVzaUQ9UtLgjG3GWo1TxU+hKcvMEQtMMrAKQRv7NdPiwrfl8uiFQrF0xX07XcFFmtccK1jrBTTlR6lORelom7c5h/5/MY5rBW945EuqKA1XYadrbh0PFBQotW+O3kpEpLXaVw2H2bIxnNjBFb6YYyX2EQveBYM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788801582; c=relaxed/simple; bh=2k/WVnGhr9Q5gGIcYxANFK+tJ+UnkdoNdQN+SRoygi4=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=gSyh/2xyzANbVlixN8eYk7dkTYT/+PM56shX6I4We6u26iC38m2U0p8Q///RTP+rXw+JXJb7zspBRa5ofUoBSj4K016pNgvL6cgp/jOlBsERub5vW8hANLAf4d2pIdo/Qzi6GPvIHsUlxqwg/4C3JAQAItampQwFPh9Yg1nUiz4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=flZVnQoj; arc=none smtp.client-ip=209.85.208.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="flZVnQoj" Received: by mail-ed1-f71.google.com with SMTP id 4fb4d7f45d1cf-6a68ca482ccso4096375a12.2 for ; Mon, 07 Sep 2026 10:19:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788801579; x=1789406379; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=t0Sf8m75gFeh91WC+y7QYQ8hJssugbj/b/PWhI9KP38=; b=flZVnQojQIFp6Cw31/KMDzSj7alhjnAL0NNIPYKUa9WqQRNuSSNofXEalVDccYJHkI z2Gw8D5ppHO1jwQQiNztMom7LYDtn6MhrK6tGbUawvl025XfCoqB3iNVTVofLtOMhGW1 O50yQLLdyCLBUssTZExSA5mCCGKAh22rDTGIjHAj2I3WuyKHJ6Mlgf+MFlWWutlmUMgA Sr/Y2WCDykqYeCAmgSfP82gMZBwlUasnbHNR9MEuL0/+Rq/QoLoeT9xSyB9iqTfN1tRQ NKatcEdTQPsZqR3P40nlw7Esq6xPRHDgJeI+MDR/ymPhb4U4SRtXWDYIwM5SdhQZJgFJ 5Dpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788801579; x=1789406379; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=t0Sf8m75gFeh91WC+y7QYQ8hJssugbj/b/PWhI9KP38=; b=K6Au2fJeWNzgJPOQvcfELMqnt1r6Rw0pPGjnwHDerv41VatrdNxMiZ7SLUh+3vgi1j e6IWu2HoCwPaxsYZWYyHeeqrUorpEkxGD50XBVT11k6wPZbvnbdivY5zKg1o/SdUqfNV BHMRNG08tAIZJkOEDvKE6hrzDS9v4s/Gecz2WLSNXg1SLM8P9eL5eICRsl+MvbQ8m1QM J1tYR841sPDW1bOfweCFYDtVSFhIYrg6BGzdF0mORZ78fr+uKTy6wMPXEbcrc/MZlP0z I/rMxEeyQCWwR3dsBAZ9/hL+Hk1e/wHiqYoKtUnMJjqidInFBGP6Yij20loBhehRcU1e 4ihw== X-Forwarded-Encrypted: i=1; AKwUvBzxRvNyECCxCadqp2lmjNDIl6AN5vHrvKxCfPN6fWYVP2W1C8SbNhIxD8p2cUSQ0gJhzNBv+PTXNb0Pvq8=@vger.kernel.org X-Gm-Message-State: AFuF++l9W25LXldWjstRUCR8GTHzZOK2Lb+EzT/mEFMQiU07+C6rtKeb tELqgKi12HGJ1+RrKmctNbVTh0gF54QBQ31v9LwN67KFAyXqpc27jaib5gOQ6PK1bz7ebCDV1VS gv+YcjK2LQ11Y4lFXvk1P/1Qto459wg== X-Received: from edyg17.prod.google.com ([2002:a05:6402:1811:b0:6a6:781e:6d4a]) (user=sebastianene job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6402:13d1:b0:6a8:30a:7ceb with SMTP id 4fb4d7f45d1cf-6a8030a7d90mr5253391a12.32.1788801579063; Mon, 07 Sep 2026 10:19:39 -0700 (PDT) Date: Mon, 7 Sep 2026 17:19:24 +0000 In-Reply-To: <20260907171930.4037166-1-sebastianene@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260907171930.4037166-1-sebastianene@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260907171930.4037166-3-sebastianene@google.com> Subject: [PATCH v9 2/7] KVM: arm64: Support FFA_NOTIFICATION_BIND in host handler From: Sebastian Ene To: catalin.marinas@arm.com, maz@kernel.org, oupton@kernel.org, fuad.tabba@linux.dev, will@kernel.org Cc: joey.gouly@arm.com, korneld@google.com, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, android-kvm@google.com, mrigendra.chaubey@gmail.com, perlarsen@google.com, sebastianene@google.com, suzuki.poulose@arm.com, vdonnefort@google.com, yuzenghui@huawei.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Verify the arguments of the FF-A notification bind call and forward the message to Trustzone. Reviewed-by: Vincent Donnefort Signed-off-by: Sebastian Ene --- arch/arm64/kvm/hyp/nvhe/ffa.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c index aa82c58380a8..89872e12f9d4 100644 --- a/arch/arm64/kvm/hyp/nvhe/ffa.c +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c @@ -42,6 +42,8 @@ */ #define HOST_FFA_ID 0 =20 +#define FFA_NOTIF_RECEIVER_ENDP_MASK GENMASK(15, 0) + /* * A buffer to hold the maximum descriptor size we can see from the host, * which is required when the SPMD returns a fragmented FFA_MEM_RETRIEVE_R= ESP @@ -692,7 +694,6 @@ static bool ffa_call_supported(u64 func_id) case FFA_MEM_DONATE: case FFA_MEM_RETRIEVE_REQ: /* Optional notification interfaces added in FF-A 1.1 */ - case FFA_NOTIFICATION_BIND: case FFA_NOTIFICATION_UNBIND: case FFA_NOTIFICATION_SET: case FFA_NOTIFICATION_GET: @@ -891,6 +892,27 @@ static void do_ffa_notif_bitmap(struct arm_smccc_1_2_r= egs *res, hyp_smccc_1_2_smc(args, res); } =20 +static void do_ffa_notif_bind(struct arm_smccc_1_2_regs *res, + struct kvm_cpu_context *ctxt) +{ + DECLARE_REG(u32, endp_id, ctxt, 1); + DECLARE_REG(u32, flags, ctxt, 2); + struct arm_smccc_1_2_regs *args; + + if (FIELD_GET(FFA_NOTIF_RECEIVER_ENDP_MASK, endp_id) !=3D HOST_FFA_ID) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + + if (flags > 1) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + + args =3D (void *)&ctxt->regs.regs[0]; + hyp_smccc_1_2_smc(args, res); +} + bool kvm_host_ffa_handler(struct kvm_cpu_context *host_ctxt, u32 func_id) { struct arm_smccc_1_2_regs res =3D {0}; @@ -953,6 +975,9 @@ bool kvm_host_ffa_handler(struct kvm_cpu_context *host_= ctxt, u32 func_id) case FFA_NOTIFICATION_BITMAP_DESTROY: do_ffa_notif_bitmap(&res, host_ctxt); goto out_handled; + case FFA_NOTIFICATION_BIND: + do_ffa_notif_bind(&res, host_ctxt); + goto out_handled; } =20 if (ffa_call_supported(func_id)) --=20 2.55.0.979.g7e5102b832-goog From nobody Fri Sep 25 23:09:15 2026 Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 7CB385111BB for ; Mon, 7 Sep 2026 17:19:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.71 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788801584; cv=none; b=sAXKsNOK5HcvOdELAqMGruidIeiBq/HIt9U+TWNXA4iQMzL5rQAiAPGB0lUlrhWxF3achYIsagHoXhK6h5BIAZKvpqxyarETZqDv1PcvYeVloeeHq8mobkovsB293HE6pe76yqcuoCWrQuoX5GuB3oRJRItPAbyiZTGad1IQ9gA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788801584; c=relaxed/simple; bh=AWCUXF43ysfgI41lpMKTvK41BHIZRzQWcWHwmf2PRAA=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=ubEcsARS0i2cjHaZ6MjCSjBofcmZQ/jR4mD84lRe3pZCgUVQ0yoBWMl2Xc/DxneOdUI0dktGpOS0o3xSEq7Ot4lJxBo9THoQzV74hMEc64BvmXanYVSsM5LuV2u4ucuVGSnpn7cj7PW9aNFo3ozSUA/Bo3+FAAqOldRjh600DHQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=HkwApPDs; arc=none smtp.client-ip=209.85.128.71 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="HkwApPDs" Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-4994aebe932so48238165e9.3 for ; Mon, 07 Sep 2026 10:19:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788801581; x=1789406381; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=pNLhfgvrYwznedAczU/yoh7OJ0T71JIKxZfqgfryA8Y=; b=HkwApPDsb4XrUkxxLIOk29ZGyrFqZ9Y4WBA6BfNw+XWwlbDMcyGOJKWeu+FektoC1v +ReZ9SAdzK+7SW2e1dfz+KoXHXJX9v1t/78aFbB6doc2USEQvqsVuvUKD9gVId9XL7Xg sot8wg9IDbSGQeqjOxdOLv4HurnY3CZulgbtulgqDbG9S0Py3rxL8CGXT/N+n48kxBfY kIZvwndR+nl1eo6VCVQDHD5vwsuqzySf/sneY6QvjoRKQTdl1sSSv7OTJ5tJqMODJfHT 2mCXAT9yRU4CebZMlV9x3BiYpR2gDC4PrqINXVOJXc1vlrsdO6cpqagO5b/UcKwtFwaV us3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788801581; x=1789406381; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=pNLhfgvrYwznedAczU/yoh7OJ0T71JIKxZfqgfryA8Y=; b=hDwKCrUEDXx8ZErccFg/V969F004nlGG8B1UmlMRsxzC/j7ahRww2qkq2GsuHPEW98 JZTfgDwJWWaXCCDUceup+42gFHI8aMR3wfkSLz1L3WHBUn5iRTeBaGXAQ9o3MhVnlR5k cglDn4Cw46fIlHv8gnxZky00srjlwEnur/CG2F/yNWec4G4lcUvAa0fq4w+M24OOTOpk wPrP104TbQ1n290tVbJgNxOO18vWcDo8RZYFBQW0DYRKupG9SvG8GxwXhO6jxLGyNCiA KWlECaiMTQXk/lUVoL+EMCa/imDkxKGTZk28ACAvwA73yAxnONGjLIOyd8JCUsHUjnCj Bgaw== X-Forwarded-Encrypted: i=1; AKwUvBzJuBrHsftYUyw0+yZlNqeeRlMFKyCZgNpA7BeffCMZMl6BgluyH6gK4b9V/cmUnZ5n/76XasGFd/9lLrg=@vger.kernel.org X-Gm-Message-State: AFuF++leZtJhdcQ0y15Cj4vUQaJJ3Hkntt8taH2xWN1wWBcp6mwVRZRB shvc7QtNweykP5J1wOGTfZbs/j7HWQKLG0VXmruO+08pllyy4NRQiZruythT5Kkqcr7s7kjhM2X Y4n4r6y020vmDoVmuWg8jFMD/NB0H2Q== X-Received: from wmco24.prod.google.com ([2002:a05:600c:a318:b0:49c:caed:426c]) (user=sebastianene job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:6306:b0:49c:f5c0:aa76 with SMTP id 5b1f17b1804b1-49cf81e366amr589515835e9.5.1788801580595; Mon, 07 Sep 2026 10:19:40 -0700 (PDT) Date: Mon, 7 Sep 2026 17:19:25 +0000 In-Reply-To: <20260907171930.4037166-1-sebastianene@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260907171930.4037166-1-sebastianene@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260907171930.4037166-4-sebastianene@google.com> Subject: [PATCH v9 3/7] KVM: arm64: Support FFA_NOTIFICATION_UNBIND in host handler From: Sebastian Ene To: catalin.marinas@arm.com, maz@kernel.org, oupton@kernel.org, fuad.tabba@linux.dev, will@kernel.org Cc: joey.gouly@arm.com, korneld@google.com, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, android-kvm@google.com, mrigendra.chaubey@gmail.com, perlarsen@google.com, sebastianene@google.com, suzuki.poulose@arm.com, vdonnefort@google.com, yuzenghui@huawei.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Verify the arguments of the FF-A notification unbind call and forward the message to Trustzone. Reviewed-by: Vincent Donnefort Signed-off-by: Sebastian Ene --- arch/arm64/kvm/hyp/nvhe/ffa.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c index 89872e12f9d4..a1ba4463d1ef 100644 --- a/arch/arm64/kvm/hyp/nvhe/ffa.c +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c @@ -694,7 +694,6 @@ static bool ffa_call_supported(u64 func_id) case FFA_MEM_DONATE: case FFA_MEM_RETRIEVE_REQ: /* Optional notification interfaces added in FF-A 1.1 */ - case FFA_NOTIFICATION_UNBIND: case FFA_NOTIFICATION_SET: case FFA_NOTIFICATION_GET: case FFA_NOTIFICATION_INFO_GET: @@ -913,6 +912,27 @@ static void do_ffa_notif_bind(struct arm_smccc_1_2_reg= s *res, hyp_smccc_1_2_smc(args, res); } =20 +static void do_ffa_notif_unbind(struct arm_smccc_1_2_regs *res, + struct kvm_cpu_context *ctxt) +{ + DECLARE_REG(u32, endp_id, ctxt, 1); + DECLARE_REG(u32, reserved, ctxt, 2); + struct arm_smccc_1_2_regs *args; + + if (reserved) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + + if (FIELD_GET(FFA_NOTIF_RECEIVER_ENDP_MASK, endp_id) !=3D HOST_FFA_ID) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + + args =3D (void *)&ctxt->regs.regs[0]; + hyp_smccc_1_2_smc(args, res); +} + bool kvm_host_ffa_handler(struct kvm_cpu_context *host_ctxt, u32 func_id) { struct arm_smccc_1_2_regs res =3D {0}; @@ -978,6 +998,9 @@ bool kvm_host_ffa_handler(struct kvm_cpu_context *host_= ctxt, u32 func_id) case FFA_NOTIFICATION_BIND: do_ffa_notif_bind(&res, host_ctxt); goto out_handled; + case FFA_NOTIFICATION_UNBIND: + do_ffa_notif_unbind(&res, host_ctxt); + goto out_handled; } =20 if (ffa_call_supported(func_id)) --=20 2.55.0.979.g7e5102b832-goog From nobody Fri Sep 25 23:09:15 2026 Received: from mail-wm1-f70.google.com (mail-wm1-f70.google.com [209.85.128.70]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3559352120C for ; Mon, 7 Sep 2026 17:19:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.70 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788801586; cv=none; b=tgW2K2IsvrB8CeDCk9hIw2kRTVkvz48L8iWf9zCjrOCqlbyqHV19n/W7ZwGZS+2XKZiSikCnl6a9vvb7teV/PhuOkL0Cnl5X+af2m4M+9H5UCXXux9twxvFIFX22xzpKb+pQ2E4LVS3U/QvkdBsATu2jVqwXVmEKGoZfWf9rcvA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788801586; c=relaxed/simple; bh=63z8K3Bsh7HYRRQh3b9CFMk8m74jI/5sw5q37ngLLic=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=MXxnHQsTSmU2HMlV06i/NYN9HEGL/8RsvDCk9O2nbp2DJz1v7W38vog7yV4ozA001w072XYiIzC6YYcQbo1V5E607RahJZpvAMjqyK8eSEsJwAL/qLhAyVFcI3MM7TED6YF5cRr/DJBenEAytsNXNafolq09ynXNNjWTx/hBShQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=vLiHIqZz; arc=none smtp.client-ip=209.85.128.70 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="vLiHIqZz" Received: by mail-wm1-f70.google.com with SMTP id 5b1f17b1804b1-49ccfbe060aso25630595e9.0 for ; Mon, 07 Sep 2026 10:19:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788801582; x=1789406382; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=piiRWCJ1kku+wXo8orOGF6kurBcejDUkIGQIzstV9bA=; b=vLiHIqZzmVxbzzNb8SyBTd+FrmjNJHokXS1yWnNxo88C4+Gug0cEWVQ/u9DMg8/2fq a52XprUnXJoulXeL4fhgUEYkIO3Tcxx8fuXIrvEvkLJwLQ+eJJW4NsQaJPLbT+a2Ifdj k67a2bDIorKhqupPmwtq/2o7q044JYNU2kMR2VWK8ExwaevtJyq0Ybr6eeEJ+ZH2pbW1 AVKdjqG4LPR8XtLVFN0FWPg479jMhm11hn979fsVEWSBSQi1k1cFl+WZyUkPB2q5O7rv /BKhFHBFKWFrNXEXd9RnOC1tLeEGuR6eN62FNnulx9vOHMU01um6htWdgf77BJNCyV8S QVhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788801582; x=1789406382; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=piiRWCJ1kku+wXo8orOGF6kurBcejDUkIGQIzstV9bA=; b=ZZR0VMo39s198Oem8ij4ducel6Al+AN/lAdRhQkyhvdb7j3UoZB4uctEipOY9vx8sE lrBpYbQfQbv8MQF9H8VktcdQf9++a8nvhIt37d0xbFKW94t2VhIbLrqkcunmw4+662/T JkoZo84Fo8Lj5Xmmh49K3VMElBHEg9l0bB8pENgFcvet45tAu1pqCOwo1X3WDq4dckUW JGxAymERfadavqpd4sCEIxbW6g3R4mFYqkBDIZ/cD+BWjbtyjMzyboyc3WTXp+3YuCk9 wtVmy7I0XfNwtMnezijS537Qe3tG4bOKQFfAQqrS8UZ9rLQAQO8ujUPoQNH5y5zjkHUj PiRA== X-Forwarded-Encrypted: i=1; AKwUvBwK2Sznzxu4xQYhYeHtabtBKSuXUtjqsGcOl/yBrK/OvVSuTe10PfpGezJ5GBWDPveREgwEEomTSHI/QjU=@vger.kernel.org X-Gm-Message-State: AFuF++k3GNrMaci5WyVW5Qa9fAsVCHBKNL7qxxedheKVOhOk5Us6zRwj M0OyG93NJJWacKOirA/fJhSg4X+CiVctKqWJ+hfxavyMhvOAbhQoD173BTn5DDWjhNC7RezJqaf iRY2Y/YspAPsr6BXagNI1bwbVFWqlRA== X-Received: from wmjx23.prod.google.com ([2002:a05:600c:21d7:b0:49b:96be:bdd]) (user=sebastianene job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600c:c48f:b0:497:fecd:5b00 with SMTP id 5b1f17b1804b1-49cf825d507mr246019025e9.9.1788801581830; Mon, 07 Sep 2026 10:19:41 -0700 (PDT) Date: Mon, 7 Sep 2026 17:19:26 +0000 In-Reply-To: <20260907171930.4037166-1-sebastianene@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260907171930.4037166-1-sebastianene@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260907171930.4037166-5-sebastianene@google.com> Subject: [PATCH v9 4/7] KVM: arm64: Support FFA_NOTIFICATION_SET in host handler From: Sebastian Ene To: catalin.marinas@arm.com, maz@kernel.org, oupton@kernel.org, fuad.tabba@linux.dev, will@kernel.org Cc: joey.gouly@arm.com, korneld@google.com, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, android-kvm@google.com, mrigendra.chaubey@gmail.com, perlarsen@google.com, sebastianene@google.com, suzuki.poulose@arm.com, vdonnefort@google.com, yuzenghui@huawei.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow FF-A notification SET messages to be proxied from the pKVM hypervisor to Trustzone and verify the arguments. Reviewed-by: Vincent Donnefort Signed-off-by: Sebastian Ene --- arch/arm64/kvm/hyp/nvhe/ffa.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c index a1ba4463d1ef..923f32caa04b 100644 --- a/arch/arm64/kvm/hyp/nvhe/ffa.c +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c @@ -43,6 +43,7 @@ #define HOST_FFA_ID 0 =20 #define FFA_NOTIF_RECEIVER_ENDP_MASK GENMASK(15, 0) +#define FFA_NOTIF_SENDER_ENDP_MASK GENMASK(31, 16) =20 /* * A buffer to hold the maximum descriptor size we can see from the host, @@ -694,7 +695,6 @@ static bool ffa_call_supported(u64 func_id) case FFA_MEM_DONATE: case FFA_MEM_RETRIEVE_REQ: /* Optional notification interfaces added in FF-A 1.1 */ - case FFA_NOTIFICATION_SET: case FFA_NOTIFICATION_GET: case FFA_NOTIFICATION_INFO_GET: /* Optional interfaces added in FF-A 1.2 */ @@ -933,6 +933,27 @@ static void do_ffa_notif_unbind(struct arm_smccc_1_2_r= egs *res, hyp_smccc_1_2_smc(args, res); } =20 +static void do_ffa_notif_set(struct arm_smccc_1_2_regs *res, + struct kvm_cpu_context *ctxt) +{ + DECLARE_REG(u32, endp_id, ctxt, 1); + DECLARE_REG(u32, flags, ctxt, 2); + struct arm_smccc_1_2_regs *args; + + if (FIELD_GET(FFA_NOTIF_SENDER_ENDP_MASK, endp_id) !=3D HOST_FFA_ID) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + + if (flags & GENMASK(15, 2)) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + + args =3D (void *)&ctxt->regs.regs[0]; + hyp_smccc_1_2_smc(args, res); +} + bool kvm_host_ffa_handler(struct kvm_cpu_context *host_ctxt, u32 func_id) { struct arm_smccc_1_2_regs res =3D {0}; @@ -1001,6 +1022,9 @@ bool kvm_host_ffa_handler(struct kvm_cpu_context *hos= t_ctxt, u32 func_id) case FFA_NOTIFICATION_UNBIND: do_ffa_notif_unbind(&res, host_ctxt); goto out_handled; + case FFA_NOTIFICATION_SET: + do_ffa_notif_set(&res, host_ctxt); + goto out_handled; } =20 if (ffa_call_supported(func_id)) --=20 2.55.0.979.g7e5102b832-goog From nobody Fri Sep 25 23:09:15 2026 Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C93D651FCC2 for ; Mon, 7 Sep 2026 17:19:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788801587; cv=none; b=rVoVLOxrVbsEtGX5/GEyOc8HSyRLED1eU72gUO3vOlJsxxTxDQtXdruVDbOoH1KGb2cf8cRC8q4KBWMCc7w7eZIDxk+P7xyilHyOs59OgJgHZvLYKDeWAslU+zeYno8cAfKb1UUw4AwQwsm/VVo8Bknwgh+eqvY4T9FJ4/Nyf6U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788801587; c=relaxed/simple; bh=ynbSWc5hwfhoV4Dk2YButIF26Cwed7fkSyPCp3V2/0o=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=QYYP0FHjulPJuis38UVEJH3Bh9JJTDlQ8CRYkMZKE0VOcgvW0BphiovIL3I+9RNuSETUG+j58WMLgdq+AAl4vdGWDyt7K39HCepVJULXCGnV0V192oPeZELHSVxEF5hCQT9SCMzJAgvhfjKlcwX9PnYNOBiL++ATPz8QQX5HIKA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=C3UyqmN8; arc=none smtp.client-ip=209.85.221.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="C3UyqmN8" Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-4858f06e142so1773841f8f.0 for ; Mon, 07 Sep 2026 10:19:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788801584; x=1789406384; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=azXNvPaknVBy0Syf3YnOWO2EVMjwE6S1Z11nRdavFo0=; b=C3UyqmN8Qv2swfWQ7sFwov+TRkVJxm1uLmGbIzPxPXebVQXmyhBodvyacqydgOrzij dedAkX64W0MKIyB9InHis2zWL00TcvS1mVLC90fZav0YKKB4H8ut6Yq3Zb3ZQeBBarqK m3T1IWSpxH/30cyxDCanFvQekdcpPDEfUxC9XVA4MfpzzG28tGxEGOhGMflwjq42S/Sx 3eOaf3NG6K4tdRPjnASfqhSdlOo46ltcy5qYS2Jh2SOifM9PEfTb5N6ZQYuIedGrIBrG oFq+n3T3eEPpov9XlTB4wnh6e3CrNOQRoMlAtEKJjgssE1d/WKshq6LCsheqGLMDUHo2 Cc6Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788801584; x=1789406384; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=azXNvPaknVBy0Syf3YnOWO2EVMjwE6S1Z11nRdavFo0=; b=FW18ENj9id2yjHBeyV+pDuPJx1tXOTs8v0xBoi87RT9OkGJRt5IOqtGBlgOzWaMWCy 51wK6I4DPG3m1WnB2yU5lMfWwexcrtCcgxpMUU99Y/QWAL5OWbD+qpwiBnYczjX/NOU/ /cZeoTl0Jh+p+oUYizu3Noy9udkuHzv/3Hh5W2k0YZzQp2gT6cYLXzx/+dT8oJpmEM8n wOWZYrm2QkVhRejkg0viMV/tD+c3sDcqHhemPESH24yI6jm1LrHQ3EBtRTeOkHzYb8Ng Wg637u4EURnfxEQoEFqUegNLTSLF2UfTURoZ3nGolDuRq0LoSXFWUq7Wadbvp3aouBcx QfXQ== X-Forwarded-Encrypted: i=1; AKwUvByxz1Y6Ianf3djIu2v5OSxVMOKyVjzKwI2qk4olrpyX5e9D231GQJ8S3sxY/7SQB6IHEaHDFuWzLI6JoCI=@vger.kernel.org X-Gm-Message-State: AFuF++lhjgrFP7XDTvzyxW/aj1qWl4EsrSupwbXEuve5NR9/1UpDyZQj zYyb9RVIyiya/l3NwqUBxsfhy/iyjRN8Cw34EN1MdkEbXMpWCnWN8sHXQnLTa5qk1uDb+/WujNx GyqCdrjVOAj0yRWlCrJt6P0YorH+r2w== X-Received: from wrwc18.prod.google.com ([2002:a5d:63d2:0:b0:484:3922:d684]) (user=sebastianene job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6000:993:b0:485:847f:fd7d with SMTP id ffacd0b85a97d-485872d5061mr24058104f8f.24.1788801583354; Mon, 07 Sep 2026 10:19:43 -0700 (PDT) Date: Mon, 7 Sep 2026 17:19:27 +0000 In-Reply-To: <20260907171930.4037166-1-sebastianene@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260907171930.4037166-1-sebastianene@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260907171930.4037166-6-sebastianene@google.com> Subject: [PATCH v9 5/7] KVM: arm64: Support FFA_NOTIFICATION_GET in host handler From: Sebastian Ene To: catalin.marinas@arm.com, maz@kernel.org, oupton@kernel.org, fuad.tabba@linux.dev, will@kernel.org Cc: joey.gouly@arm.com, korneld@google.com, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, android-kvm@google.com, mrigendra.chaubey@gmail.com, perlarsen@google.com, sebastianene@google.com, suzuki.poulose@arm.com, vdonnefort@google.com, yuzenghui@huawei.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow FF-A notification GET messages to be proxied from the pKVM hypervisor to Trustzone and verify the arguments sent from the host driver. Reviewed-by: Vincent Donnefort Signed-off-by: Sebastian Ene --- arch/arm64/kvm/hyp/nvhe/ffa.c | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c index 923f32caa04b..e11fb06df63d 100644 --- a/arch/arm64/kvm/hyp/nvhe/ffa.c +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c @@ -695,7 +695,6 @@ static bool ffa_call_supported(u64 func_id) case FFA_MEM_DONATE: case FFA_MEM_RETRIEVE_REQ: /* Optional notification interfaces added in FF-A 1.1 */ - case FFA_NOTIFICATION_GET: case FFA_NOTIFICATION_INFO_GET: /* Optional interfaces added in FF-A 1.2 */ case FFA_MSG_SEND_DIRECT_REQ2: /* Optional per 7.5.1 */ @@ -954,6 +953,27 @@ static void do_ffa_notif_set(struct arm_smccc_1_2_regs= *res, hyp_smccc_1_2_smc(args, res); } =20 +static void do_ffa_notif_get(struct arm_smccc_1_2_regs *res, + struct kvm_cpu_context *ctxt) +{ + DECLARE_REG(u32, endp_id, ctxt, 1); + DECLARE_REG(u32, flags, ctxt, 2); + struct arm_smccc_1_2_regs *args; + + if (FIELD_GET(FFA_NOTIF_RECEIVER_ENDP_MASK, endp_id) !=3D HOST_FFA_ID) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + + if (flags & GENMASK(31, 4)) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + + args =3D (void *)&ctxt->regs.regs[0]; + hyp_smccc_1_2_smc(args, res); +} + bool kvm_host_ffa_handler(struct kvm_cpu_context *host_ctxt, u32 func_id) { struct arm_smccc_1_2_regs res =3D {0}; @@ -1025,6 +1045,9 @@ bool kvm_host_ffa_handler(struct kvm_cpu_context *hos= t_ctxt, u32 func_id) case FFA_NOTIFICATION_SET: do_ffa_notif_set(&res, host_ctxt); goto out_handled; + case FFA_NOTIFICATION_GET: + do_ffa_notif_get(&res, host_ctxt); + goto out_handled; } =20 if (ffa_call_supported(func_id)) --=20 2.55.0.979.g7e5102b832-goog From nobody Fri Sep 25 23:09:15 2026 Received: from mail-wm1-f69.google.com (mail-wm1-f69.google.com [209.85.128.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9BA40521205 for ; Mon, 7 Sep 2026 17:19:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788801588; cv=none; b=uPwiLh8l0xbFMSpJ4SUjqY/vlMvsgotosqzVZCLX5Dd+/ZoS03ARuvg09/ZtX9h7JYRuN4cdJyrl5hAzRrlzaOVonhLKgID1cD4AZhw2cSsXAqEndM1ZjkDt6qNMgVXVu2+WirnR6+5xBPyGEq8vf4VjtwHcA/2Q4NPr201PHzo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788801588; c=relaxed/simple; bh=BVQs2KMfxV/tT9rQPMbT3YixzDlqI/g+6wdyT9j5U6Y=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=uMZ3fwkzUin2EthteFY/sJQqAbbsJIPek26flHef5lp1kZ8CJCbkgQcqGyzYBZ+ItUBMXhA7Zsrsw/RI4MEMVji8OvyVekNFHN1bg+oIN3eilI23qS5MrCD4OFLjZqcCk9eOLx7TEUe31p5XLhZKGTQAmcrSJfjcTc0kTWz905Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=tQ6Qco0F; arc=none smtp.client-ip=209.85.128.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="tQ6Qco0F" Received: by mail-wm1-f69.google.com with SMTP id 5b1f17b1804b1-49b7c1dcc82so22591795e9.0 for ; Mon, 07 Sep 2026 10:19:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788801585; x=1789406385; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=pgNVIw8B8D8cs9XgDbUZbP9oPGN4jX1fGCXxaqN5ORM=; b=tQ6Qco0FoM7+VsQdLU+dciRBdgJ+NnF+cxLnqdfkZ9/wJ/ENnv5RK15dR/OQl4TbID hJNt/AjnKF9cfrRcsEjCmDAXGd9s8rjxcsJFysRttzWqqBq3ia1w9YESgybIdAgJtTK7 yF17T7unKUlFvw85pOVHw8mAtmgb72AWNXFattSSqZ8jXWCTnvnAyZgWLktvk3CSzHjA ZnjY63moxmWo4NytkodyvXlHXHEt1UF6i8TVbUiljpJtxQSJmEg1vvQ3l8esPHQoE9M2 yZjOUpAxaHR9OSBs7vE0O+En5QXnjR79ZKVjMkhjIhyH7EyEeTOYKMhoLietFgny1u9I BURg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788801585; x=1789406385; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=pgNVIw8B8D8cs9XgDbUZbP9oPGN4jX1fGCXxaqN5ORM=; b=FbwSlLQMf9RFfkKF5ge8fbIWGekt/xzxn94/g1EGSuUmYAcQdFG8Zj67uNu0LZHIJJ LFat4HTQK4DaGfDhdvihCESgtx3biGgUUk0Ll78cAz80g5TtUdiWDjNRhcfAgTTbHBMY K3+1Dv6731wbxKPOqsjNwwYALVgHQLonA+5o8MyBZLeblJHuwic3zM1sH8TuHMWujgnn 53AfSbV0UQ3mTr0B3sZ8zgV2BRHN9/R24mlXUb15AegXzzQpFXOUg/GycLQDJjaFFoAp BP2FQBwHRLXou5p4tU0JkNywbGCJMlzsVzKTPrUgcPek+Bs/HpFe/7DGcJb2HB651cAY FC2A== X-Forwarded-Encrypted: i=1; AKwUvBzG21EmuBT+BwgXGWck8D2b4/+GewPjfoWyzjUrJvyMczhWvRRWdG1toBub937dwN4Sl65W5Bp6k3rLFqo=@vger.kernel.org X-Gm-Message-State: AFuF++kGJqTd+DtkTnjKP2CdKlSh8r8zb6BtXZCFvvF7BPmy91dce0NC 5TvHieP/fHD//pu4DuXsB+cT0HcXkn7eBq10X8kZm55p1OIaHNS9IFR1CgYZEHjDIa99x8X5R8W 2gj+TAEZUMbERm7zy2w/9+xM40tPKgw== X-Received: from wmbgx24.prod.google.com ([2002:a05:600c:8598:b0:499:bb2f:becf]) (user=sebastianene job=prod-delivery.src-stubby-dispatcher) by 2002:a05:600d:864a:10b0:49c:fc89:59cb with SMTP id 5b1f17b1804b1-49cfc8960ccmr150937795e9.5.1788801584621; Mon, 07 Sep 2026 10:19:44 -0700 (PDT) Date: Mon, 7 Sep 2026 17:19:28 +0000 In-Reply-To: <20260907171930.4037166-1-sebastianene@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260907171930.4037166-1-sebastianene@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260907171930.4037166-7-sebastianene@google.com> Subject: [PATCH v9 6/7] KVM: arm64: Support FFA_NOTIFICATION_INFO_GET in host handler From: Sebastian Ene To: catalin.marinas@arm.com, maz@kernel.org, oupton@kernel.org, fuad.tabba@linux.dev, will@kernel.org Cc: joey.gouly@arm.com, korneld@google.com, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, android-kvm@google.com, mrigendra.chaubey@gmail.com, perlarsen@google.com, sebastianene@google.com, suzuki.poulose@arm.com, vdonnefort@google.com, yuzenghui@huawei.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Allow the host to send FF-A notification queries to Trustzone and proxy these messages from pKVM. Reviewed-by: Vincent Donnefort Signed-off-by: Sebastian Ene --- arch/arm64/kvm/hyp/nvhe/ffa.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c index e11fb06df63d..2281ac2e42fc 100644 --- a/arch/arm64/kvm/hyp/nvhe/ffa.c +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c @@ -694,8 +694,6 @@ static bool ffa_call_supported(u64 func_id) case FFA_RXTX_MAP: case FFA_MEM_DONATE: case FFA_MEM_RETRIEVE_REQ: - /* Optional notification interfaces added in FF-A 1.1 */ - case FFA_NOTIFICATION_INFO_GET: /* Optional interfaces added in FF-A 1.2 */ case FFA_MSG_SEND_DIRECT_REQ2: /* Optional per 7.5.1 */ case FFA_MSG_SEND_DIRECT_RESP2: /* Optional per 7.5.1 */ --=20 2.55.0.979.g7e5102b832-goog From nobody Fri Sep 25 23:09:15 2026 Received: from mail-ej1-f69.google.com (mail-ej1-f69.google.com [209.85.218.69]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EF6FF51FCD9 for ; Mon, 7 Sep 2026 17:19:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.69 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788801589; cv=none; b=mic5LLew9wYnIB2oMHxCJwSJfPaTk4DXr4lQU/4UQB3d5v6ciVynyZT08ujSgtKVhq+OnzIN0DyH7vDuzZChVQ5GHY1guuew+el8JCf95AmpYn9xDsIe/sOU8r+4yIuQyMBXIGEMP1bptFU9/Xf8Tsd48/vLnmI0oLMKqOaXGS8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788801589; c=relaxed/simple; bh=NbKk/Hdzgc8mwGs1OGNkYIpfW6nhoT838QZM7abSr8A=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=cwh9km4/sFsxgwvF4ptZnrhmbypn22SYrG95fh0+BlpmPE9FQDTMTlJwfol/cQx4q7l2vfBl2Idcq39WgGjUehmEd2cygvgTmRD5kt16oJHbW+y5OgNExe5Ar9ZvOp881K+06zGIw54SYUjPBnZb4l9kEJ0JS6U6irowBxXyuGg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=vEuxa8UZ; arc=none smtp.client-ip=209.85.218.69 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--sebastianene.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="vEuxa8UZ" Received: by mail-ej1-f69.google.com with SMTP id a640c23a62f3a-c252a2ae8e1so384847366b.1 for ; Mon, 07 Sep 2026 10:19:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1788801586; x=1789406386; darn=vger.kernel.org; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:from:to:cc:subject:date:message-id:reply-to :content-type; bh=KmIWpzhFDJoaOM2vzu23v41LySXrh6uszkNkTVUH7Ao=; b=vEuxa8UZv6bRW7Gx6Ck9Bd2qcGXeDv2A0NxePdLiJPWj3/IEqq6HKkUAl3GXk59eIx 10BoT+99fstAOrKbiAr1l4TA6NgGZvZPaHzNT45gTSfHjUXmL9OMuS/KRpGZpkijqCqq 4zBmZw0LJ34//xbIVjByeLUh7NTGwNXdcMhPIXPN5O5Gy4kTrQLKRltNMf93NtMhJNNg YaXmVXgQ8YLLkC/rsmHM0LZfIO4y1dg9qiovrZkhsgHHKllomR/1KsGLDT+wsIffTtyM y7pNCDhraKsRIjxxrzUUQ5Ci6JdOsZ+4kN8/q6wNsondWJDGAHVgVDvbRmTc0w1HYnnd H6Qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788801586; x=1789406386; h=content-type:cc:to:from:subject:message-id:references:mime-version :in-reply-to:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=KmIWpzhFDJoaOM2vzu23v41LySXrh6uszkNkTVUH7Ao=; b=S7+HXStsOsZiHG7apmTLNqG3NIlvdnQX6Wcj6zr5dLR9sJKe9Uo8ph8xUOAcnYKb7o uhdIXLtkjwh+dYOB2W71wsRvO5i+j97qI2AscWv9I8bvAA74cx4UdavCFzWdiiIbCl7t LXufiSefeFy4FPwN6e38WfyTbMi5R21fDdNBUQt55sMpEHHp1qpV0xBxbiUsCtqTPoVi Plb1Td78Et7z6dxtJo2NnI1RvusxFBdWgsmPKNalQzqnPIdt0GZO2MPsUgYPL5djtRlD m0p85rjfw3dJSRaXe9ph51gGnra8oG4h45tWNdeMvKvBmZFEsGtfZnn3IxWH0eT6rZWe WPXw== X-Forwarded-Encrypted: i=1; AKwUvBxUxJ5S15j3qJPLurK050FMrSItTkD0TeMpUutcVJbFwhUgdGI565K1aysoySoIT8FfIecGvrb5ToBeVVc=@vger.kernel.org X-Gm-Message-State: AFuF++kCgxKlCDZ6tIjJFhFOozpA6t5ltjwUYDZeZhK9v0pV1slo7L3o QHfAMxYeOm6/HqtznF5+m+1iGTvO5ZSHEndcXT0nbvWjoL2BvM/cGUVNVRP+MJJzWvmXd7zNwc6 1p6EzGLMJvOc+vCXFYxP5KyYtMEDo2g== X-Received: from edyv10.prod.google.com ([2002:a05:6402:184a:b0:6a3:670b:43f1]) (user=sebastianene job=prod-delivery.src-stubby-dispatcher) by 2002:a05:6402:4585:b0:6a7:ee56:8153 with SMTP id 4fb4d7f45d1cf-6a7ee5681d5mr6951962a12.33.1788801585853; Mon, 07 Sep 2026 10:19:45 -0700 (PDT) Date: Mon, 7 Sep 2026 17:19:29 +0000 In-Reply-To: <20260907171930.4037166-1-sebastianene@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260907171930.4037166-1-sebastianene@google.com> X-Mailer: git-send-email 2.55.0.979.g7e5102b832-goog Message-ID: <20260907171930.4037166-8-sebastianene@google.com> Subject: [PATCH v9 7/7] KVM: arm64: Enforce strict SBZ checks in the FF-A proxy From: Sebastian Ene To: catalin.marinas@arm.com, maz@kernel.org, oupton@kernel.org, fuad.tabba@linux.dev, will@kernel.org Cc: joey.gouly@arm.com, korneld@google.com, kvmarm@lists.linux.dev, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, android-kvm@google.com, mrigendra.chaubey@gmail.com, perlarsen@google.com, sebastianene@google.com, suzuki.poulose@arm.com, vdonnefort@google.com, yuzenghui@huawei.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Introduce a helper method ffa_check_unused_args_sbz to enforce strict arguments checking when the hypervisor acts as a relayer between the host and Trustzone. Reviewed-by: Vincent Donnefort Acked-by: Will Deacon Signed-off-by: Sebastian Ene --- arch/arm64/kvm/hyp/nvhe/ffa.c | 96 ++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/arch/arm64/kvm/hyp/nvhe/ffa.c b/arch/arm64/kvm/hyp/nvhe/ffa.c index 2281ac2e42fc..5ad74ab265b5 100644 --- a/arch/arm64/kvm/hyp/nvhe/ffa.c +++ b/arch/arm64/kvm/hyp/nvhe/ffa.c @@ -74,6 +74,21 @@ static u32 hyp_ffa_version; static bool has_version_negotiated; static hyp_spinlock_t version_lock; =20 +static bool ffa_check_unused_args_sbz(struct kvm_cpu_context *ctxt, int fi= rst_reg) +{ + DECLARE_REG(u32, func_id, ctxt, 0); + int reg, end_reg =3D 7; + + if (hyp_ffa_version >=3D FFA_VERSION_1_2 && ARM_SMCCC_IS_64(func_id)) + end_reg =3D 17; + for (reg =3D first_reg; reg <=3D end_reg; reg++) { + if (cpu_reg(ctxt, reg)) + return true; + } + + return false; +} + static void ffa_to_smccc_error(struct arm_smccc_1_2_regs *res, u64 ffa_err= no) { *res =3D (struct arm_smccc_1_2_regs) { @@ -242,6 +257,11 @@ static void do_ffa_rxtx_map(struct arm_smccc_1_2_regs = *res, int ret =3D 0; void *rx_virt, *tx_virt; =20 + if (ffa_check_unused_args_sbz(ctxt, 4)) { + ret =3D FFA_RET_INVALID_PARAMETERS; + goto out; + } + if (npages !=3D (KVM_FFA_MBOX_NR_PAGES * PAGE_SIZE) / FFA_PAGE_SIZE) { ret =3D FFA_RET_INVALID_PARAMETERS; goto out; @@ -318,6 +338,11 @@ static void do_ffa_rxtx_unmap(struct arm_smccc_1_2_reg= s *res, DECLARE_REG(u32, id, ctxt, 1); int ret =3D 0; =20 + if (ffa_check_unused_args_sbz(ctxt, 2)) { + ret =3D FFA_RET_INVALID_PARAMETERS; + goto out; + } + if (id !=3D HOST_FFA_ID) { ret =3D FFA_RET_INVALID_PARAMETERS; goto out; @@ -424,6 +449,11 @@ static void do_ffa_mem_frag_tx(struct arm_smccc_1_2_re= gs *res, int ret =3D FFA_RET_INVALID_PARAMETERS; u32 nr_ranges; =20 + if (ffa_check_unused_args_sbz(ctxt, 5)) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + if (fraglen > KVM_FFA_MBOX_NR_PAGES * PAGE_SIZE) goto out; =20 @@ -486,6 +516,11 @@ static void __do_ffa_mem_xfer(const u64 func_id, int ret =3D 0; size_t mem_region_len =3D FFA_MEM_REGION_SZ(hyp_ffa_version); =20 + if (ffa_check_unused_args_sbz(ctxt, 5)) { + ret =3D FFA_RET_INVALID_PARAMETERS; + goto out; + } + if (addr_mbz || npages_mbz || fraglen > len || fraglen > KVM_FFA_MBOX_NR_PAGES * PAGE_SIZE) { ret =3D FFA_RET_INVALID_PARAMETERS; @@ -589,6 +624,11 @@ static void do_ffa_mem_reclaim(struct arm_smccc_1_2_re= gs *res, int ret =3D 0; u64 handle; =20 + if (ffa_check_unused_args_sbz(ctxt, 4)) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + handle =3D PACK_HANDLE(handle_lo, handle_hi); =20 hyp_spin_lock(&host_buffers.lock); @@ -780,6 +820,11 @@ static void do_ffa_version(struct arm_smccc_1_2_regs *= res, { DECLARE_REG(u32, ffa_req_version, ctxt, 1); =20 + if (ffa_check_unused_args_sbz(ctxt, 2)) { + res->a0 =3D FFA_RET_NOT_SUPPORTED; + return; + } + if (FFA_MAJOR_VERSION(ffa_req_version) !=3D 1) { res->a0 =3D FFA_RET_NOT_SUPPORTED; return; @@ -829,6 +874,11 @@ static void do_ffa_part_get(struct arm_smccc_1_2_regs = *res, DECLARE_REG(u32, flags, ctxt, 5); u32 count, partition_sz, copy_sz; =20 + if (ffa_check_unused_args_sbz(ctxt, 6)) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + hyp_spin_lock(&host_buffers.lock); if (!host_buffers.rx) { ffa_to_smccc_res(res, FFA_RET_BUSY); @@ -876,9 +926,15 @@ static void do_ffa_part_get(struct arm_smccc_1_2_regs = *res, static void do_ffa_notif_bitmap(struct arm_smccc_1_2_regs *res, struct kvm_cpu_context *ctxt) { + DECLARE_REG(u32, func_id, ctxt, 0); DECLARE_REG(u32, vmid, ctxt, 1); struct arm_smccc_1_2_regs *args; =20 + if (ffa_check_unused_args_sbz(ctxt, func_id =3D=3D FFA_NOTIFICATION_BITMA= P_CREATE ? 3 : 2)) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + if (vmid !=3D HOST_FFA_ID) { ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); return; @@ -895,6 +951,11 @@ static void do_ffa_notif_bind(struct arm_smccc_1_2_reg= s *res, DECLARE_REG(u32, flags, ctxt, 2); struct arm_smccc_1_2_regs *args; =20 + if (ffa_check_unused_args_sbz(ctxt, 5)) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + if (FIELD_GET(FFA_NOTIF_RECEIVER_ENDP_MASK, endp_id) !=3D HOST_FFA_ID) { ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); return; @@ -916,7 +977,7 @@ static void do_ffa_notif_unbind(struct arm_smccc_1_2_re= gs *res, DECLARE_REG(u32, reserved, ctxt, 2); struct arm_smccc_1_2_regs *args; =20 - if (reserved) { + if (ffa_check_unused_args_sbz(ctxt, 5) || reserved) { ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); return; } @@ -942,6 +1003,11 @@ static void do_ffa_notif_set(struct arm_smccc_1_2_reg= s *res, return; } =20 + if (ffa_check_unused_args_sbz(ctxt, 5)) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + if (flags & GENMASK(15, 2)) { ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); return; @@ -963,6 +1029,11 @@ static void do_ffa_notif_get(struct arm_smccc_1_2_reg= s *res, return; } =20 + if (ffa_check_unused_args_sbz(ctxt, 3)) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + if (flags & GENMASK(31, 4)) { ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); return; @@ -972,6 +1043,20 @@ static void do_ffa_notif_get(struct arm_smccc_1_2_reg= s *res, hyp_smccc_1_2_smc(args, res); } =20 +static void do_ffa_notif_info_get(struct arm_smccc_1_2_regs *res, + struct kvm_cpu_context *ctxt) +{ + struct arm_smccc_1_2_regs *args; + + if (ffa_check_unused_args_sbz(ctxt, 1)) { + ffa_to_smccc_res(res, FFA_RET_INVALID_PARAMETERS); + return; + } + + args =3D (void *)&ctxt->regs.regs[0]; + hyp_smccc_1_2_smc(args, res); +} + bool kvm_host_ffa_handler(struct kvm_cpu_context *host_ctxt, u32 func_id) { struct arm_smccc_1_2_regs res =3D {0}; @@ -1000,6 +1085,11 @@ bool kvm_host_ffa_handler(struct kvm_cpu_context *ho= st_ctxt, u32 func_id) =20 switch (func_id) { case FFA_FEATURES: + if (ffa_check_unused_args_sbz(host_ctxt, 3)) { + ffa_to_smccc_res(&res, FFA_RET_INVALID_PARAMETERS); + goto out_handled; + } + if (!do_ffa_features(&res, host_ctxt)) return false; goto out_handled; @@ -1046,6 +1136,10 @@ bool kvm_host_ffa_handler(struct kvm_cpu_context *ho= st_ctxt, u32 func_id) case FFA_NOTIFICATION_GET: do_ffa_notif_get(&res, host_ctxt); goto out_handled; + case FFA_NOTIFICATION_INFO_GET: + case FFA_FN64_NOTIFICATION_INFO_GET: + do_ffa_notif_info_get(&res, host_ctxt); + goto out_handled; } =20 if (ffa_call_supported(func_id)) --=20 2.55.0.979.g7e5102b832-goog