[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] xen/arm: ffa: Harden SEND2 against invented loads


  • To: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • From: Bertrand Marquis <Bertrand.Marquis@xxxxxxx>
  • Date: Tue, 18 Aug 2026 13:28:55 +0000
  • Accept-language: en-GB, en-US
  • Arc-authentication-results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 4.158.2.129) smtp.rcpttodomain=citrix.com smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=arm.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com])
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none
  • Arc-message-signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=vs3t465oTgOJ/gmIgHwch4LThzCGUM61rplAOjWbpkI=; b=ZINnH2K6N2eDitB6czqg/6kGGZ+Dv96v8IRg7KYOTxtlQzx2NDlqBCi61RDeWv6WcRhjOD465HLGhp60cot2BucF5nHyWZJmW2hysCpnmshFzVTtTWR6lbxSf5Rsy43pjBFUSoKfUKiWZ56NzS4sFdT0f8yubz3VqZiIMJGbTfe2k4uVdzSuVGBhFpmk8TH3RFHSWE54rzngTcQ6get0ePWDjCo7oUr6LbxsQ6ICaBCuf807I1vhe1yr+21q1Zr3ASxAwGLKtC58Xb+TPWhVL5MRx5sfNWUGDZFzwKyiR+hZolhkZk9AinGopWpHhKlKQxvF1ZR8Jjbi+Upf7UIWog==
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=vs3t465oTgOJ/gmIgHwch4LThzCGUM61rplAOjWbpkI=; b=pBPqRsXoHpX+ZkWVrx6unGGQczctAYkiM7jbPCJ1Prwp9+0/EtESsBt7lIIrJ5ABZghmR6eiUM/r9yAq5B6eX3ZSRL8zFxQf2r2wgJRYpAj2qJPU+PhmFYtmnF43DRJr1JIsw7Fk3nTCRvScPBGGzmlt5aCSORHKmcv9gYtudtVg1/0pbR2l6dm7QmhBnKk5sBmE2k6AjKK2QiJ3hjONZ2hvBxq7NPGKV4IVddg1EZlpGTbjibTY8NZZOyNcntGFhgbQWbcgm2c40tBijFDB4cj7ZtHXeE+QHo4zGLexTMVdqoktSui3rGuZc7mhTxl/wnSzfAon3QAjK8qqTyYbnA==
  • Arc-seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=OjYYVHB8OBpR5dlVXVQFy7QOSvVZ7ZhRLMXmAWJ1WbYoEAjRFRmzKrBdHV3HYMSbu+z1EE5JAehFUYwIRRrpyODN5LQt37XuFqvKWeINeweSs+3kT87mAt31VDJX6OwivL27CT1gQ32UCuCRnguK3Utu6wM9fOyl8O6czz4sPPFHneloJ6X025oyvsPV2jATmFjXNb7EBPsxzAYLrHLeo9HpN5kgzoWrKlwUg5pbdV6IqX5l4+TYc6/Yzbvr4t75+u3Su1Xon5tsc+hnUQY5y6CGCJyr3f7gDAS2UDrTLRcttkIBj/7yXpgDPk895zrDNSQMuOSBaGQF7vhqAsybrw==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eeViMAdKINJPIeHAZD/vXuTjqFcas8JGILz87WGERhDmdqg6nbGgwj/u6BQ86ZnbjKDFseUhPlhQQWjTMaFdfp4ShbQVaMZmcZjlaCJx+rNpqQa12uYf3fRfn1hl37Lvg8RsXyOHENlUqnmhQTR1cAWaPifxan8zyfA+UCH/O647J4ms6OromY/oQEjZFYHzJ1ITbVUrh5p188W8iMU1A0fQJ5el7HxZwWdOEs2sshMqeGAWPg5OyCmMOZtMxdSxeobvVQvtNB48qJHKgw9E6adNmL/f4/PkvGmQetIlJoDxG9iqYznrbA7ivzvhHuMCSCYyM465aRqUWvA2SykmQQ==
  • Authentication-results: eu.smtp.expurgate.cloud; dkim=pass header.s=selector1 header.d=arm.com header.i="@arm.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"; dkim=pass header.s=selector1 header.d=arm.com header.i="@arm.com" header.h="From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck"
  • Authentication-results-original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com;
  • Cc: "xen-devel@xxxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxxx>, Volodymyr Babchuk <volodymyr_babchuk@xxxxxxxx>, Jens Wiklander <jenswi@xxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>
  • Delivery-date: Tue, 18 Aug 2026 13:29:52 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
  • Nodisclaimer: true
  • Thread-index: AQHdLwt9ezGusG27iE6LBf89mJZswbajv3sAgAANaoA=
  • Thread-topic: [PATCH] xen/arm: ffa: Harden SEND2 against invented loads

Hi Andrew,

> On 18 Aug 2026, at 14:40, Andrew Cooper <andrew.cooper3@xxxxxxxxxx> wrote:
> 
> On 18/08/2026 1:16 pm, Bertrand Marquis wrote:
>> Research into compiler-invented loads has flagged FFA_MSG_SEND2 as a
>> possible vulnerability.
>> 
>> ffa_handle_msg_send2() copies the message header from the guest-writable
>> TX buffer before validating and using its fields. A plain structure copy
>> does not prevent the compiler from re-deriving later field accesses from
>> the live TX mapping.
>> 
>> For VM-to-VM messages, msg_offset and msg_size are validated against the
>> source and destination buffers, then used to copy the payload. If a
>> sibling vCPU changes the header and the compiler reloads either field,
>> the checked and used values can differ. This can cause an out-of-bounds
>> read from the sender's TX buffer or an out-of-bounds write into the
>> receiver's RX buffer.
>> 
>> The cross-VM path is gated by CONFIG_FFA_VM_TO_VM, which is disabled by
>> default. The audit ranks the likelihood of such a reload as low, but the
>> C semantics do not guarantee that later accesses use the stack copy.
>> 
>> Add a compiler barrier immediately after copying the header so that
>> validation and use consume the same snapshot.
>> 
>> Link: 
>> https://github.com/xoreaxeaxeax/schrodingers-toctou/blob/main/observer-effect/audits/audit-xen-tee-mediator-RELEASE-4.21.1.md#tm-2--ff-a-txrx-buffers-ffa_shmc-ffa_msgc
>> Fixes: 98af565b1e61 ("xen/arm: ffa: Add indirect message between VM")
>> Signed-off-by: Bertrand Marquis <bertrand.marquis@xxxxxxx>
>> ---
>> xen/arch/arm/tee/ffa_msg.c | 5 +++++
>> 1 file changed, 5 insertions(+)
>> 
>> diff --git a/xen/arch/arm/tee/ffa_msg.c b/xen/arch/arm/tee/ffa_msg.c
>> index 1eadc62870f2..39f561c8237f 100644
>> --- a/xen/arch/arm/tee/ffa_msg.c
>> +++ b/xen/arch/arm/tee/ffa_msg.c
>> @@ -257,6 +257,11 @@ int32_t ffa_handle_msg_send2(struct cpu_user_regs *regs)
>> 
>>     /* create a copy of the message header */
>>     memcpy(&src_msg, tx_buf, sizeof(src_msg));
>> +    /*
>> +     * Make sure that "tx_buf" which is shared with the guest isn't accessed
>> +     * again after this point.
>> +     */
>> +    barrier();
>> 
>>     src_id = src_msg.send_recv_id >> 16;
>>     dst_id = src_msg.send_recv_id & GENMASK(15,0);
> 
> This does look to be adequate to fix the potential issue, but you should
> drop the ACCESS_ONCE(src_ctx->guest_vers) a little lower down.
> 
> With a safe copy on the stack, there's no need to further inhibit
> optimisations around it.  In fact, it's unclear why e040b94d0fff added
> the ACCESS_ONCE() in the first place, seeing as it was already an
> on-stack object at the time.

the ACCESS_ONCE is protecting the access to guest_vers which is not on the stack
but a value on an internal context accessed by all VMs.

You probably mixed src_MSG with src_CTX ?

Cheers
Bertrand

> 
> ~Andrew





 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.