[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [PATCH 3/3] Fix issues raised by CodeQL
-----Original Message----- From: win-pv-devel <win-pv-devel-bounces@xxxxxxxxxxxxxxxxxxxx> On Behalf Of Paul Durrant Sent: Friday, August 20, 2021 9:15 AM To: win-pv-devel@xxxxxxxxxxxxxxxxxxxx Subject: Re: [PATCH 3/3] Fix issues raised by CodeQL [CAUTION - EXTERNAL EMAIL] DO NOT reply, click links, or open attachments unless you have verified the sender and know the content is safe. On 10/08/2021 16:40, Owen Smith wrote: > - ExAllocatePoolWithTag is deprecated in Windows 10 2004 and replaced with > ExAllocatePool2. Use ExAllocatePoolUninitialized to maintain support for > earlier versions of Windows. > - strtol can fail, check for LONG_MIN or LONG_MAX as indicators of an > error I think these probably ought to be separate patches. As for the strtol() change... There also uses of strtoul() (and _strtoui64()) elsewhere. If we're going to catch overflow here then ought we not have similar checking there? Paul Only strtol() was flagged as a warning by the newer compiler, not strtoul() or _strtoui64(). I only fixed the minimum to get the compile to stop raising warnings Owen > > Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> > --- > src/common/util.h | 4 ++++ > src/xenfilt/emulated.c | 34 ++++++++++++++++++++++++++-------- > 2 files changed, 30 insertions(+), 8 deletions(-) > > diff --git a/src/common/util.h b/src/common/util.h index > eddad4a..36a36dd 100644 > --- a/src/common/util.h > +++ b/src/common/util.h > @@ -151,8 +151,12 @@ __AllocatePoolWithTag( > __analysis_assume(PoolType == NonPagedPool || > PoolType == PagedPool); > > +#if (_MSC_VER >= 1928) // VS 16.9 (EWDK 20344 or later) > + Buffer = ExAllocatePoolUninitialized(PoolType, NumberOfBytes, > +Tag); #else > #pragma warning(suppress:28160) // annotation error > Buffer = ExAllocatePoolWithTag(PoolType, NumberOfBytes, Tag); > +#endif > if (Buffer == NULL) > return NULL; > > diff --git a/src/xenfilt/emulated.c b/src/xenfilt/emulated.c index > b7ae510..c0b666e 100644 > --- a/src/xenfilt/emulated.c > +++ b/src/xenfilt/emulated.c > @@ -159,9 +159,9 @@ EmulatedSetObjectDiskData( > ) > { > PCHAR End; > - ULONG Controller; > - ULONG Target; > - ULONG Lun; > + LONG Controller; > + LONG Target; > + LONG Lun; > NTSTATUS status; > > UNREFERENCED_PARAMETER(DeviceID); @@ -171,36 +171,54 @@ > EmulatedSetObjectDiskData( > if (Type != XENFILT_EMULATED_OBJECT_TYPE_IDE) > goto fail1; > > + status = STATUS_INVALID_PARAMETER; > Controller = strtol(InstanceID, &End, 10); > + if (Controller == LONG_MIN || Controller == LONG_MAX) > + goto fail2; > > status = STATUS_INVALID_PARAMETER; > if (*End != '.' || Controller > 1) > - goto fail2; > + goto fail3; > > End++; > > + status = STATUS_INVALID_PARAMETER; > Target = strtol(End, &End, 10); > + if (Target == LONG_MIN || Target == LONG_MAX) > + goto fail4; > > status = STATUS_INVALID_PARAMETER; > if (*End != '.' || Target > 1) > - goto fail3; > + goto fail5; > > End++; > > + status = STATUS_INVALID_PARAMETER; > Lun = strtol(End, &End, 10); > + if (Lun == LONG_MIN || Lun == LONG_MAX) > + goto fail6; > > status = STATUS_INVALID_PARAMETER; > if (*End != '\0') > - goto fail4; > + goto fail7; > > status = STATUS_NOT_SUPPORTED; > if (Lun != 0) > - goto fail5; > + goto fail8; > > - EmulatedObject->Data.Disk.Index = Controller << 1 | Target; > + EmulatedObject->Data.Disk.Index = (ULONG)Controller << 1 | > + (ULONG)Target; > > return STATUS_SUCCESS; > > +fail8: > + Error("fail8\n"); > + > +fail7: > + Error("fail7\n"); > + > +fail6: > + Error("fail6\n"); > + > fail5: > Error("fail5\n"); > >
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |