Function report | 
Source Code:arch\x86\kernel\alternative.c | 
Create Date:2022-07-28 07:45:08 | 
| Last Modify:2020-03-12 14:18:49 | Copyright©Brick | 
| home page | Tree | 
| Annotation kernel can get tool activity | Download SCCT | Chinese | 
Name:__text_poke
Proto:static void *__text_poke(void *addr, const void *opcode, size_t len)
Type:void
Parameter:
| Type | Parameter | Name | 
|---|---|---|
| void * | addr | |
| const void * | opcode | |
| size_t | len | 
| 791 | cross_page_boundary = offset_in_page(addr) + len > PAGE_SIZE | 
| 803 | BUG_ON(!after_bootmem) | 
| 805 | If Not core_kernel_text((unsignedlong)addr) Then | 
| 806 | pages[0] = Support for virtually mapped pages | 
| 807 | If cross_page_boundary Then pages[1] = Support for virtually mapped pages | 
| 809 | Else | 
| 810 | pages[0] = virt_to_page(kaddr) returns a valid pointer if and only if* virt_addr_valid(kaddr) returns true.(addr) | 
| 811 | WARN_ON(!PageReserved(pages[0])) | 
| 819 | BUG_ON(!pages[0] || (cross_page_boundary && !pages[1])) | 
| 821 | local_irq_save(flags) | 
| 827 | pgprot = __pgprot(pgprot_val(PAGE_KERNEL) & ~_PAGE_GLOBAL) | 
| 832 | ptep = get_locked_pte(poking_mm, poking_addr, & ptl) | 
| 840 | set_pte_at(poking_mm, poking_addr, ptep, pte) | 
| 842 | If cross_page_boundary Then | 
| 844 | set_pte_at(poking_mm, poking_addr + PAGE_SIZE, ptep + 1, pte) | 
| 851 | prev = Using a temporary mm allows to set temporary mappings that are not accessible* by other CPUs | 
| 854 | memcpy((u8 * )poking_addr + offset_in_page(addr), opcode, len) | 
| 863 | pte_clear(poking_mm, poking_addr, ptep) | 
| 864 | If cross_page_boundary Then pte_clear(poking_mm, poking_addr + PAGE_SIZE, ptep + 1) | 
| 872 | unuse_temporary_mm(prev) | 
| 878 | flush_tlb_mm_range(poking_mm, poking_addr, poking_addr + (cross_page_boundary ? 2 : 1) * PAGE_SIZE, PAGE_SHIFT determines the page size , false) | 
| 888 | pte_unmap_unlock(ptep, ptl) | 
| 889 | local_irq_restore(flags) | 
| 890 | Return addr | 
| Name | Describe | 
|---|---|
| text_poke | xt_poke - Update instructions on a live kernel*@addr: address to modify*@opcode: source of the copy*@len: length to copy* Only atomic text poke/set should be allowed when not doing early patching | 
| text_poke_kgdb | xt_poke_kgdb - Update instructions on a live kernel by kgdb*@addr: address to modify*@opcode: source of the copy*@len: length to copy* Only atomic text poke/set should be allowed when not doing early patching | 
| Source code conversion tool public plug-in interface  | X | 
|---|---|
| Support c/c++/esqlc/java Oracle/Informix/Mysql Plug-in can realize: logical Report Code generation and batch code conversion  |