diff --git a/src/libs/compat/freebsd_network/device_hooks.c b/src/libs/compat/freebsd_network/device_hooks.c index 565f2db2b1..7a5331d5a3 100644 --- a/src/libs/compat/freebsd_network/device_hooks.c +++ b/src/libs/compat/freebsd_network/device_hooks.c @@ -244,10 +244,13 @@ compat_control(void *cookie, uint32 op, void *arg, size_t length) if ((ifp->if_flags & IFF_MULTICAST) == 0) return B_NOT_SUPPORTED; + if (length != ETHER_ADDR_LEN) + return B_BAD_VALUE; memset(&address, 0, sizeof(address)); address.sdl_family = AF_LINK; - memcpy(LLADDR(&address), arg, ETHER_ADDR_LEN); + if (user_memcpy(LLADDR(&address), arg, ETHER_ADDR_LEN) < B_OK) + return B_BAD_ADDRESS; if (op == ETHER_ADDMULTI) return if_addmulti(ifp, (struct sockaddr *)&address, NULL);