On Tue, Aug 26, 2025 at 04:10:31PM +0000, Pasha Tatashin wrote:
quoted
I think in the calls the idea was it was reasonable to start without
sessions fds at all, but in this case we shouldn't be mucking with
pids or current.
The existing interface, with the addition of passing a pidfd, provides
the necessary flexibility without being invasive. The change would be
localized to the new code that performs the FD retrieval and wouldn't
involve spoofing current or making widespread changes.
For example, to handle cgroup charging for a memfd, the flow inside
memfd_luo_retrieve() would look something like this:
task = get_pid_task(target_pid, PIDTYPE_PID);
mm = get_task_mm(task);
// ...
folio = kho_restore_folio(phys);
// Charge to the target mm, not 'current->mm'
mem_cgroup_charge(folio, mm, ...);
mmput(mm);
put_task_struct(task);
Execpt it doesn't work like that in all places, iommufd for example
uses GFP_KERNEL_ACCOUNT which relies on current.
How you fix that when current is the wrong cgroup, I have no idea if
it is even possible.
Jason