diff --git a/src/arch/x86_64/gdt.rs b/src/arch/x86_64/gdt.rs index 6842dd985fe3badf5c71b69c5a4cb3c2df0d1873..8bc0629357c0781e7b6bfeec01d4c24e9de57977 100644 --- a/src/arch/x86_64/gdt.rs +++ b/src/arch/x86_64/gdt.rs @@ -10,8 +10,6 @@ use x86::dtables::{self, DescriptorTablePointer}; use x86::segmentation::{self, Descriptor as SegmentDescriptor, SegmentSelector}; use x86::task; -use crate::paging::PAGE_SIZE; - pub const GDT_NULL: usize = 0; pub const GDT_KERNEL_CODE: usize = 1; pub const GDT_KERNEL_DATA: usize = 2; diff --git a/src/arch/x86_64/idt.rs b/src/arch/x86_64/idt.rs index 66981dc0b74cab7b2e7de71d25dcb8005f7cc176..7e7a0eb8b694d549cab5e1eeea3f33bc162e77af 100644 --- a/src/arch/x86_64/idt.rs +++ b/src/arch/x86_64/idt.rs @@ -45,7 +45,7 @@ impl Idt { let byte_index = index / 64; let bit = index % 64; - unsafe { &self.reservations[usize::from(byte_index)] }.load(Ordering::Acquire) & (1 << bit) != 0 + { &self.reservations[usize::from(byte_index)] }.load(Ordering::Acquire) & (1 << bit) != 0 } #[inline] @@ -53,14 +53,14 @@ impl Idt { let byte_index = index / 64; let bit = index % 64; - unsafe { &self.reservations[usize::from(byte_index)] }.fetch_or(u64::from(reserved) << bit, Ordering::AcqRel); + { &self.reservations[usize::from(byte_index)] }.fetch_or(u64::from(reserved) << bit, Ordering::AcqRel); } #[inline] pub fn is_reserved_mut(&mut self, index: u8) -> bool { let byte_index = index / 64; let bit = index % 64; - *unsafe { &mut self.reservations[usize::from(byte_index)] }.get_mut() & (1 << bit) != 0 + *{ &mut self.reservations[usize::from(byte_index)] }.get_mut() & (1 << bit) != 0 } #[inline] @@ -68,7 +68,7 @@ impl Idt { let byte_index = index / 64; let bit = index % 64; - *unsafe { &mut self.reservations[usize::from(byte_index)] }.get_mut() |= u64::from(reserved) << bit; + *{ &mut self.reservations[usize::from(byte_index)] }.get_mut() |= u64::from(reserved) << bit; } } @@ -82,7 +82,7 @@ pub fn is_reserved(cpu_id: usize, index: u8) -> bool { let byte_index = index / 64; let bit = index % 64; - unsafe { &IDTS.read().as_ref().unwrap().get(&cpu_id).unwrap().reservations[usize::from(byte_index)] }.load(Ordering::Acquire) & (1 << bit) != 0 + { &IDTS.read().as_ref().unwrap().get(&cpu_id).unwrap().reservations[usize::from(byte_index)] }.load(Ordering::Acquire) & (1 << bit) != 0 } #[inline] @@ -90,7 +90,7 @@ pub fn set_reserved(cpu_id: usize, index: u8, reserved: bool) { let byte_index = index / 64; let bit = index % 64; - unsafe { &IDTS.read().as_ref().unwrap().get(&cpu_id).unwrap().reservations[usize::from(byte_index)] }.fetch_or(u64::from(reserved) << bit, Ordering::AcqRel); + { &IDTS.read().as_ref().unwrap().get(&cpu_id).unwrap().reservations[usize::from(byte_index)] }.fetch_or(u64::from(reserved) << bit, Ordering::AcqRel); } pub fn allocate_interrupt() -> Option<NonZeroU8> { diff --git a/src/arch/x86_64/paging/table.rs b/src/arch/x86_64/paging/table.rs index e6467bf071d09c02e3a302e43b717561d0214839..9e907d35e0f0d42713e8162e690ae08b7d26e6dd 100644 --- a/src/arch/x86_64/paging/table.rs +++ b/src/arch/x86_64/paging/table.rs @@ -54,7 +54,7 @@ impl<L> Table<L> where L: TableLevel { } pub fn zero(&mut self) { - for entry in unsafe { &mut self.entries }.iter_mut() { + for entry in self.entries.iter_mut() { entry.set_zero(); } } @@ -62,12 +62,12 @@ impl<L> Table<L> where L: TableLevel { /// Set number of entries in first table entry fn set_entry_count(&mut self, count: u64) { debug_assert!(count <= ENTRY_COUNT as u64, "count can't be greater than ENTRY_COUNT"); - unsafe { &mut self.entries[0] }.set_counter_bits(count) + self.entries[0].set_counter_bits(count) } /// Get number of entries in first table entry fn entry_count(&self) -> u64 { - unsafe { &self.entries[0] }.counter_bits() + self.entries[0].counter_bits() } pub fn increment_entry_count(&mut self) { @@ -124,12 +124,12 @@ impl<L> Index<usize> for Table<L> where L: TableLevel { type Output = Entry; fn index(&self, index: usize) -> &Entry { - unsafe { &self.entries[index] } + &self.entries[index] } } impl<L> IndexMut<usize> for Table<L> where L: TableLevel { fn index_mut(&mut self, index: usize) -> &mut Entry { - unsafe { &mut self.entries[index] } + &mut self.entries[index] } } diff --git a/src/context/context.rs b/src/context/context.rs index 622364196ee35fd5bae57b904051232a95f09753..99a8e7f94003c974c5685ccba1148486013f7cb6 100644 --- a/src/context/context.rs +++ b/src/context/context.rs @@ -6,10 +6,9 @@ use alloc::{ vec::Vec, }; use core::{ - alloc::{GlobalAlloc, Layout}, + alloc::GlobalAlloc, cmp::Ordering, mem, - ptr::NonNull, }; use spin::RwLock; diff --git a/src/devices/uart_16550.rs b/src/devices/uart_16550.rs index 776303b6ef9b2b089a0266b48c6e3ea3c0bf9b62..69a596508aea580ef9baabb4de81ac91cbaf46a4 100644 --- a/src/devices/uart_16550.rs +++ b/src/devices/uart_16550.rs @@ -68,21 +68,19 @@ where { pub fn init(&mut self) { //TODO: Cleanup - unsafe { - self.int_en.write(0x00.into()); - self.line_ctrl.write(0x80.into()); - self.data.write(0x01.into()); - self.int_en.write(0x00.into()); - self.line_ctrl.write(0x03.into()); - self.fifo_ctrl.write(0xC7.into()); - self.modem_ctrl.write(0x0B.into()); - self.int_en.write(0x01.into()); - } + self.int_en.write(0x00.into()); + self.line_ctrl.write(0x80.into()); + self.data.write(0x01.into()); + self.int_en.write(0x00.into()); + self.line_ctrl.write(0x03.into()); + self.fifo_ctrl.write(0xC7.into()); + self.modem_ctrl.write(0x0B.into()); + self.int_en.write(0x01.into()); } fn line_sts(&self) -> LineStsFlags { LineStsFlags::from_bits_truncate( - (unsafe { self.line_sts.read() } & 0xFF.into()) + (self.line_sts.read() & 0xFF.into()) .try_into() .unwrap_or(0), ) @@ -91,7 +89,7 @@ where pub fn receive(&mut self) -> Option<u8> { if self.line_sts().contains(LineStsFlags::INPUT_FULL) { Some( - (unsafe { self.data.read() } & 0xFF.into()) + (self.data.read() & 0xFF.into()) .try_into() .unwrap_or(0), ) @@ -102,7 +100,7 @@ where pub fn send(&mut self, data: u8) { while !self.line_sts().contains(LineStsFlags::OUTPUT_EMPTY) {} - unsafe { self.data.write(data.into()) } + self.data.write(data.into()) } pub fn write(&mut self, buf: &[u8]) { diff --git a/src/lib.rs b/src/lib.rs index 6a48b969f2bc2caddbf9cc92def37f18eca1de29..4ff246ca1d86afa78d55ae338b1d58ebd3d37248 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -68,7 +68,6 @@ extern crate alloc; #[macro_use] extern crate bitflags; -#[macro_use] extern crate bitfield; extern crate goblin; extern crate linked_list_allocator; diff --git a/src/panic.rs b/src/panic.rs index 4da7bab639d5052c79e32d70174745338c1c2a26..a8a9e7cd4ab1743cb4b82811a9307d8743c08f86 100644 --- a/src/panic.rs +++ b/src/panic.rs @@ -40,6 +40,7 @@ pub extern "C" fn rust_begin_unwind(info: &PanicInfo) -> ! { #[lang = "oom"] #[no_mangle] +#[allow(improper_ctypes_definitions)] // Layout is not repr(C) pub extern fn rust_oom(_layout: Layout) -> ! { panic!("kernel memory allocation failed"); } diff --git a/src/scheme/user.rs b/src/scheme/user.rs index 5d56472b4e6094b687efe42ef87fa6351e76b806..6035bd5e7eb872adaad96f83f8da111dd8e5ee84 100644 --- a/src/scheme/user.rs +++ b/src/scheme/user.rs @@ -483,7 +483,7 @@ impl Scheme for UserScheme { let context_lock = contexts.current().ok_or(Error::new(ESRCH))?; let context = context_lock.read(); let mut grants = context.grants.write(); - let mut funmap = &mut grants.funmap; + let funmap = &mut grants.funmap; let entry = funmap.range(..=Region::byte(VirtualAddress::new(grant_address))).next_back(); let grant_address = VirtualAddress::new(grant_address); @@ -513,7 +513,7 @@ impl Scheme for UserScheme { let context_lock = contexts.current().ok_or(Error::new(ESRCH))?; let context = context_lock.read(); let mut grants = context.grants.write(); - let mut funmap = &mut grants.funmap; + let funmap = &mut grants.funmap; let entry = funmap.range(..=Region::byte(VirtualAddress::new(grant_address))).next_back(); let grant_address = VirtualAddress::new(grant_address); diff --git a/src/syscall/futex.rs b/src/syscall/futex.rs index 2600b2e00dc0697fcdc812ecaf1a7c7380691636..53fd2837ff6457130e7ec1bcab7a3901f730c3e4 100644 --- a/src/syscall/futex.rs +++ b/src/syscall/futex.rs @@ -16,7 +16,7 @@ use crate::paging::{ActivePageTable, TableKind, VirtualAddress}; use crate::syscall::data::TimeSpec; use crate::syscall::error::{Error, Result, ESRCH, EAGAIN, EFAULT, EINVAL}; use crate::syscall::flag::{FUTEX_WAIT, FUTEX_WAIT64, FUTEX_WAKE, FUTEX_REQUEUE}; -use crate::syscall::validate::{validate_array, validate_slice, validate_slice_mut}; +use crate::syscall::validate::validate_array; type FutexList = VecDeque<FutexEntry>; diff --git a/src/syscall/process.rs b/src/syscall/process.rs index 2f863d9f263fda61cc6abbbff11abe3af505eb3c..e1c5796adaee5c65bc8e9f88f1c82629d9aa7797 100644 --- a/src/syscall/process.rs +++ b/src/syscall/process.rs @@ -87,7 +87,7 @@ pub fn clone(flags: CloneFlags, stack_base: usize) -> Result<ContextId> { arch = context.arch.clone(); if let Some(ref fx) = context.kfx { - let mut new_fx = unsafe { + let new_fx = unsafe { let new_fx_ptr = crate::ALLOCATOR.alloc(Layout::from_size_align_unchecked(1024, 16)); if new_fx_ptr.is_null() { // FIXME: It's mildly ironic that the only place where clone can fail with @@ -339,7 +339,7 @@ pub fn clone(flags: CloneFlags, stack_base: usize) -> Result<ContextId> { } let mut active_utable = unsafe { ActivePageTable::new(TableKind::User) }; - let mut active_ktable = unsafe { ActivePageTable::new(TableKind::Kernel) }; + let active_ktable = unsafe { ActivePageTable::new(TableKind::Kernel) }; let mut new_utable = unsafe { let frame = allocate_frames(1).ok_or(Error::new(ENOMEM))?; @@ -916,7 +916,7 @@ pub fn fexec_kernel(fd: FileHandle, args: Box<[Box<[u8]>]>, vars: Box<[Box<[u8]> (auxv, phdr_grant) } else { let phdr_grant = match context::contexts().current().ok_or(Error::new(ESRCH))?.read().grants.write() { - mut grants => { + grants => { let size = elf.program_headers_size() * elf.program_header_count(); let aligned_size = (size + PAGE_SIZE - 1) / PAGE_SIZE * PAGE_SIZE; @@ -934,7 +934,6 @@ pub fn fexec_kernel(fd: FileHandle, args: Box<[Box<[u8]>]>, vars: Box<[Box<[u8]> grant } - }; let mut auxv = Vec::with_capacity(3); diff --git a/src/syscall/validate.rs b/src/syscall/validate.rs index e6cf7352918d07ea2ff5e438ddf2915ad26bb346..c5f3e23ee63eb15523539fcd2f44d0c181196984 100644 --- a/src/syscall/validate.rs +++ b/src/syscall/validate.rs @@ -35,7 +35,7 @@ fn validate(address: usize, size: usize, writable: bool) -> Result<()> { pub unsafe fn validate_ref<T>(ptr: *const T, size: usize) -> Result<&'static T> { if size == mem::size_of::<T>() { validate(ptr as usize, mem::size_of::<T>(), false)?; - Ok(unsafe { &*ptr }) + Ok(&*ptr) } else { Err(Error::new(EINVAL)) }