README.md
Rendering markdown...
define cc
disable break
c
enable break
end
define i
file ./releases/mitigation-v4-6.6/vmlinux
dir ../source/mitigation466
target remote :1234
# b *tls_strp_msg_done
# b *kfree_skbmem
# b *kfree_skb_list_reason
# b net/tls/tls_sw.c:2732
# b consume_skb
# b *kfree_skb_list_reason
# b *tls_sk_proto_close
# b tls_sw_recvmsg
# get the address of the page
b net/tls/tls_sw.c:2027
# b process_rx_list
# load-vmlinux
# b kfree_skbmem
# b *unix_stream_sendmsg
# b *tcp_time_wait
b do_splice
c
end
define dm
# b *pipe_read+0xea if $rdi=$page
# remember to set $pipe=pipe
b *0xffffffff814b7cc2 if $rax==$page
b *0xffffffff82050f28 if $rbx==$page
b *tls_strp_done
b *pipe_read+0xe2 if $rdi==$page
b *alloc_slab_page_virtual+0x317 if $rax==$page
b *pipe_read+0x8f if $r15==$pipe
end
define wut
p *(struct skb_shared_info*) ((*(struct sk_buff*)$anchor).head + (*(struct sk_buff*)$anchor).end)
set $page=(*(struct skb_shared_info*) ((*(struct sk_buff*)$anchor).head + (*(struct sk_buff*)$anchor).end)).frags[0].bv_page
set $a=(*(struct skb_shared_info*) ((*(struct sk_buff*)$anchor).head + (*(struct sk_buff*)$anchor).end)).frag_list
# b net/core/skbuff.c:981
dm
end
define a
p (*(struct skb_shared_info*) ((*(struct sk_buff*)$anchor).head + (*(struct sk_buff*)$anchor).end)).frag_list
end
define hihi
set $ctx=ctx
set $anchor=$ctx->strp.anchor
end
# =============== PYTHON UTIL ==================
define page_to_virt
set $page = $arg0
set $offset = ((unsigned long)$page - (unsigned long)vmemmap_base) >> 6
set $virt = ($offset << 12) + page_offset_base
p/x $virt
end
define load-vmlinux
python
import re
from gdb import execute
# Step 1: Get kernel base
kbase_out = execute("kbase", to_string=True)
kbase_match = re.search(r'kernel text:\s+([^\s-]+)-', kbase_out)
if not kbase_match:
raise Exception("[-] Failed to extract kbase")
kbase = int(kbase_match.group(1), 16)
print(f"[+] Kernel base: {hex(kbase)}")
# Step 2: Get _text address
text_out = execute("print _text", to_string=True)
text_match = re.search(r'\$[0-9]+\s+=\s+(0x[0-9a-f]+)', text_out)
if not text_match:
raise Exception("[-] Failed to extract _text address")
text_addr = int(text_match.group(1), 16)
print(f"[+] _text address: {hex(text_addr)}")
# Step 3: Compute offset
offset = kbase - text_addr
print(f"[+] Offset: {hex(offset)}")
# Step 4: Load symbol file
execute(f"symbol-file ./releases/mitigation-v4-6.6/vmlinux -o {offset:#x}")
print("[+] symbol-file loaded.")
end
end