Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
202e0b29
Commit
202e0b29
authored
Jan 31, 2024
by
Alexandre Julliard
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ntdll: Share the is_valid_frame() helper function.
parent
9b8409fc
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
14 additions
and
45 deletions
+14
-45
ntdll_misc.h
dlls/ntdll/ntdll_misc.h
+7
-0
signal_arm.c
dlls/ntdll/signal_arm.c
+0
-11
signal_arm64.c
dlls/ntdll/signal_arm64.c
+0
-11
signal_i386.c
dlls/ntdll/signal_i386.c
+4
-14
signal_x86_64.c
dlls/ntdll/signal_x86_64.c
+3
-9
No files found.
dlls/ntdll/ntdll_misc.h
View file @
202e0b29
...
...
@@ -58,6 +58,13 @@ extern void DECLSPEC_NORETURN raise_status( NTSTATUS status, EXCEPTION_RECORD *r
extern
LONG
WINAPI
call_unhandled_exception_filter
(
PEXCEPTION_POINTERS
eptr
);
extern
void
WINAPI
process_breakpoint
(
void
);
static
inline
BOOL
is_valid_frame
(
ULONG_PTR
frame
)
{
if
(
frame
&
(
sizeof
(
void
*
)
-
1
))
return
FALSE
;
return
((
void
*
)
frame
>=
NtCurrentTeb
()
->
Tib
.
StackLimit
&&
(
void
*
)
frame
<=
NtCurrentTeb
()
->
Tib
.
StackBase
);
}
extern
void
WINAPI
LdrInitializeThunk
(
CONTEXT
*
,
ULONG_PTR
,
ULONG_PTR
,
ULONG_PTR
);
extern
NTSTATUS
WINAPI
KiUserExceptionDispatcher
(
EXCEPTION_RECORD
*
,
CONTEXT
*
);
extern
void
WINAPI
KiUserApcDispatcher
(
CONTEXT
*
,
ULONG_PTR
,
ULONG_PTR
,
ULONG_PTR
,
PNTAPCFUNC
);
...
...
dlls/ntdll/signal_arm.c
View file @
202e0b29
...
...
@@ -83,17 +83,6 @@ static void dump_scope_table( ULONG base, const SCOPE_TABLE *table )
}
/*******************************************************************
* is_valid_frame
*/
static
inline
BOOL
is_valid_frame
(
ULONG_PTR
frame
)
{
if
(
frame
&
3
)
return
FALSE
;
return
((
void
*
)
frame
>=
NtCurrentTeb
()
->
Tib
.
StackLimit
&&
(
void
*
)
frame
<=
NtCurrentTeb
()
->
Tib
.
StackBase
);
}
/*******************************************************************
* syscalls
*/
#define SYSCALL_ENTRY(id,name,args) __ASM_SYSCALL_FUNC( id, name, args )
...
...
dlls/ntdll/signal_arm64.c
View file @
202e0b29
...
...
@@ -90,17 +90,6 @@ static void dump_scope_table( ULONG64 base, const SCOPE_TABLE *table )
}
/*******************************************************************
* is_valid_frame
*/
static
inline
BOOL
is_valid_frame
(
ULONG_PTR
frame
)
{
if
(
frame
&
7
)
return
FALSE
;
return
((
void
*
)
frame
>=
NtCurrentTeb
()
->
Tib
.
StackLimit
&&
(
void
*
)
frame
<=
NtCurrentTeb
()
->
Tib
.
StackBase
);
}
/*******************************************************************
* syscalls
*/
#define SYSCALL_ENTRY(id,name,args) __ASM_SYSCALL_FUNC( id, name )
...
...
dlls/ntdll/signal_i386.c
View file @
202e0b29
...
...
@@ -107,16 +107,6 @@ DEFINE_SYSCALL_HELPER32()
/*******************************************************************
* is_valid_frame
*/
static
inline
BOOL
is_valid_frame
(
void
*
frame
)
{
if
((
ULONG_PTR
)
frame
&
3
)
return
FALSE
;
return
(
frame
>=
NtCurrentTeb
()
->
Tib
.
StackLimit
&&
(
void
**
)
frame
<
(
void
**
)
NtCurrentTeb
()
->
Tib
.
StackBase
-
1
);
}
/*******************************************************************
* raise_handler
*
* Handler for exceptions happening inside a handler.
...
...
@@ -163,7 +153,7 @@ static NTSTATUS call_stack_handlers( EXCEPTION_RECORD *rec, CONTEXT *context )
while
(
frame
!=
(
EXCEPTION_REGISTRATION_RECORD
*
)
~
0UL
)
{
/* Check frame address */
if
(
!
is_valid_frame
(
frame
))
if
(
!
is_valid_frame
(
(
ULONG_PTR
)
frame
))
{
rec
->
ExceptionFlags
|=
EH_STACK_INVALID
;
break
;
...
...
@@ -433,7 +423,7 @@ void WINAPI __regs_RtlUnwind( EXCEPTION_REGISTRATION_RECORD* pEndFrame, PVOID ta
if
(
pEndFrame
&&
(
frame
>
pEndFrame
))
raise_status
(
STATUS_INVALID_UNWIND_TARGET
,
pRecord
);
if
(
!
is_valid_frame
(
frame
))
raise_status
(
STATUS_BAD_STACK
,
pRecord
);
if
(
!
is_valid_frame
(
(
ULONG_PTR
)
frame
))
raise_status
(
STATUS_BAD_STACK
,
pRecord
);
/* Call handler */
TRACE
(
"calling handler at %p code=%lx flags=%lx
\n
"
,
...
...
@@ -545,13 +535,13 @@ USHORT WINAPI RtlCaptureStackBackTrace( ULONG skip, ULONG count, PVOID *buffer,
while
(
skip
--
)
{
if
(
!
is_valid_frame
(
frame
))
return
0
;
if
(
!
is_valid_frame
(
(
ULONG_PTR
)
frame
))
return
0
;
frame
=
(
ULONG
*
)
*
frame
;
}
for
(
i
=
0
;
i
<
count
;
i
++
)
{
if
(
!
is_valid_frame
(
frame
))
break
;
if
(
!
is_valid_frame
(
(
ULONG_PTR
)
frame
))
break
;
buffer
[
i
]
=
(
void
*
)
frame
[
1
];
if
(
hash
)
*
hash
+=
frame
[
1
];
frame
=
(
ULONG
*
)
*
frame
;
...
...
dlls/ntdll/signal_x86_64.c
View file @
202e0b29
...
...
@@ -455,9 +455,7 @@ static NTSTATUS call_stack_handlers( EXCEPTION_RECORD *rec, CONTEXT *orig_contex
unwind_done
:
if
(
!
dispatch
.
EstablisherFrame
)
break
;
if
((
dispatch
.
EstablisherFrame
&
7
)
||
dispatch
.
EstablisherFrame
<
(
ULONG64
)
NtCurrentTeb
()
->
Tib
.
StackLimit
||
dispatch
.
EstablisherFrame
>
(
ULONG64
)
NtCurrentTeb
()
->
Tib
.
StackBase
)
if
(
!
is_valid_frame
(
dispatch
.
EstablisherFrame
))
{
ERR_
(
seh
)(
"invalid frame %p (%p-%p)
\n
"
,
(
void
*
)
dispatch
.
EstablisherFrame
,
NtCurrentTeb
()
->
Tib
.
StackLimit
,
NtCurrentTeb
()
->
Tib
.
StackBase
);
...
...
@@ -1389,9 +1387,7 @@ void WINAPI RtlUnwindEx( PVOID end_frame, PVOID target_ip, EXCEPTION_RECORD *rec
unwind_done
:
if
(
!
dispatch
.
EstablisherFrame
)
break
;
if
((
dispatch
.
EstablisherFrame
&
7
)
||
dispatch
.
EstablisherFrame
<
(
ULONG64
)
NtCurrentTeb
()
->
Tib
.
StackLimit
||
dispatch
.
EstablisherFrame
>
(
ULONG64
)
NtCurrentTeb
()
->
Tib
.
StackBase
)
if
(
!
is_valid_frame
(
dispatch
.
EstablisherFrame
))
{
ERR
(
"invalid frame %p (%p-%p)
\n
"
,
(
void
*
)
dispatch
.
EstablisherFrame
,
NtCurrentTeb
()
->
Tib
.
StackLimit
,
NtCurrentTeb
()
->
Tib
.
StackBase
);
...
...
@@ -1634,9 +1630,7 @@ USHORT WINAPI RtlCaptureStackBackTrace( ULONG skip, ULONG count, PVOID *buffer,
if
(
!
dispatch
.
EstablisherFrame
)
break
;
if
((
dispatch
.
EstablisherFrame
&
7
)
||
dispatch
.
EstablisherFrame
<
(
ULONG64
)
NtCurrentTeb
()
->
Tib
.
StackLimit
||
dispatch
.
EstablisherFrame
>
(
ULONG64
)
NtCurrentTeb
()
->
Tib
.
StackBase
)
if
(
!
is_valid_frame
(
dispatch
.
EstablisherFrame
))
{
ERR
(
"invalid frame %p (%p-%p)
\n
"
,
(
void
*
)
dispatch
.
EstablisherFrame
,
NtCurrentTeb
()
->
Tib
.
StackLimit
,
NtCurrentTeb
()
->
Tib
.
StackBase
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment