|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 1/2] Re-synchronize util.h with XENBUS and use __toupper()
A recent patch introduced __tolower() and __toupper() into util.h as
replacements for tolower() and toupper() respectively as the latter do
a hidden conversion to Unicode which make then unsafe at any IRQL other
than PASSIVE_LEVEL.
This patch imports util.h from XENBUS and fixes other code to be compatible.
Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
src/xenvif/bus.c | 2 +-
src/xenvif/fdo.c | 4 +-
src/xenvif/frontend.c | 2 +-
src/xenvif/link.c | 2 +-
src/xenvif/mac.c | 2 +-
src/xenvif/pdo.c | 2 +-
src/xenvif/receiver.c | 2 +-
src/xenvif/registry.c | 2 +-
src/xenvif/settings.c | 2 +-
src/xenvif/thread.c | 2 +-
src/xenvif/transmitter.c | 2 +-
src/xenvif/util.h | 105 +++++++++++++++++------------------------------
src/xenvif/vif.c | 2 +-
13 files changed, 50 insertions(+), 81 deletions(-)
diff --git a/src/xenvif/bus.c b/src/xenvif/bus.c
index 9190535..d3796e3 100644
--- a/src/xenvif/bus.c
+++ b/src/xenvif/bus.c
@@ -53,7 +53,7 @@ __BusAllocate(
IN ULONG Length
)
{
- return __AllocateNonPagedPoolWithTag(Length, BUS_TAG);
+ return __AllocatePoolWithTag(NonPagedPool, Length, BUS_TAG);
}
static FORCEINLINE VOID
diff --git a/src/xenvif/fdo.c b/src/xenvif/fdo.c
index 82c3fd2..dae1ad8 100644
--- a/src/xenvif/fdo.c
+++ b/src/xenvif/fdo.c
@@ -112,7 +112,7 @@ __FdoAllocate(
IN ULONG Length
)
{
- return __AllocateNonPagedPoolWithTag(Length, FDO_POOL);
+ return __AllocatePoolWithTag(NonPagedPool, Length, FDO_POOL);
}
static FORCEINLINE VOID
@@ -857,7 +857,7 @@ __FdoMultiSzToUpcaseAnsi(
if (Buffer[Index] == '\0')
break;
} else {
- Buffer[Index] = (CHAR)toupper(Buffer[Index]);
+ Buffer[Index] = __toupper(Buffer[Index]);
Index++;
}
}
diff --git a/src/xenvif/frontend.c b/src/xenvif/frontend.c
index a43a534..9500a58 100644
--- a/src/xenvif/frontend.c
+++ b/src/xenvif/frontend.c
@@ -126,7 +126,7 @@ __FrontendAllocate(
IN ULONG Length
)
{
- return __AllocateNonPagedPoolWithTag(Length, FRONTEND_POOL);
+ return __AllocatePoolWithTag(NonPagedPool, Length, FRONTEND_POOL);
}
static FORCEINLINE VOID
diff --git a/src/xenvif/link.c b/src/xenvif/link.c
index 5161159..a9b75b3 100644
--- a/src/xenvif/link.c
+++ b/src/xenvif/link.c
@@ -45,7 +45,7 @@ __LinkAllocate(
IN ULONG Length
)
{
- return __AllocateNonPagedPoolWithTag(Length, LINK_TAG);
+ return __AllocatePoolWithTag(NonPagedPool, Length, LINK_TAG);
}
static FORCEINLINE VOID
diff --git a/src/xenvif/mac.c b/src/xenvif/mac.c
index 0a771a4..3d04670 100644
--- a/src/xenvif/mac.c
+++ b/src/xenvif/mac.c
@@ -73,7 +73,7 @@ __MacAllocate(
IN ULONG Length
)
{
- return __AllocateNonPagedPoolWithTag(Length, XENVIF_MAC_TAG);
+ return __AllocatePoolWithTag(NonPagedPool, Length, XENVIF_MAC_TAG);
}
static FORCEINLINE VOID
diff --git a/src/xenvif/pdo.c b/src/xenvif/pdo.c
index 07cf23a..bda8925 100644
--- a/src/xenvif/pdo.c
+++ b/src/xenvif/pdo.c
@@ -100,7 +100,7 @@ __PdoAllocate(
IN ULONG Length
)
{
- return __AllocateNonPagedPoolWithTag(Length, PDO_POOL);
+ return __AllocatePoolWithTag(NonPagedPool, Length, PDO_POOL);
}
static FORCEINLINE VOID
diff --git a/src/xenvif/receiver.c b/src/xenvif/receiver.c
index 53f322f..d3073e1 100644
--- a/src/xenvif/receiver.c
+++ b/src/xenvif/receiver.c
@@ -145,7 +145,7 @@ __ReceiverAllocate(
IN ULONG Length
)
{
- return __AllocateNonPagedPoolWithTag(Length, XENVIF_RECEIVER_TAG);
+ return __AllocatePoolWithTag(NonPagedPool, Length, XENVIF_RECEIVER_TAG);
}
static FORCEINLINE VOID
diff --git a/src/xenvif/registry.c b/src/xenvif/registry.c
index 23b948b..9a7472b 100644
--- a/src/xenvif/registry.c
+++ b/src/xenvif/registry.c
@@ -45,7 +45,7 @@ __RegistryAllocate(
IN ULONG Length
)
{
- return __AllocateNonPagedPoolWithTag(Length, REGISTRY_POOL);
+ return __AllocatePoolWithTag(NonPagedPool, Length, REGISTRY_POOL);
}
static FORCEINLINE VOID
diff --git a/src/xenvif/settings.c b/src/xenvif/settings.c
index 3ce4771..5cb9984 100644
--- a/src/xenvif/settings.c
+++ b/src/xenvif/settings.c
@@ -45,7 +45,7 @@ __SettingsAllocate(
IN ULONG Length
)
{
- return __AllocateNonPagedPoolWithTag(Length, SETTINGS_TAG);
+ return __AllocatePoolWithTag(NonPagedPool, Length, SETTINGS_TAG);
}
static FORCEINLINE VOID
diff --git a/src/xenvif/thread.c b/src/xenvif/thread.c
index 2fa0c1c..1357473 100644
--- a/src/xenvif/thread.c
+++ b/src/xenvif/thread.c
@@ -52,7 +52,7 @@ __ThreadAllocate(
IN ULONG Length
)
{
- return __AllocateNonPagedPoolWithTag(Length, THREAD_POOL);
+ return __AllocatePoolWithTag(NonPagedPool, Length, THREAD_POOL);
}
static FORCEINLINE VOID
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index f01fc40..a8b0162 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -232,7 +232,7 @@ __TransmitterAllocate(
IN ULONG Length
)
{
- return __AllocateNonPagedPoolWithTag(Length, XENVIF_TRANSMITTER_TAG);
+ return __AllocatePoolWithTag(NonPagedPool, Length, XENVIF_TRANSMITTER_TAG);
}
static FORCEINLINE VOID
diff --git a/src/xenvif/util.h b/src/xenvif/util.h
index 5fec116..6d140b0 100644
--- a/src/xenvif/util.h
+++ b/src/xenvif/util.h
@@ -29,8 +29,8 @@
* SUCH DAMAGE.
*/
-#ifndef _UTIL_H
-#define _UTIL_H
+#ifndef _XENVIF_UTIL_H
+#define _XENVIF_UTIL_H
#include <ntddk.h>
@@ -138,85 +138,32 @@ __InterlockedSubtract(
return New;
}
-typedef struct _NON_PAGED_BUFFER_HEADER {
- SIZE_T Length;
- ULONG Tag;
-} NON_PAGED_BUFFER_HEADER, *PNON_PAGED_BUFFER_HEADER;
-
-typedef struct _NON_PAGED_BUFFER_TRAILER {
- ULONG Tag;
-} NON_PAGED_BUFFER_TRAILER, *PNON_PAGED_BUFFER_TRAILER;
-
static FORCEINLINE PVOID
-__AllocateNonPagedPoolWithTag(
- IN SIZE_T Length,
- IN ULONG Tag
+__AllocatePoolWithTag(
+ IN POOL_TYPE PoolType,
+ IN SIZE_T NumberOfBytes,
+ IN ULONG Tag
)
{
- PUCHAR Buffer;
- PNON_PAGED_BUFFER_HEADER Header;
- PNON_PAGED_BUFFER_TRAILER Trailer;
+ PUCHAR Buffer;
- ASSERT(Length != 0);
+ __analysis_assume(PoolType == NonPagedPool ||
+ PoolType == PagedPool);
- Buffer = ExAllocatePoolWithTag(NonPagedPool,
- sizeof (NON_PAGED_BUFFER_HEADER) +
- Length +
- sizeof (NON_PAGED_BUFFER_TRAILER),
- Tag);
+ Buffer = ExAllocatePoolWithTag(PoolType, NumberOfBytes, Tag);
if (Buffer == NULL)
- goto done;
-
- RtlZeroMemory(Buffer,
- sizeof (NON_PAGED_BUFFER_HEADER) +
- Length +
- sizeof (NON_PAGED_BUFFER_TRAILER));
-
- Header = (PNON_PAGED_BUFFER_HEADER)Buffer;
- Header->Length = Length;
- Header->Tag = Tag;
-
- Buffer += sizeof (NON_PAGED_BUFFER_HEADER);
-
- Trailer = (PNON_PAGED_BUFFER_TRAILER)(Buffer + Length);
- Trailer->Tag = Tag;
+ return NULL;
-done:
+ RtlZeroMemory(Buffer, NumberOfBytes);
return Buffer;
}
static FORCEINLINE VOID
__FreePoolWithTag(
- IN PVOID _Buffer,
- IN ULONG Tag
+ IN PVOID Buffer,
+ IN ULONG Tag
)
{
- PUCHAR Buffer = _Buffer;
- SIZE_T Length;
- PNON_PAGED_BUFFER_HEADER Header;
- PNON_PAGED_BUFFER_TRAILER Trailer;
-
- ASSERT(Buffer != NULL);
-
- Buffer -= sizeof (NON_PAGED_BUFFER_HEADER);
-
- Header = (PNON_PAGED_BUFFER_HEADER)Buffer;
- ASSERT3U(Tag, ==, Header->Tag);
- Length = Header->Length;
-
- Buffer += sizeof (NON_PAGED_BUFFER_HEADER);
-
- Trailer = (PNON_PAGED_BUFFER_TRAILER)(Buffer + Length);
- ASSERT3U(Tag, ==, Trailer->Tag);
-
- Buffer -= sizeof (NON_PAGED_BUFFER_HEADER);
-
- RtlFillMemory(Buffer,
- sizeof (NON_PAGED_BUFFER_HEADER) +
- Length +
- sizeof (NON_PAGED_BUFFER_TRAILER),
- 0xAA);
-
ExFreePoolWithTag(Buffer, Tag);
}
@@ -340,4 +287,26 @@ __strtok_r(
return Token;
}
-#endif // _UTIL_H
+static FORCEINLINE CHAR
+__toupper(
+ IN CHAR Character
+ )
+{
+ if (Character < 'a' || Character > 'z')
+ return Character;
+
+ return 'A' + Character - 'a';
+}
+
+static FORCEINLINE CHAR
+__tolower(
+ IN CHAR Character
+ )
+{
+ if (Character < 'A' || Character > 'Z')
+ return Character;
+
+ return 'a' + Character - 'A';
+}
+
+#endif // _XENVIF_UTIL_H
diff --git a/src/xenvif/vif.c b/src/xenvif/vif.c
index 76365d2..cd8aafc 100644
--- a/src/xenvif/vif.c
+++ b/src/xenvif/vif.c
@@ -64,7 +64,7 @@ __VifAllocate(
IN ULONG Length
)
{
- return __AllocateNonPagedPoolWithTag(Length, XENVIF_VIF_TAG);
+ return __AllocatePoolWithTag(NonPagedPool, Length, XENVIF_VIF_TAG);
}
static FORCEINLINE VOID
--
2.1.1
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |