Re: [PATCH 2/3] proc: query LSMs for introspective mem access (if PROC_MEM_FORCE_ALWAYS)
"Lorenzo Stoakes (ARM)" <[email protected]>
| Newsgroups | org.kvack.linux-mm,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-security-module,org.kernel.vger.selinux |
|---|---|
| Message-ID | <aox7tVIQBMuz-xFO@gremlin> |
On Mon, Aug 24, 2026 at 07:06:04PM +0200, Jann Horn wrote: > On Fri, Aug 21, 2026 at 8:52 PM Lorenzo Stoakes (ARM) <[email protected]> wrote: > > OK so the whole thing is: > > > > mem_open() > > -> __mem_open() > > -> proc_mem_open() > > -> mm_access() > > -> may_access_mm() > > > > And: > > > > static bool may_access_mm(struct mm_struct *mm, struct task_struct *task, unsigned int mode) > > { > > if (mm == current->mm) > > return true; > > ... > > } > > > > And what this flag is carrying is 'hey the reason we allowed the _open_ is > > because it's looking at its own address space'. > > Yes. OK cool. Obviously do agree with David that calling out the ownership aspect in the name would be helpful! > > > I did wonder if what you're protecting against is even a process updating > > execmem _it_ owns, no fd shared anywhere, as something LSM might want to > > prevent even so? > > Sorry, can you rephrase that? My goal with this series is to let LSMs > block a process that tries to modify its own non-writable executable > memory using /proc/self/mem; I'm not sure if that answers your > question. Right, I guess my confusion comes from David's clarification about passing an fd, perhaps I misunderstood that being somehow the _primary_ thing you were protecting against. > > For context: In this series, I'm using "execmem" to refer to the > SELinux permission PROCESS__EXECMEM, which essentially controls > whether a process is allowed to create writable+executable mappings > that can contain anonymous pages. Additionally, it blocks creating > executable mappings of S_PRIVATE inodes. There are other SELinux > permissions for things like making a VMA containing anonymous pages > executable (FILE__EXECMOD and others) or mapping files as executable > (FILE__EXECUTE). FILE__EXECUTE is granular, it can be granted based on > the security labels of the process and the file that is mapped. Ack thanks for the clarification. > > > The sharing a /proc/mem fd seems like that's a pretty dumb thing to do in > > general :) but I guess you have to protect against that. > > Yeah, it's a kinda weird thing to do... Yup :)) but I guess we have to account for people doing weird stuff... In this case (I do mention it in a reply elsewhere I think) it does seem like perhaps you should separately check for current->mm != mm of (what was originally /proc/self/mm)? Or at least it seems like a crazy thing to be able to get full access to another process's memory (that it... gave you though). Anyway perhaps overthinking it :) -- Cheers, Lorenzo