(ql: Qiling, sockfd: int, level: int, optname: int, optval_addr: int, optlen_addr: int)
| 310 | |
| 311 | |
| 312 | def ql_syscall_getsockopt(ql: Qiling, sockfd: int, level: int, optname: int, optval_addr: int, optlen_addr: int): |
| 313 | sock = get_opened_socket(ql.os, sockfd) |
| 314 | |
| 315 | if isinstance(sock, int): |
| 316 | return sock |
| 317 | |
| 318 | vsock_level = level |
| 319 | hsock_level = __host_socket_level(vsock_level, ql.arch.type) |
| 320 | |
| 321 | ql.log.debug(f'Converted emulated socket level {vsock_level} to host socket level {hsock_level}') |
| 322 | |
| 323 | vsock_opt = optname |
| 324 | hsock_opt = __host_socket_option(vsock_level, vsock_opt, ql.arch.type, ql.os.type) |
| 325 | |
| 326 | ql.log.debug(f'Converted emulated socket option {vsock_opt} to host socket option {hsock_opt}') |
| 327 | |
| 328 | optlen = min(ql.mem.read_ptr(optlen_addr, 4, signed=True), 1024) |
| 329 | |
| 330 | if optlen < 0: |
| 331 | return -EINVAL |
| 332 | |
| 333 | try: |
| 334 | optval = sock.getsockopt(hsock_level, hsock_opt, optlen) |
| 335 | except (ConnectionError, OSError) as ex: |
| 336 | return -ex.errno |
| 337 | |
| 338 | ql.mem.write(optval_addr, optval) |
| 339 | |
| 340 | return 0 |
| 341 | |
| 342 | |
| 343 | def ql_syscall_setsockopt(ql: Qiling, sockfd: int, level: int, optname: int, optval_addr: int, optlen: int): |
nothing calls this directly
no test coverage detected