- fixed the ProbeForWrite prototype - some fixes to get ntoskrnl to build with -Wcast-qual and -Wsign-compare - don't touch any memory outside the given range in ProbeForWrite and touch all pages within the range Modified: trunk/reactos/include/ndk/mmtypes.h Modified: trunk/reactos/include/reactos/helper.h Modified: trunk/reactos/ntoskrnl/ex/init.c Modified: trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h Modified: trunk/reactos/ntoskrnl/io/deviface.c Modified: trunk/reactos/ntoskrnl/io/pnpmgr.c Modified: trunk/reactos/ntoskrnl/kd/kdmain.c Modified: trunk/reactos/ntoskrnl/lpc/reply.c Modified: trunk/reactos/ntoskrnl/mm/elf.inc.h Modified: trunk/reactos/ntoskrnl/mm/pe.c Modified: trunk/reactos/ntoskrnl/mm/section.c Modified: trunk/reactos/ntoskrnl/mm/virtual.c Modified: trunk/reactos/w32api/include/ddk/winddk.h _____
Modified: trunk/reactos/include/ndk/mmtypes.h --- trunk/reactos/include/ndk/mmtypes.h 2005-11-29 11:09:42 UTC (rev 19747) +++ trunk/reactos/include/ndk/mmtypes.h 2005-11-29 11:44:04 UTC (rev 19748) @@ -28,9 +28,9 @@
// // Page-Rounding Macros // -#define PAGE_ROUND_DOWN(x) (((ULONG)x)&(~(PAGE_SIZE-1))) +#define PAGE_ROUND_DOWN(x) (((ULONG_PTR)x)&(~(PAGE_SIZE-1))) #define PAGE_ROUND_UP(x) \ - ( (((ULONG)x)%PAGE_SIZE) ? ((((ULONG)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG)x) ) + ( (((ULONG_PTR)x)%PAGE_SIZE) ? ((((ULONG_PTR)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG_PTR)x) )
// // Macro for generating pool tags _____
Modified: trunk/reactos/include/reactos/helper.h --- trunk/reactos/include/reactos/helper.h 2005-11-29 11:09:42 UTC (rev 19747) +++ trunk/reactos/include/reactos/helper.h 2005-11-29 11:44:04 UTC (rev 19748) @@ -20,11 +20,11 @@
#endif
#ifndef PAGE_ROUND_DOWN -#define PAGE_ROUND_DOWN(x) (((ULONG)x)&(~(PAGE_SIZE-1))) +#define PAGE_ROUND_DOWN(x) (((ULONG_PTR)x)&(~(PAGE_SIZE-1))) #endif
#ifndef PAGE_ROUND_UP -#define PAGE_ROUND_UP(x) ( (((ULONG)x)%PAGE_SIZE) ? ((((ULONG)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG)x) ) +#define PAGE_ROUND_UP(x) ( (((ULONG_PTR)x)%PAGE_SIZE) ? ((((ULONG_PTR)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG_PTR)x) ) #endif
#define ABS_VALUE(V) (((V) < 0) ? -(V) : (V)) _____
Modified: trunk/reactos/ntoskrnl/ex/init.c --- trunk/reactos/ntoskrnl/ex/init.c 2005-11-29 11:09:42 UTC (rev 19747) +++ trunk/reactos/ntoskrnl/ex/init.c 2005-11-29 11:44:04 UTC (rev 19748) @@ -89,7 +89,7 @@
/* Create local parameter line copy */ ParamBuffer = ExAllocatePool(PagedPool, 256); - strcpy (ParamBuffer, (char *)ParameterLine); + strcpy (ParamBuffer, (const char *)ParameterLine); DPRINT("%s\n", ParamBuffer);
/* Cut options off */ _____
Modified: trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h --- trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h 2005-11-29 11:09:42 UTC (rev 19747) +++ trunk/reactos/ntoskrnl/include/internal/ntoskrnl.h 2005-11-29 11:44:04 UTC (rev 19748) @@ -123,7 +123,7 @@
(((ULONG_PTR)(Ptr) + sizeof(Type) - 1 < (ULONG_PTR)(Ptr) || \ (ULONG_PTR)(Ptr) + sizeof(Type) - 1 >= (ULONG_PTR)MmUserProbeAddress) ? \ ExRaiseStatus (STATUS_ACCESS_VIOLATION), Default : \ - *(Type *)&(*(volatile Type *)(Ptr))) + *(Type *)(Ptr))
#define ProbeForReadBoolean(Ptr) ProbeForReadGenericType(Ptr, BOOLEAN, FALSE) #define ProbeForReadUchar(Ptr) ProbeForReadGenericType(Ptr, UCHAR, 0) _____
Modified: trunk/reactos/ntoskrnl/io/deviface.c --- trunk/reactos/ntoskrnl/io/deviface.c 2005-11-29 11:09:42 UTC (rev 19747) +++ trunk/reactos/ntoskrnl/io/deviface.c 2005-11-29 11:44:04 UTC (rev 19748) @@ -882,6 +882,7 @@
PWCHAR StartPosition; PWCHAR EndPosition; NTSTATUS Status; + GUID EventGuid;
if (SymbolicLinkName == NULL) return STATUS_INVALID_PARAMETER_1; @@ -917,10 +918,11 @@ return Status; }
+ EventGuid = Enable ? GUID_DEVICE_INTERFACE_ARRIVAL : GUID_DEVICE_INTERFACE_REMOVAL; IopNotifyPlugPlayNotification( PhysicalDeviceObject, EventCategoryDeviceInterfaceChange, - Enable ? (LPGUID)&GUID_DEVICE_INTERFACE_ARRIVAL : (LPGUID)&GUID_DEVICE_INTERFACE_REMOVAL, + &EventGuid, &GuidString, (PVOID)SymbolicLinkName);
_____
Modified: trunk/reactos/ntoskrnl/io/pnpmgr.c --- trunk/reactos/ntoskrnl/io/pnpmgr.c 2005-11-29 11:09:42 UTC (rev 19747) +++ trunk/reactos/ntoskrnl/io/pnpmgr.c 2005-11-29 11:44:04 UTC (rev 19748) @@ -221,7 +221,7 @@
/* Query the device caps */ Status = IopQueryDeviceCapabilities(DeviceNode, &DeviceCaps); - if (NT_SUCCESS(Status) && (DeviceCaps.Address != -1)) + if (NT_SUCCESS(Status) && (DeviceCaps.Address != (ULONG)-1)) { /* Return length */ *ResultLength = sizeof(ULONG); _____
Modified: trunk/reactos/ntoskrnl/kd/kdmain.c --- trunk/reactos/ntoskrnl/kd/kdmain.c 2005-11-29 11:09:42 UTC (rev 19747) +++ trunk/reactos/ntoskrnl/kd/kdmain.c 2005-11-29 11:44:04 UTC (rev 19748) @@ -217,7 +217,7 @@
NtQueryDebugFilterState(IN ULONG ComponentId, IN ULONG Level) { - int i; + unsigned int i;
/* convert Level to mask if it isn't already one */ if ( Level < 32 ) @@ -241,7 +241,7 @@ IN ULONG Level, IN BOOLEAN State) { - int i; + unsigned int i; for ( i = 0; i < KdComponentTableEntries; i++ ) { if ( ComponentId == KdComponentTable[i].ComponentId ) _____
Modified: trunk/reactos/ntoskrnl/lpc/reply.c --- trunk/reactos/ntoskrnl/lpc/reply.c 2005-11-29 11:09:42 UTC (rev 19747) +++ trunk/reactos/ntoskrnl/lpc/reply.c 2005-11-29 11:44:04 UTC (rev 19748) @@ -45,7 +45,7 @@
}
Size = sizeof(QUEUEDMESSAGE); - if (LpcReply && LpcReply->u1.s1.TotalLength > sizeof(PORT_MESSAGE)) + if (LpcReply && LpcReply->u1.s1.TotalLength > (CSHORT)sizeof(PORT_MESSAGE)) { Size += LpcReply->u1.s1.TotalLength - sizeof(PORT_MESSAGE); } _____
Modified: trunk/reactos/ntoskrnl/mm/elf.inc.h --- trunk/reactos/ntoskrnl/mm/elf.inc.h 2005-11-29 11:09:42 UTC (rev 19747) +++ trunk/reactos/ntoskrnl/mm/elf.inc.h 2005-11-29 11:44:04 UTC (rev 19748) @@ -139,7 +139,7 @@
#ifndef RTL_CONTAINS_FIELD #define RTL_CONTAINS_FIELD(P_, SIZE_, FIELD_) \ - ((((char *)(P_)) + (SIZE_)) > (((char *)(&((P_)->FIELD_))) + sizeof((P_)->FIELD_))) + ((ULONG_PTR)(P_) + (ULONG_PTR)(SIZE_) > (ULONG_PTR)&((P_)->FIELD_) + sizeof((P_)->FIELD_)) #endif
#define ELFFMT_FIELDS_EQUAL(TYPE1_, TYPE2_, FIELD_) \ @@ -266,8 +266,13 @@ { PBYTE p; ULONG nSafeInput; + union + { + CONST ULONG32 *ConstInput; + ULONG32 *Input; + }pInput = {Input};
- RtlRetrieveUlong(&nSafeInput, Input); + RtlRetrieveUlong(&nSafeInput, pInput.Input);
if(DataType == ELF_TARG_DATA) return nSafeInput; _____
Modified: trunk/reactos/ntoskrnl/mm/pe.c --- trunk/reactos/ntoskrnl/mm/pe.c 2005-11-29 11:09:42 UTC (rev 19747) +++ trunk/reactos/ntoskrnl/mm/pe.c 2005-11-29 11:44:04 UTC (rev 19748) @@ -97,7 +97,7 @@
#ifndef RTL_CONTAINS_FIELD #define RTL_CONTAINS_FIELD(P_, SIZE_, FIELD_) \ - ((((char *)(P_)) + (SIZE_)) > (((char *)(&((P_)->FIELD_))) + sizeof((P_)->FIELD_))) + ((ULONG_PTR)(P_) + (ULONG_PTR)(SIZE_) > (ULONG_PTR)&((P_)->FIELD_) + sizeof((P_)->FIELD_)) #endif
static __inline BOOLEAN IsPowerOf2(IN ULONG Number) _____
Modified: trunk/reactos/ntoskrnl/mm/section.c --- trunk/reactos/ntoskrnl/mm/section.c 2005-11-29 11:09:42 UTC (rev 19747) +++ trunk/reactos/ntoskrnl/mm/section.c 2005-11-29 11:44:04 UTC (rev 19748) @@ -2744,8 +2744,8 @@
MmspCompareSegments(const void * x, const void * y) { - PMM_SECTION_SEGMENT Segment1 = (PMM_SECTION_SEGMENT)x; - PMM_SECTION_SEGMENT Segment2 = (PMM_SECTION_SEGMENT)y; + const MM_SECTION_SEGMENT *Segment1 = (const MM_SECTION_SEGMENT *)x; + const MM_SECTION_SEGMENT *Segment2 = (const MM_SECTION_SEGMENT *)y;
return (Segment1->VirtualAddress - Segment2->VirtualAddress) >> _____
Modified: trunk/reactos/ntoskrnl/mm/virtual.c --- trunk/reactos/ntoskrnl/mm/virtual.c 2005-11-29 11:09:42 UTC (rev 19747) +++ trunk/reactos/ntoskrnl/mm/virtual.c 2005-11-29 11:44:04 UTC (rev 19748) @@ -989,20 +989,20 @@
IN ULONG Length, IN ULONG Alignment) { - ASSERT(Alignment == 1 || Alignment == 2 || Alignment == 4 || Alignment == 8); + if (Length != 0) + { + ASSERT(Alignment == 1 || Alignment == 2 || Alignment == 4 || Alignment == 8);
- if (Length == 0) - return; - - if (((ULONG_PTR)Address & (Alignment - 1)) != 0) - { - ExRaiseStatus (STATUS_DATATYPE_MISALIGNMENT); - } - else if ((ULONG_PTR)Address + Length - 1 < (ULONG_PTR)Address || - (ULONG_PTR)Address + Length - 1 >= (ULONG_PTR)MmUserProbeAddress) - { - ExRaiseStatus (STATUS_ACCESS_VIOLATION); - } + if (((ULONG_PTR)Address & (Alignment - 1)) != 0) + { + ExRaiseStatus (STATUS_DATATYPE_MISALIGNMENT); + } + else if ((ULONG_PTR)Address + Length - 1 < (ULONG_PTR)Address || + (ULONG_PTR)Address + Length - 1 >= (ULONG_PTR)MmUserProbeAddress) + { + ExRaiseStatus (STATUS_ACCESS_VIOLATION); + } + } }
@@ -1010,39 +1010,39 @@ * @implemented */ VOID STDCALL -ProbeForWrite (IN CONST VOID *Address, +ProbeForWrite (IN PVOID Address, IN ULONG Length, IN ULONG Alignment) { - volatile CHAR *Current; - PCHAR Last; + volatile CHAR *Current; + PCHAR Last;
- ASSERT(Alignment == 1 || Alignment == 2 || Alignment == 4 || Alignment == 8); + if (Length != 0) + { + ASSERT(Alignment == 1 || Alignment == 2 || Alignment == 4 || Alignment == 8);
- if (Length == 0) - return; + if (((ULONG_PTR)Address & (Alignment - 1)) != 0) + { + ExRaiseStatus (STATUS_DATATYPE_MISALIGNMENT); + }
- if (((ULONG_PTR)Address & (Alignment - 1)) != 0) - { - ExRaiseStatus (STATUS_DATATYPE_MISALIGNMENT); - } + Last = (PCHAR)((ULONG_PTR)Address + Length - 1); + if ((ULONG_PTR)Last < (ULONG_PTR)Address || + (ULONG_PTR)Last >= (ULONG_PTR)MmUserProbeAddress) + { + ExRaiseStatus (STATUS_ACCESS_VIOLATION); + }
- Last = (CHAR*)((ULONG_PTR)Address + Length - 1); - if ((ULONG_PTR)Last < (ULONG_PTR)Address || - (ULONG_PTR)Last >= (ULONG_PTR)MmUserProbeAddress) - { - ExRaiseStatus (STATUS_ACCESS_VIOLATION); - } - - /* Check for accessible pages */ - Current = (CHAR*)Address; - *Current = *Current; - Current = (PCHAR)((ULONG_PTR)PAGE_ROUND_DOWN(Current) + PAGE_SIZE); - while (Current <= Last) - { - *Current = *Current; - Current = (CHAR*)((ULONG_PTR)Current + PAGE_SIZE); - } + /* Check for accessible pages, do *not* touch any memory outside of the + range!*/ + Current = (volatile CHAR*)Address; + Last = (PCHAR)(PAGE_ROUND_DOWN(Last)); + do + { + *Current = *Current; + Current = (volatile CHAR*)(PAGE_ROUND_DOWN(Current) + PAGE_SIZE); + } while (Current <= Last); + } }
/* EOF */ _____
Modified: trunk/reactos/w32api/include/ddk/winddk.h --- trunk/reactos/w32api/include/ddk/winddk.h 2005-11-29 11:09:42 UTC (rev 19747) +++ trunk/reactos/w32api/include/ddk/winddk.h 2005-11-29 11:44:04 UTC (rev 19748) @@ -6738,7 +6738,7 @@
VOID DDKAPI ProbeForWrite( - IN CONST VOID *Address, + IN PVOID Address, IN ULONG Length, IN ULONG Alignment);