Skip to content

Commit 5f9c6ba

Browse files
committed
fix: prevent direct cast of function item into an integer
1 parent 5c3276e commit 5f9c6ba

5 files changed

Lines changed: 9 additions & 9 deletions

File tree

ch4/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ extern "C" fn rust_main() -> ! {
123123
build_flags("_WRV"),
124124
);
125125
// 建立调度线程,目的是划分异常域。调度线程上发生内核异常时会回到这个控制流处理
126-
let mut scheduling = LocalContext::thread(schedule as _, false);
126+
let mut scheduling = LocalContext::thread(schedule as *const () as _, false);
127127
*scheduling.sp_mut() = 1 << 38;
128128
unsafe { scheduling.execute() };
129129
log::error!("stval = {:#x}", stval::read());

user/src/bin/sig_ctrlc.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub extern "C" fn main() -> i32 {
2020

2121
let mut new = SignalAction::default();
2222
let old = SignalAction::default();
23-
new.handler = func as usize;
23+
new.handler = func as *const () as usize;
2424

2525
println!("sig_ctrlc: sigaction");
2626
if sigaction(SignalNo::SIGINT, &new, &old) < 0 {

user/src/bin/sig_simple.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ fn func() {
1414
pub extern "C" fn main() -> i32 {
1515
let mut new = SignalAction::default();
1616
let old = SignalAction::default();
17-
new.handler = func as usize;
17+
new.handler = func as *const () as usize;
1818
println!("pid = {}", getpid());
1919
println!("signal_simple: sigaction");
2020
if sigaction(SignalNo::SIGUSR1, &new, &old) < 0 {

user/src/bin/sig_simple2.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ pub extern "C" fn main() -> i32 {
1616
if pid == 0 {
1717
let mut new = SignalAction::default();
1818
let old = SignalAction::default();
19-
new.handler = func as usize;
19+
new.handler = func as *const () as usize;
2020

2121
println!("signal_simple2: child sigaction");
2222
if sigaction(SignalNo::SIGUSR1, &new, &old) < 0 {

user/src/bin/sig_tests.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ fn user_sig_test_multiprocsignals() {
4949
if pid == 0 {
5050
let mut new = SignalAction::default();
5151
let old = SignalAction::default();
52-
new.handler = func as usize;
52+
new.handler = func as *const () as usize;
5353
if sigaction(SignalNo::SIGUSR1, &new, &old) < 0 {
5454
panic!("Sigaction failed!");
5555
}
@@ -67,7 +67,7 @@ fn user_sig_test_restore() {
6767
let mut new = SignalAction::default();
6868
let old = SignalAction::default();
6969
let old2 = SignalAction::default();
70-
new.handler = func as usize;
70+
new.handler = func as *const () as usize;
7171

7272
if sigaction(SignalNo::SIGUSR1, &new, &old) < 0 {
7373
panic!("Sigaction failed!");
@@ -108,7 +108,7 @@ fn kernel_sig_test_stop_cont() {
108108
fn kernel_sig_test_failignorekill() {
109109
let mut new = SignalAction::default();
110110
let old = SignalAction::default();
111-
new.handler = func as usize;
111+
new.handler = func as *const () as usize;
112112

113113
if sigaction(SignalNo::SIGKILL, &new, &old) >= 0 {
114114
panic!("Should not set sigaction to kill!");
@@ -126,11 +126,11 @@ fn kernel_sig_test_failignorekill() {
126126
fn final_sig_test() {
127127
let mut new = SignalAction::default();
128128
let old = SignalAction::default();
129-
new.handler = func2 as usize;
129+
new.handler = func2 as *const () as usize;
130130

131131
let mut new2 = SignalAction::default();
132132
let old2 = SignalAction::default();
133-
new2.handler = func3 as usize;
133+
new2.handler = func3 as *const () as usize;
134134

135135
let pid = fork();
136136
if pid == 0 {

0 commit comments

Comments
 (0)