MCPcopy Create free account
hub / github.com/qilingframework/qiling / ql_syscall_getsockopt

Function ql_syscall_getsockopt

qiling/os/posix/syscall/socket.py:312–340  ·  view source on GitHub ↗
(ql: Qiling, sockfd: int, level: int, optname: int, optval_addr: int, optlen_addr: int)

Source from the content-addressed store, hash-verified

310
311
312def 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
343def ql_syscall_setsockopt(ql: Qiling, sockfd: int, level: int, optname: int, optval_addr: int, optlen: int):

Callers

nothing calls this directly

Calls 6

get_opened_socketFunction · 0.85
__host_socket_levelFunction · 0.85
__host_socket_optionFunction · 0.85
read_ptrMethod · 0.80
getsockoptMethod · 0.80
writeMethod · 0.45

Tested by

no test coverage detected