|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH] Fail XS_DIRECTORY for paths with no children
> -----Original Message-----
> From: win-pv-devel <win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx> On Behalf Of
> Owen Smith
> Sent: 06 January 2021 16:18
> To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx
> Cc: Owen Smith <owen.smith@xxxxxxxxxx>
> Subject: [PATCH] Fail XS_DIRECTORY for paths with no children
>
> When a xenstore path has no children, a response is generated which
> contians only the double null terminator. Detect a 0-length response
s/contains/contains... I'll fix on commit
> payload and return STATUS_OBJECT_PATH_NOT_FOUND to indicate that this
> path does not have any children
>
STATUS_OBJECT_PATH_NOT_FOUND is what we use for ENOENT in xen-erro.h so that's
the right choice :-)
> Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
Acked-by: Paul Durrant <paul@xxxxxxx>
> ---
> src/xenbus/store.c | 11 ++++++++++-
> 1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/src/xenbus/store.c b/src/xenbus/store.c
> index cbc442e..570b8b5 100644
> --- a/src/xenbus/store.c
> +++ b/src/xenbus/store.c
> @@ -115,6 +115,7 @@ typedef struct _XENBUS_STORE_REQUEST {
> typedef struct _XENBUS_STORE_BUFFER {
> LIST_ENTRY ListEntry;
> ULONG Magic;
> + ULONG Length;
> PVOID Caller;
> CHAR Data[1];
> } XENBUS_STORE_BUFFER, *PXENBUS_STORE_BUFFER;
> @@ -1036,6 +1037,7 @@ StoreCopyPayload(
> goto fail1;
>
> Buffer->Magic = XENBUS_STORE_BUFFER_MAGIC;
> + Buffer->Length = Length;
> Buffer->Caller = Caller;
>
> RtlCopyMemory(Buffer->Data, Data, Length);
> @@ -1044,7 +1046,7 @@ StoreCopyPayload(
> InsertTailList(&Context->BufferList, &Buffer->ListEntry);
> KeReleaseSpinLock(&Context->Lock, Irql);
>
> - return Buffer;
> + return Buffer;
>
> fail1:
> Error("fail1 (%08x)\n", status);
> @@ -1439,6 +1441,10 @@ StoreDirectory(
> if (Buffer == NULL)
> goto fail4;
>
> + status = STATUS_OBJECT_PATH_NOT_FOUND;
> + if (Buffer->Length == 0)
> + goto fail5;
> +
> StoreFreeResponse(Response);
> ASSERT(IsZeroMemory(&Request, sizeof (XENBUS_STORE_REQUEST)));
>
> @@ -1446,6 +1452,9 @@ StoreDirectory(
>
> return STATUS_SUCCESS;
>
> +fail5:
> + StoreFreePayload(Context, Buffer);
> +
> fail4:
> fail3:
> StoreFreeResponse(Response);
> --
> 2.28.0.windows.1
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |