From a222df31baf8526344873d98e2013ac5eb0e202d Mon Sep 17 00:00:00 2001
From: Alexander Boettcher <alexander.boettcher@genode-labs.com>
Date: Tue, 8 Mar 2022 16:16:52 +0100
Subject: [PATCH] platform_drv(x86): avoid exception in alloc_dma

If size is zero, the platform goes out of service by:

[init -> platform_drv] Error: Uncaught exception of type 'Genode::Ram_allocator::Denied'
[init -> platform_drv] Warning: abort called - thread: e

Issue #4450
---
 .../os/src/drivers/platform/legacy/x86/pci_session_component.h | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/repos/os/src/drivers/platform/legacy/x86/pci_session_component.h b/repos/os/src/drivers/platform/legacy/x86/pci_session_component.h
index 764d2a291a..f50d1c9852 100644
--- a/repos/os/src/drivers/platform/legacy/x86/pci_session_component.h
+++ b/repos/os/src/drivers/platform/legacy/x86/pci_session_component.h
@@ -835,6 +835,9 @@ class Platform::Session_component : public Rpc_object<Session>
 			if (_env.pd().avail_ram().value < WATERMARK_RAM_QUOTA)
 				throw Out_of_ram();
 
+			if (!size)
+				return {};
+
 			Ram_dataspace_capability ram_cap = _env_ram.alloc(size, cache);
 			addr_t const dma_addr = _env.pd().dma_addr(ram_cap);