Skip to content

Commit aa6773d

Browse files
committed
RcShmem should be locked via a mutex
1 parent b765368 commit aa6773d

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

libafl/src/bolts/shmem.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ pub type StdShMem = OsShMem;
3434
use core::fmt::Debug;
3535
use serde::{Deserialize, Serialize};
3636
#[cfg(feature = "std")]
37-
use std::env;
37+
use std::{env, sync::Mutex};
3838

3939
use alloc::{rc::Rc, string::ToString};
4040
use core::cell::RefCell;
@@ -209,7 +209,7 @@ pub trait ShMemProvider: Send + Clone + Default + Debug {
209209
#[derive(Debug, Clone)]
210210
pub struct RcShMem<T: ShMemProvider> {
211211
internal: ManuallyDrop<T::Mem>,
212-
provider: Rc<RefCell<T>>,
212+
provider: Rc<Mutex<RefCell<T>>>,
213213
}
214214

215215
impl<T> ShMem for RcShMem<T>
@@ -235,7 +235,7 @@ where
235235

236236
impl<T: ShMemProvider> Drop for RcShMem<T> {
237237
fn drop(&mut self) {
238-
self.provider.borrow_mut().release_map(&mut self.internal)
238+
self.provider.lock().unwrap().borrow_mut().release_map(&mut self.internal)
239239
}
240240
}
241241

@@ -244,7 +244,7 @@ impl<T: ShMemProvider> Drop for RcShMem<T> {
244244
/// Useful if the `ShMemProvider` needs to keep local state.
245245
#[derive(Debug, Clone)]
246246
pub struct RcShMemProvider<T: ShMemProvider> {
247-
internal: Rc<RefCell<T>>,
247+
internal: Rc<Mutex<RefCell<T>>>,
248248
}
249249

250250
unsafe impl<T: ShMemProvider> Send for RcShMemProvider<T> {}
@@ -257,37 +257,37 @@ where
257257

258258
fn new() -> Result<Self, Error> {
259259
Ok(Self {
260-
internal: Rc::new(RefCell::new(T::new()?)),
260+
internal: Rc::new(Mutex::new(RefCell::new(T::new()?))),
261261
})
262262
}
263263

264264
fn new_map(&mut self, map_size: usize) -> Result<Self::Mem, Error> {
265265
Ok(Self::Mem {
266-
internal: ManuallyDrop::new(self.internal.borrow_mut().new_map(map_size)?),
266+
internal: ManuallyDrop::new(self.internal.lock().unwrap().borrow_mut().new_map(map_size)?),
267267
provider: self.internal.clone(),
268268
})
269269
}
270270

271271
fn from_id_and_size(&mut self, id: ShMemId, size: usize) -> Result<Self::Mem, Error> {
272272
Ok(Self::Mem {
273-
internal: ManuallyDrop::new(self.internal.borrow_mut().from_id_and_size(id, size)?),
273+
internal: ManuallyDrop::new(self.internal.lock().unwrap().borrow_mut().from_id_and_size(id, size)?),
274274
provider: self.internal.clone(),
275275
})
276276
}
277277

278278
fn release_map(&mut self, map: &mut Self::Mem) {
279-
self.internal.borrow_mut().release_map(&mut map.internal)
279+
self.internal.lock().unwrap().borrow_mut().release_map(&mut map.internal)
280280
}
281281

282282
fn clone_ref(&mut self, mapping: &Self::Mem) -> Result<Self::Mem, Error> {
283283
Ok(Self::Mem {
284-
internal: ManuallyDrop::new(self.internal.borrow_mut().clone_ref(&mapping.internal)?),
284+
internal: ManuallyDrop::new(self.internal.lock().unwrap().borrow_mut().clone_ref(&mapping.internal)?),
285285
provider: self.internal.clone(),
286286
})
287287
}
288288

289289
fn post_fork(&mut self) {
290-
self.internal.borrow_mut().post_fork()
290+
self.internal.lock().unwrap().borrow_mut().post_fork()
291291
}
292292
}
293293

0 commit comments

Comments
 (0)