# Meeting 2022-10-11
## Mitigations (Peter's [email](https://lore.kernel.org/lkml/Y0BfN1BdVCWssvEu@hirez.programming.kicks-ass.net/))
Boqun: We do not want the 6.1 kernel with Rust support to be exploited with a known attack.
Miguel: Let's get Peter in contact with the person who is responsible for mitigations in Rust
Miguel: will write answer to Peter.
Wedson: In favor of letting Peter wait.
## `syn`
Benno: When will this be merged?
Miguel: This can be merged anytime, but that will not mean that it goes upstream.
Gary: We do not want to diverge `rust-next` and `rust` any more.
Wedson: working on making `rust-next` and `rust` not divergent.
Wedson: Let's not show the ugly solution, take the good solution immediatly
Benno: I like that, C developers expressed they do not mind the "ugly" solution
## `pinned-init`
## Wedson's RCU field projection
Gary: field projection makes RCU better to use
Gary: posted solution in the [RFC](https://github.com/rust-lang/rfcs/pull/3318#issuecomment-1264201012)
Benno: would this suffice?
```rust
unsafe trait RCUProjectable {}
impl<T> Mutex<T> {
pub fn rcu_stuff(&self) -> RCUProjected<'_, T>
where
T: RCUProjectable
{ ... }
}
pub struct RCUProjected<'a, T> {...}
impl<T> RCUList<T> {
fn head(self: RCUProjected<T>) {...}
}
```
Answer: no, we can still get `&mut` via `lock` and have `RCUProjected<'a, T'>` at the same time...
Gary: With field-projection crate you might be able to something like this:
```rust
#[rcu]
struct RcuList<T> {
head: Rcu<Option<Box<Entry<T>>>>,
tail: *mut Box<Entry<T>>,
}
impl<T> RcuMutex<T> {
fn lock(&self) -> RcuMutexGuard<&'_, T>;
}
// With guard
let mut guard = mutex.lock();
// guard does not impl DerefMut
let _: &Rcu<Option<_>> = &guard.head; // okay
let _: &*mut Box<_> = &guard.tail; // okay
&mut guard.tail; // not okay
let _ : &mut *mut Box<_> = project(guard => tail); // this gives a `&mut`
// could be `guard->tail`
project(guard => head); // either not okay or &Rcu<_>
// Without guard
let _: &Rcu<_> = project(mutex => head); // this `&Rcu<>`
// could be `mutex->head`
project(mutex => tail) // not okay
```
Gary: will hack up a solution for next time
## `pin-project`
Benno: `UnsafeUnpin` has unsatisfiable safety requirements with `pinned-init`, if we vendor it, then we need to remove it.
## Bikeshed: `new_mutex!` vs `mutex_new!`
Gary: I hope we can write `Mutex::new()`!
Wedson: Investigate macro 2.0. `mutex::new!()`.
We can solve this via `pub use mutex_new as new;` inside the mutex module.
## Postponed
- async
- general planning: keep date topic to todo's only?