Re: [PATCH 1/8] execmem: drop unused execmem_update_copy()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 





Le 07/07/2025 à 13:49, Mike Rapoport a écrit :
On Mon, Jul 07, 2025 at 12:10:43PM +0200, Christophe Leroy wrote:

Le 04/07/2025 à 15:49, Mike Rapoport a écrit :
From: "Mike Rapoport (Microsoft)" <rppt@xxxxxxxxxx>

The execmem_update_copy() that used text poking was required when memory
allocated from ROX cache was always read-only. Since now its permissions
can be switched to read-write there is no need in a function that updates
memory with text poking.

Erm. Looks like I missed the patch that introduced this change.

On some variant of powerpc, namely book3s/32, this is not feasible.

The only user of EXECMEM_ROX_CACHE for now is x86-64, we can always revisit
when powerpc book3s/32 would want to opt in to cache usage.

And it seems that [MODULES_VADDR, MODULES_END] is already mapped with
"large pages", isn't it?

I don't think so. It uses execmem_alloc() which sets VM_ALLOW_HUGE_VMAP only when using EXECMEM_ROX_CACHE. And book3s/32 doesn't have large pages.

Only 8xx has large pages but they are not PMD aligned (PMD_SIZE is 4M while large pages are 512k and 8M) so it wouldn't work well with existing execmem_vmalloc().


The granularity for setting the NX (non exec) bit is 256 Mbytes sections.
So the area dedicated to execmem [MODULES_VADDR; MODULES_END[ always have
the NX bit unset.

You can change any page within this area from ROX to RWX but you can't make
it RW without X. If you want RW without X you must map it in the VMALLOC
area, as VMALLOC area have NX bit always set.

So what will happen when one callse

	set_memory_nx()
	set_memory_rw()

in such areas?

Nothing will happen. It will successfully unset the X bit on the PTE but that will be ignored by the HW which only relies on the segment's NX bit which is set for the entire VMALLOC area and unset for the entire MODULE area.

That's one of the reasons why it has CONFIG_ARCH_WANTS_MODULES_DATA_IN_VMALLOC , to make sure text is allocated in exec area and data in no-exec area.

Christophe




[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux