|
@@ -684,8 +684,6 @@ void *__init_or_module text_poke_early(void *addr, const void *opcode,
|
|
|
* It means the size must be writable atomically and the address must be aligned
|
|
|
* in a way that permits an atomic write. It also makes sure we fit on a single
|
|
|
* page.
|
|
|
- *
|
|
|
- * Note: Must be called under text_mutex.
|
|
|
*/
|
|
|
void *text_poke(void *addr, const void *opcode, size_t len)
|
|
|
{
|
|
@@ -700,6 +698,8 @@ void *text_poke(void *addr, const void *opcode, size_t len)
|
|
|
*/
|
|
|
BUG_ON(!after_bootmem);
|
|
|
|
|
|
+ lockdep_assert_held(&text_mutex);
|
|
|
+
|
|
|
if (!core_kernel_text((unsigned long)addr)) {
|
|
|
pages[0] = vmalloc_to_page(addr);
|
|
|
pages[1] = vmalloc_to_page(addr + PAGE_SIZE);
|
|
@@ -782,8 +782,6 @@ int poke_int3_handler(struct pt_regs *regs)
|
|
|
* - replace the first byte (int3) by the first byte of
|
|
|
* replacing opcode
|
|
|
* - sync cores
|
|
|
- *
|
|
|
- * Note: must be called under text_mutex.
|
|
|
*/
|
|
|
void *text_poke_bp(void *addr, const void *opcode, size_t len, void *handler)
|
|
|
{
|
|
@@ -792,6 +790,9 @@ void *text_poke_bp(void *addr, const void *opcode, size_t len, void *handler)
|
|
|
bp_int3_handler = handler;
|
|
|
bp_int3_addr = (u8 *)addr + sizeof(int3);
|
|
|
bp_patching_in_progress = true;
|
|
|
+
|
|
|
+ lockdep_assert_held(&text_mutex);
|
|
|
+
|
|
|
/*
|
|
|
* Corresponding read barrier in int3 notifier for making sure the
|
|
|
* in_progress and handler are correctly ordered wrt. patching.
|