Example #1
0
    def test_sk_tcpstate(self):
        with create_socket() as sock:
            task = find_task(self.prog, os.getpid())
            file = fget(task, sock.fileno())
            sk = cast("struct socket *", file.private_data).sk
            self.assertEqual(sk_tcpstate(sk), self.prog["TCP_CLOSE"])

            sock.bind(("localhost", 0))
            sock.listen()
            self.assertEqual(sk_tcpstate(sk), self.prog["TCP_LISTEN"])

            with socket.create_connection(
                    sock.getsockname()), sock.accept()[0] as sock2:
                file = fget(task, sock2.fileno())
                sk = cast("struct socket *", file.private_data).sk
                self.assertEqual(sk_tcpstate(sk), self.prog["TCP_ESTABLISHED"])
Example #2
0
def get_net_ns_by_fd(task: Object, fd: IntegerLike) -> Object:
    """
    Get a network namespace from a task and a file descriptor referring to a
    network namespace NSFS inode, e.g. ``/proc/$PID/ns/net`` or
    ``/var/run/netns/$NAME``.

    :param task: ``struct task_struct *``
    :param fd: File descriptor.
    :return: ``struct net *``
    :raises ValueError: If *fd* does not refer to a network namespace inode
    """
    return get_net_ns_by_inode(fget(task, fd).f_inode)
Example #3
0
 def test_sk_fullsock(self):
     with create_socket() as sock:
         file = fget(find_task(self.prog, os.getpid()), sock.fileno())
         sk = cast("struct socket *", file.private_data).sk.read_()
         self.assertTrue(sk_fullsock(sk))
Example #4
0
 def test_kernfs_path(self):
     with open("/sys/kernel/vmcoreinfo", "r") as f:
         file = fget(find_task(self.prog, os.getpid()), f.fileno())
         kn = cast("struct kernfs_node *", file.f_inode.i_private)
         self.assertEqual(kernfs_path(kn), b"/kernel/vmcoreinfo")
Example #5
0
File: vfs.py Project: sravyamks/sdb
 def _call_one(self, obj: drgn.Object) -> Iterable[drgn.Object]:
     for fd in self.args.fd:
         yield drgn_fs.fget(obj, fd)
Example #6
0
 def test_fget(self):
     with tempfile.NamedTemporaryFile(prefix="drgn-tests-") as f:
         file = fget(find_task(self.prog, os.getpid()), f.fileno())
         self.assertEqual(d_path(file.f_path), os.fsencode(os.path.abspath(f.name)))