|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH] Add UseConsole parameter to disable default console
On 26/10/2026 11:15, Owen Smith wrote:
> By setting "UseConsole" = 1, the default console (and CONSOLE) interface will
> fail.
> The default console's PDO will still be created, but any attempt to call
> CreateFile will
> fail, so I'd assume any alternate use would need to manage the default
> console ring
> itself. Non-default console's PDOs are unaffected.
>
My idea is to totally prevent xenbus and others from touching the
default console ring and leave the console ring's usage to some other
applications. That seemed simpler than swallowing read/write requests at
first glance.
From my testing, it looks like I can still open handles to the default
console PDO XENCONS\VEN_XN&DEV_CONSOLE\0 (e.g. Get-NtFile -Access
ReadData,WriteData,Synchronize -ShareMode Delete \Device\...). Although
I haven't tested this point further.
> Owen
>
>
> ________________________________________
> From: win-pv-devel <win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx> on behalf of
> Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
> Sent: 26 October 2026 6:57 AM
> To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Tu Dinh
> Subject: [PATCH] Add UseConsole parameter to disable default console
>
> In some cases, we may want to assign the default console to something
> else (e.g. a debug transport). So add a parameter to allow disabling it.
>
> Signed-off-by: Tu Dinh <ngoc-tu.dinh@xxxxxxxxxx>
> ---
> src/xenbus/console.c | 68 ++++++++++++++++++++++++++++++--------------
> 1 file changed, 47 insertions(+), 21 deletions(-)
>
> diff --git a/src/xenbus/console.c b/src/xenbus/console.c
> index 2d747cb..0bfe504 100644
> --- a/src/xenbus/console.c
> +++ b/src/xenbus/console.c
> @@ -43,6 +43,8 @@
> #include "dbg_print.h"
> #include "assert.h"
> #include "util.h"
> +#include "driver.h"
> +#include "registry.h"
>
> #define CONSOLE_WAKEUP_MAGIC 'EKAW'
>
> @@ -71,6 +73,7 @@ struct _XENBUS_CONSOLE_CONTEXT {
> XENBUS_DEBUG_INTERFACE DebugInterface;
> PXENBUS_SUSPEND_CALLBACK SuspendCallbackLate;
> PXENBUS_DEBUG_CALLBACK DebugCallback;
> + BOOLEAN UseConsole;
> BOOLEAN Enabled;
> };
>
> @@ -692,13 +695,17 @@ ConsoleAcquire(
>
> Trace("====>\n");
>
> + status = STATUS_NOT_SUPPORTED;
> + if (!Context->UseConsole)
> + goto fail1;
> +
> status = XENBUS_GNTTAB(Acquire, &Context->GnttabInterface);
> if (!NT_SUCCESS(status))
> - goto fail1;
> + goto fail2;
>
> status = ConsoleGetAddress(Context, &Address);
> if (!NT_SUCCESS(status))
> - goto fail2;
> + goto fail3;
>
> Context->Address = Address;
> Context->Shared = (struct xencons_interface
> *)MmMapIoSpace(Context->Address,
> @@ -706,19 +713,19 @@ ConsoleAcquire(
> MmCached);
> status = STATUS_UNSUCCESSFUL;
> if (Context->Shared == NULL)
> - goto fail3;
> + goto fail4;
>
> status = XENBUS_EVTCHN(Acquire, &Context->EvtchnInterface);
> if (!NT_SUCCESS(status))
> - goto fail4;
> + goto fail5;
>
> status = ConsoleEnable(Context);
> if (!NT_SUCCESS(status))
> - goto fail5;
> + goto fail6;
>
> status = XENBUS_SUSPEND(Acquire, &Context->SuspendInterface);
> if (!NT_SUCCESS(status))
> - goto fail6;
> + goto fail7;
>
> status = XENBUS_SUSPEND(Register,
> &Context->SuspendInterface,
> @@ -727,11 +734,11 @@ ConsoleAcquire(
> Context,
> &Context->SuspendCallbackLate);
> if (!NT_SUCCESS(status))
> - goto fail7;
> + goto fail8;
>
> status = XENBUS_DEBUG(Acquire, &Context->DebugInterface);
> if (!NT_SUCCESS(status))
> - goto fail8;
> + goto fail9;
>
> status = XENBUS_DEBUG(Register,
> &Context->DebugInterface,
> @@ -740,7 +747,7 @@ ConsoleAcquire(
> Context,
> &Context->DebugCallback);
> if (!NT_SUCCESS(status))
> - goto fail9;
> + goto fail10;
>
> Trace("<====\n");
>
> @@ -749,50 +756,53 @@ done:
>
> return STATUS_SUCCESS;
>
> -fail9:
> - Error("fail9\n");
> +fail10:
> + Error("fail10\n");
>
> XENBUS_DEBUG(Release, &Context->DebugInterface);
>
> -fail8:
> - Error("fail8\n");
> +fail9:
> + Error("fail9\n");
>
> XENBUS_SUSPEND(Deregister,
> &Context->SuspendInterface,
> Context->SuspendCallbackLate);
> Context->SuspendCallbackLate = NULL;
>
> +fail8:
> + Error("fail8\n");
> +
> + XENBUS_SUSPEND(Release, &Context->SuspendInterface);
> +
> fail7:
> Error("fail7\n");
>
> - XENBUS_SUSPEND(Release, &Context->SuspendInterface);
> + ConsoleDisable(Context);
>
> fail6:
> Error("fail6\n");
>
> - ConsoleDisable(Context);
> + XENBUS_EVTCHN(Release, &Context->EvtchnInterface);
>
> fail5:
> Error("fail5\n");
>
> - XENBUS_EVTCHN(Release, &Context->EvtchnInterface);
> + MmUnmapIoSpace(Context->Shared, PAGE_SIZE);
> + Context->Shared = NULL;
>
> fail4:
> Error("fail4\n");
>
> - MmUnmapIoSpace(Context->Shared, PAGE_SIZE);
> - Context->Shared = NULL;
> + Context->Address.QuadPart = 0;
>
> fail3:
> Error("fail3\n");
>
> - Context->Address.QuadPart = 0;
> + XENBUS_GNTTAB(Release, &Context->GnttabInterface);
>
> fail2:
> Error("fail2\n");
>
> - XENBUS_GNTTAB(Release, &Context->GnttabInterface);
> -
> fail1:
> Error("fail1 (%08x)\n", status);
>
> @@ -872,6 +882,8 @@ ConsoleInitialize(
> _Outptr_ PXENBUS_CONSOLE_CONTEXT *Context
> )
> {
> + HANDLE ParametersKey;
> + ULONG UseConsole;
> NTSTATUS status;
>
> Trace("====>\n");
> @@ -917,6 +929,19 @@ ConsoleInitialize(
>
> KeInitializeDpc(&(*Context)->Dpc, ConsoleDpc, *Context);
>
> + ParametersKey = DriverGetParametersKey();
> +
> + status = RegistryQueryDwordValue(ParametersKey,
> + "UseConsole",
> + &UseConsole);
> + if (!NT_SUCCESS(status))
> + UseConsole = 1;
> +
> + (*Context)->UseConsole = (UseConsole != 0) ? TRUE : FALSE;
> +
> + if (!(*Context)->UseConsole)
> + Info("DISABLED\n");
> +
> (*Context)->Fdo = Fdo;
>
> Trace("<====\n");
> @@ -988,6 +1013,7 @@ ConsoleTeardown(
> Context->Dpcs = 0;
> Context->Events = 0;
>
> + Context->UseConsole = FALSE;
> Context->Fdo = NULL;
>
> RtlZeroMemory(&Context->Dpc, sizeof (KDPC));
> --
> 2.56.0.windows.3
>
>
>
> --
> Ngoc Tu Dinh | Vates XCP-ng Developer
>
> XCP-ng & Xen Orchestra - Vates solutions
>
> web: https://vates.tech
>
--
Ngoc Tu Dinh | Vates XCP-ng Developer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |