Então eu encontrei sozinho. O código é o seguinte:
struct vm_area_struct *vma;
unsigned long oldflags, newflags, pfn;
vma = find_extend_vma(mm, addr);
oldflags = vma->vm_flags;
newflags = oldflags &= ~VM_EXEC;
//...
//...
//...
if (pte_present(pte)){
printk("NX bit before: %d", pte_exec(pte));
pte = pte_modify(pte, vm_get_page_prot(newflags));
printk("NX bit after: %d", pte_exec(pte));
pfn = pte_pfn(pte);
flush_cache_page(vma, addr, pfn);
set_pte(ptep, pte);
flush_tlb_page(vma, addr);
update_mmu_cache(vma, addr, ptep);
pte_unmap(ptep);
}
e, portanto, o bit NX de um PTE específico é alterado.