[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] xen/arm: ffa: Harden SEND2 against invented loads
- To: "Orzel, Michal" <michal.orzel@xxxxxxx>
- From: Bertrand Marquis <Bertrand.Marquis@xxxxxxx>
- Date: Wed, 19 Aug 2026 08:18:24 +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=amd.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=nmfV9jZkRiW5RX0g53UAkRH+0KpBfEnmsl36tJuhhGM=; b=xmQ4CJbPGCauo2mn20dVOXgb419tENqwLBq70vvHLTkqzHep4fdxJLEO5e8qJmVyr95b96DU8gjGs/G6AoZDrDRpxrgWPbBYbmLw4Ph4+yKG87ENIBFqA+2P+up/k0Qp0dT8UmIPSLeIQjhGh29wFroOwFBM3kUmRqlhEpG2wEnDXYMGRmDTSMKOu+6zjRW6yJv5XJUnIfKbuIMXT7mQYrCKLCGeo3+GPlfHW6QHM2BUb+oVeqch50bCn58yimC30ggxA/jfFlw8kfn8lF+PhJ/ZZSk92HRiM3oZJDsGy2j98GTdgLXA/J7iFqZYPCEm8c8NRB9M9O85UyQWu9Bvlg==
- 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=nmfV9jZkRiW5RX0g53UAkRH+0KpBfEnmsl36tJuhhGM=; b=lOCu/GqeiuLLQxlK6vaVdR8JQ6PPjWhTG7YaHSYcsbTywosg/LI73v2QutIhwQQ7rt+iOj/9kEUDuPGIeXpIYMypdwjNn9FlRYPEWRGOYL4aenPRp8SoC4T7nyXugcXi4zZuU58atU4Vj1prWl0oRWI17gtfK/24kDHZJYaJpkz4nRh1LjG0SjjeDXDLl2SPpGYXUTeAcVLDYju5HQrYAtgAmjHgkHlFMOkoZF1s5xIO+RFfA+AWPO00tj/ODX6I6cM4y55CvgY31QH4zM2DiFdUg3bOMaMAsX9soGIi6D0W0jlY0pn/51fhXS6eguQuw/OW/TvcpD3CzIhpAaywCw==
- Arc-seal: i=2; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=pass; b=CV20b8b2eQhmU9fXtT0zL900SZcbXazbeUUlQ9XHG4V6i3j92Y0xOnZ6D4e1QG0eRnrn5ttSAVXyViBrcwaSsLfJOFv+tYKWEemRhKNmasFKctUh03vmaWWl/PkBmIx7wJ89V/dXNc5X8EstC993/ZklwNjbq80OtFy+kMRdrIqP0N+IfCNxe7D2xAk8aaKu3D1bOHqeItiXrn0GWAQSVA28NDM2gfxmIu9jXqF1nZWO/Y7QWRG4fEIUb1uMYaynrjFsUTpULBP6FT2o1HYXiVxHlENCfenxrs4CgOM5wS9NoEXbdPb9IOis+n2mu5siNqcgkO5wFn6octhVZiQ1CA==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=HZZWq4W8pVTrWF7NUzLSsqq5fgAd8atd1xGeXKcwms02oQLcPRuEl/dlrurKn0Ox8jY8nOg1cLT10RztqZ2EW5oPE4RmrLG2HfL0k7aeCRJXA8aabv9EdJIGVyjBDRYERqwcWAq3NaZ7fahkMRHORrSCzoGCsSIMUt9oxvCQg9Q2FpgXyYcOAHnCs0zOaSOteUmK2kb1UTSzTTUwRjS5q6jqWbAqTKF+RRIU7RYSQ0FpZaVyuC/hPPH/3xPe8OEN170/amhP/Zms6Bvr2nPyjs+1srL3oVaa7/4Tvvr+qdX/2Axe/UnioaeMaIC4mpRTMaFcKf1Uj9MSgHLzBQIlKg==
- 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>
- Delivery-date: Wed, 19 Aug 2026 08:19:12 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
- Nodisclaimer: true
- Thread-index: AQHdLwt9ezGusG27iE6LBf89mJZswbak//uAgAAD2ICAAAIrAIAAAnoA
- Thread-topic: [PATCH] xen/arm: ffa: Harden SEND2 against invented loads
> On 19 Aug 2026, at 10:09, Orzel, Michal <michal.orzel@xxxxxxx> wrote:
>
>
>
> On 19-Aug-26 10:01, Bertrand Marquis wrote:
>> Hi Michal,
>>
>>> On 19 Aug 2026, at 09:47, Orzel, Michal <Michal.Orzel@xxxxxxx> wrote:
>>>
>>>
>>>
>>> On 18-Aug-26 14:16, 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.
>>> This is a bit misleading because it *is* accessed in ffa_msg_send2_vm. The
>>> comment should say what you wrote as the last paragraph in the commit msg.
>>
>> Yes, this should be something around:
>> Ensure validation and use of the message header use the same snapshot.
>>
>> Do you agree ?
> Yes. I'll fix on commit.
Thanks :-)
Bertrand
>
> ~Michal
|