VirtualBox

source: vbox/trunk/src/VBox/HostDrivers/Support/posix/SUPR3HardenedMainA-posix.asm

Last change on this file was 98103, checked in by vboxsync, 16 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 5.1 KB
Line 
1; $Id: SUPR3HardenedMainA-posix.asm 98103 2023-01-17 14:15:46Z vboxsync $
2;; @file
3; VirtualBox Support Library - Hardened main(), Posix assembly bits.
4;
5
6;
7; Copyright (C) 2017-2023 Oracle and/or its affiliates.
8;
9; This file is part of VirtualBox base platform packages, as
10; available from https://www.virtualbox.org.
11;
12; This program is free software; you can redistribute it and/or
13; modify it under the terms of the GNU General Public License
14; as published by the Free Software Foundation, in version 3 of the
15; License.
16;
17; This program is distributed in the hope that it will be useful, but
18; WITHOUT ANY WARRANTY; without even the implied warranty of
19; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20; General Public License for more details.
21;
22; You should have received a copy of the GNU General Public License
23; along with this program; if not, see <https://www.gnu.org/licenses>.
24;
25; The contents of this file may alternatively be used under the terms
26; of the Common Development and Distribution License Version 1.0
27; (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
28; in the VirtualBox distribution, in which case the provisions of the
29; CDDL are applicable instead of those of the GPL.
30;
31; You may elect to license modified versions of this file under the
32; terms and conditions of either the GPL or the CDDL or both.
33;
34; SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
35;
36
37
38;*******************************************************************************
39;* Header Files *
40;*******************************************************************************
41%include "iprt/asmdefs.mac"
42
43
44;*********************************************************************************************************************************
45;* External Symbols *
46;*********************************************************************************************************************************
47; External code.
48BEGINCODE
49extern NAME(supR3HardenedPosixMonitor_VerifyLibrary)
50
51; External data
52BEGINDATA
53extern NAME(g_pfnDlopenReal)
54%ifdef SUP_HARDENED_WITH_DLMOPEN
55extern NAME(g_pfnDlmopenReal)
56%endif
57
58
59
60BEGINCODE
61
62;;
63; Wrapper for dlopen() handing the call over to the file verification code
64; and resuming the call if we get a green light to load the library.
65;
66align 16
67BEGINPROC supR3HardenedPosixMonitor_Dlopen
68 push xBP
69 mov xBP, xSP
70
71%ifdef RT_ARCH_AMD64
72 ; Save parameters on the stack
73 push rdi
74 push rsi
75%else
76 sub esp, 4 ; 16-byte stack alignment before call.
77 push dword [xBP + 08h] ; first parameter.
78%endif
79
80 ;
81 ; Call the verification method.
82 ;
83 call NAME(supR3HardenedPosixMonitor_VerifyLibrary)
84
85 ;
86 ; Restore parameters for the next call and get the stack back to the
87 ; original state.
88 ;
89%ifdef RT_ARCH_AMD64
90 pop rsi
91 pop rdi
92%endif
93 leave
94
95 ; Check the result and resume the call if the result is positive,
96 ; otherwise clean up and return NULL
97 test al, al
98 je short .failed
99
100 ; Resume the original dlopen call by jumping into the saved code.
101 jmp [NAME(g_pfnDlopenReal) xWrtRIP]
102
103.failed:
104 ;
105 ; Don't use leave here as we didn't use the enter instruction. Just clear
106 ; xAX and return
107 ;
108 xor xAX, xAX
109 ret
110ENDPROC supR3HardenedPosixMonitor_Dlopen
111
112
113%ifdef SUP_HARDENED_WITH_DLMOPEN
114;;
115; Wrapper for dlmopen() handing the call over to the file verification code
116; and resuming the call if we get a green light to load the library.
117;
118align 16
119BEGINPROC supR3HardenedPosixMonitor_Dlmopen
120 push xBP
121 mov xBP, xSP
122
123%ifdef RT_ARCH_AMD64
124 sub rsp, 8 ; 16-byte stack alignment before call.
125
126 ; Save parameters on the stack
127 push rdi
128 push rsi
129 push rdx
130
131 mov rdi, rsi ; Move the second parameter to the front
132%else
133 sub esp, 4 ; 16-byte stack alignment before call.
134 push dword [xBP + 0ch] ; Move the second parameter to the front
135%endif
136
137 ;
138 ; Call the verification method.
139 ;
140 call NAME(supR3HardenedPosixMonitor_VerifyLibrary)
141
142 ;
143 ; Restore parameters for the next call and get the stack back to the
144 ; original state.
145 ;
146%ifdef RT_ARCH_AMD64
147 pop rdx
148 pop rsi
149 pop rdi
150%endif
151 leave
152
153 ; Check the result and resume the call if the result is positive,
154 ; otherwise clean up and return NULL
155 test al, al
156 je short .failed
157
158 ; Resume the original dlopen call by jumping into the saved code.
159 jmp [NAME(g_pfnDlmopenReal) xWrtRIP]
160
161.failed:
162 ;
163 ; Don't use leave here as we didn't use the enter instruction. Just clear
164 ; xAX and return
165 ;
166 xor xAX, xAX
167 ret
168ENDPROC supR3HardenedPosixMonitor_Dlmopen
169%endif
170
Note: See TracBrowser for help on using the repository browser.

© 2023 Oracle
ContactPrivacy policyTerms of Use