Intercept fortified recvfrom in socket monitor fault tests
This commit is contained in:
1 parent
a4b2d937aa
commit
39e1352d1c
2 files changed
+7
-1
No files matched your search
+1
-1
@@ -284,7 +284,7 @@ test_socket_monitor_LDFLAGS = -Wl,--wrap=socket -Wl,--wrap=bind -Wl,--wrap=close
|
||||
-Wl,--wrap=get_interface_ip_by_index -Wl,--wrap=get_interface_ipv6_addr_nl \
|
||||
-Wl,--wrap=get_default_route_netif_index -Wl,--wrap=get_outgoing_local_ip -Wl,--wrap=etcp_socket_cbk_fire
|
||||
if OS_LINUX
|
||||
test_socket_monitor_LDFLAGS += -Wl,--wrap=recvfrom
|
||||
test_socket_monitor_LDFLAGS += -Wl,--wrap=recvfrom -Wl,--wrap=__recvfrom_chk
|
||||
else
|
||||
test_socket_monitor_LDFLAGS += -Wl,--wrap=read
|
||||
endif
|
||||
|
||||
@@ -123,6 +123,12 @@ ssize_t __wrap_recvfrom(int fd, void* out, size_t cap, int flags, struct sockadd
|
||||
memset(address, 0, sizeof(struct sockaddr_nl)); *address_size = sizeof(struct sockaddr_nl);
|
||||
size_t len = event_length; memcpy(out, event, len); event_length = 0; return (ssize_t)len;
|
||||
}
|
||||
/* При -Og glibc FORTIFY оставляет checked-вызов вместо прямого recvfrom. */
|
||||
ssize_t __wrap___recvfrom_chk(int fd, void* out, size_t cap, size_t object_size, int flags,
|
||||
struct sockaddr* address, socklen_t* address_size) {
|
||||
assert(cap <= object_size);
|
||||
return __wrap_recvfrom(fd, out, cap, flags, address, address_size);
|
||||
}
|
||||
static void fire_event(int status, unsigned index) {
|
||||
struct nlmsghdr* header = (struct nlmsghdr*)event;
|
||||
memset(event, 0, sizeof(event));
|
||||
|
||||
Reference in new issue
Block a user