### Describe the bug
fortify/poll.h includes poll.h, which redirects ppoll to _…_ppoll_time64.
Then fortify/poll.h will #undef ppoll and use the 32 bit version.
Fix: we should not do this when _REDIR_TIME64 is true.
In `usbmuxd/src/main.c`, `ppoll` is called with
``` c
struct timespec
{
time_t tv_sec = 100;
long int tv_nsec = 0;
};
```
where `time_t` is 64 bit, while `ppoll` expects that `time_t` is 32 bit.
As a result, the following `timespec` data is interpreted by `ppoll`:
``` c
// little endianness: timeout is 100 seconds
int32_t tv_sec = 100; // sec & 0xffffffff
int32_t tv_nsec = 0; // sec >> 32
int32_t unused = 0; // nsec
// big endianness: timeout is 100 nano-seconds
int32_t tv_sec = 0; // sec >> 32
int32_t tv_nsec = 100;// sec & 0xffffffff
int32_t unused = 0; // nsec
```
I was able to confirm this by defining a `timespec32` structure, setting `tv_sec = 1` and then casting its pointer to `(struct timespec *)`. This results in timeouts of 1 second on big endianness CPUs as expected.
### OpenWrt version
a872570c043f5beee21c3af695f1a5a77f7eab04 master
### OpenWrt target/subtarget
ath79/generic
### Device
TP-Link TL-WR1043ND v4
### Image kind
Self-built image
### Steps to reproduce
Build and install an image, include `usbmuxd` and the following packages
```
Utilities, libimobiledevice: libimobiledevice-utils, libusbmuxd-utils, plistutil, usbmuxd
Kernel modules, USB Support: kmod-usb-net-ipheth, kmod-usb2
```
`usbmuxd` uses 40% CPU as discussed here https://forum.openwrt.org/t/idle-cpu-usage-of-usbmuxd/140331/15
Build host: macOS 12.6.5.
### Actual behaviour
programs, e.g. `usbmuxd` and system call `ppoll` use different sizes for `time_t`. It is likely that other programs are also affected: notice how `openssh` also calls `ppoll` and if we check the size of `time_t` it's 8.
``` c
// ssh-add.c
int
main(int argc, char **argv)
{
fprintf(stderr, "sizeof(time_t) = %u\n", sizeof(time_t));
// sizeof(time_t) = 8
```
### Expected behaviour
programs, e.g. `usbmuxd` and system call `ppoll` should use the same size for `time_t`. There's also the year 2038 problem to be considered which suggests using 64 bit `time_t` in `ppoll`.
### Additional info
A quick and dirty workaround for `usbmuxd` would be to patch `src/main.c`
``` diff
++ #undef HAVE_PPOLL
#ifndef HAVE_PPOLL
static int ppoll(struct pollfd *fds, nfds_t nfds, const struct timespec *timeout, const sigset_t *sigmask)
```
though considering the severity of the issue, we need to correct it and insure consistency between programs and kernel.
``` bash
grep -r " time_t;" . |grep typedef
./build_dir/host/zip-3.0/zip30/tailor.h: typedef long time_t;
./build_dir/host/bison-3.8.2/config.log:typedef __darwin_time_t time_t;
./build_dir/host/coreutils-9.3/config.log:typedef __darwin_time_t time_t;
./build_dir/toolchain-mips_24kc_gcc-12.2.0_musl/linux-5.15.110/tools/include/nolibc/std.h:typedef signed long time_t;
./build_dir/toolchain-mips_24kc_gcc-12.2.0_musl/gdb-12.1/gdb/testsuite/gdb.python/py-pp-integral.c:typedef long time_t;
./build_dir/toolchain-mips_24kc_gcc-12.2.0_musl/gdb-12.1/gdb/testsuite/gdb.python/py-pp-re-notag.c:typedef long time_t;
./build_dir/toolchain-mips_24kc_gcc-12.2.0_musl/musl-1.2.3/obj/include/bits/alltypes.h:typedef _Int64 time_t;
./build_dir/target-mips_24kc_musl/linux-ath79_generic/linux-5.15.110/tools/include/nolibc/std.h:typedef signed long time_t;
./build_dir/target-mips_24kc_musl/db-4.7.25.NC/dist/s_brew:s/@time_t_decl@/typedef long time_t;/
./build_dir/target-mips_24kc_musl/db-4.7.25.NC/build_brew/db.h:typedef long time_t;
./build_dir/target-mips_24kc_musl/mtr-json/mtr-0.95/ui/mtr.h:typedef int time_t;
./staging_dir/toolchain-mips_24kc_gcc-12.2.0_musl/include/bits/alltypes.h:typedef _Int64 time_t;
```
``` bash
grep -r "int ppoll(struct pollfd" .
./build_dir/toolchain-mips_24kc_gcc-12.2.0_musl/fortify-headers-1.1/include/poll.h:_FORTIFY_FN(ppoll) int ppoll(struct pollf *__f, nfds_t __n, const struct timespec *__s,
./build_dir/toolchain-mips_24kc_gcc-12.2.0_musl/musl-1.2.3/include/poll.h:int ppoll(struct pollfd *, nfds_t, const struct timespec *, const sigset_t *);
./build_dir/toolchain-mips_24kc_gcc-12.2.0_musl/musl-1.2.3/src/linux/ppoll.c:int ppoll(struct pollfd *fds, nfds_t n, const struct timespec *to, const sigset_t *mask)
./build_dir/target-mips_24kc_musl/usbmuxd-1.1.1/src/main.c:static int ppoll(struct pollfd *fds, nfds_t nfds, const struct timespec *timeout, const sigset_t *sigmask)
./staging_dir/toolchain-mips_24kc_gcc-12.2.0_musl/include/fortify/poll.h:_FORTIFY_FN(ppoll) int ppoll(struct pollfd *__f, nfds_t __n, const struct timespec *__s,
./staging_dir/toolchain-mips_24kc_gcc-12.2.0_musl/include/poll.h:int ppoll(struct pollfd *, nfds_t, const struct timespec *, const sigset_t *);
```
The following headers are in use by `usbmuxd/src/main.c`:
``` c
// ./staging_dir/toolchain-mips_24kc_gcc-12.2.0_musl/include/fortify/poll.h
#ifdef _GNU_SOURCE
#undef ppoll
_FORTIFY_FN(ppoll) int ppoll(struct pollfd *__f, nfds_t __n, const struct timespec *__s,
const sigset_t *__m)
{
__typeof__(sizeof 0) __b = __builtin_object_size(__f, 0);
if (__n > __b / sizeof(struct pollfd))
__builtin_trap();
return __orig_ppoll(__f, __n, __s, __m);
}
#endif
// ./staging_dir/toolchain-mips_24kc_gcc-12.2.0_musl/include/poll.h
#if _REDIR_TIME64
#ifdef _GNU_SOURCE
__REDIR(ppoll, __ppoll_time64);
#endif
#endif
```
Suggested solution: `fortify/poll.h` includes `poll.h`, which redirects `ppoll` to `__ppoll_time64`. After that `fortify/poll.h` will `#undef ppoll` and use a version that uses 32 bit `time_t`. We should not do this when `_REDIR_TIME64` is true.
``` diff
./staging_dir/toolchain-mips_24kc_gcc-12.2.0_musl/include/fortify/poll.h
-- #ifdef _GNU_SOURCE
++ #if defined(_GNU_SOURCE) && !_REDIR_TIME64
#undef ppoll
_FORTIFY_FN(ppoll) int ppoll(struct pollfd *__f, nfds_t __n, const struct timespec *__s,
const sigset_t *__m)
{
__typeof__(sizeof 0) __b = __builtin_object_size(__f, 0);
if (__n > __b / sizeof(struct pollfd))
__builtin_trap();
return __orig_ppoll(__f, __n, __s, __m);
}
#endif
```
### Diffconfig
```text
CONFIG_TARGET_ath79=y
CONFIG_TARGET_ath79_generic=y
CONFIG_TARGET_ath79_generic_DEVICE_tplink_tl-wr1043nd-v4=y
CONFIG_BUSYBOX_CUSTOM=y
# CONFIG_ATH9K_HWRNG is not set
# CONFIG_BUSYBOX_CONFIG_ASH_RANDOM_SUPPORT is not set
CONFIG_BUSYBOX_CONFIG_BUNZIP2=y
# CONFIG_BUSYBOX_CONFIG_DATE is not set
CONFIG_BUSYBOX_CONFIG_FEATURE_BZIP2_DECOMPRESS=y
CONFIG_BUSYBOX_CONFIG_FEATURE_EDITING_SAVEHISTORY=y
CONFIG_BUSYBOX_CONFIG_FEATURE_PREFER_IPV4_ADDRESS=y
CONFIG_BUSYBOX_CONFIG_FEATURE_TOP_INTERACTIVE=y
# CONFIG_BUSYBOX_CONFIG_GREP is not set
CONFIG_BUSYBOX_CONFIG_LAST_SUPPORTED_WCHAR=0
# CONFIG_BUSYBOX_CONFIG_LESS is not set
CONFIG_BUSYBOX_CONFIG_LSUSB=y
# CONFIG_BUSYBOX_CONFIG_NC is not set
# CONFIG_BUSYBOX_CONFIG_PS is not set
CONFIG_BUSYBOX_CONFIG_PSTREE=y
# CONFIG_BUSYBOX_CONFIG_RESIZE is not set
CONFIG_BUSYBOX_CONFIG_SHA1SUM=y
CONFIG_BUSYBOX_CONFIG_SHA3SUM=y
CONFIG_BUSYBOX_CONFIG_SHA512SUM=y
CONFIG_BUSYBOX_CONFIG_SUBST_WCHAR=0
# CONFIG_BUSYBOX_CONFIG_TASKSET is not set
CONFIG_BUSYBOX_CONFIG_UNICODE_SUPPORT=y
CONFIG_BUSYBOX_CONFIG_WATCH=y
CONFIG_DROPBEAR_ECC=y
CONFIG_KERNEL_IO_URING=y
# CONFIG_LUA_ECO_MBEDTLS is not set
CONFIG_LUA_ECO_OPENSSL=y
CONFIG_OPENSSL_ENGINE=y
CONFIG_OPENSSL_PREFER_CHACHA_OVER_GCM=y
CONFIG_OPENSSL_WITH_ASM=y
CONFIG_OPENSSL_WITH_CHACHA_POLY1305=y
CONFIG_OPENSSL_WITH_CMS=y
CONFIG_OPENSSL_WITH_DEPRECATED=y
CONFIG_OPENSSL_WITH_ERROR_MESSAGES=y
CONFIG_OPENSSL_WITH_PSK=y
CONFIG_OPENSSL_WITH_SRP=y
CONFIG_OPENSSL_WITH_TLS13=y
CONFIG_OPENVPN_openssl_ENABLE_DEF_AUTH=y
CONFIG_OPENVPN_openssl_ENABLE_FRAGMENT=y
CONFIG_OPENVPN_openssl_ENABLE_LZ4=y
CONFIG_OPENVPN_openssl_ENABLE_LZO=y
CONFIG_OPENVPN_openssl_ENABLE_MULTIHOME=y
CONFIG_OPENVPN_openssl_ENABLE_PF=y
CONFIG_OPENVPN_openssl_ENABLE_PORT_SHARE=y
CONFIG_OPENVPN_openssl_ENABLE_SMALL=y
CONFIG_PACKAGE_DiAssist=y
CONFIG_PACKAGE_NTFS-3G_HAS_PROBE=y
CONFIG_PACKAGE_arp-scan=y
CONFIG_PACKAGE_arptables-legacy=y
CONFIG_PACKAGE_arptables-nft=y
CONFIG_PACKAGE_atop=y
CONFIG_PACKAGE_attendedsysupgrade-common=y
CONFIG_PACKAGE_block-mount=y
CONFIG_PACKAGE_cgi-io=y
CONFIG_PACKAGE_coreutils=y
CONFIG_PACKAGE_coreutils-date=y
CONFIG_PACKAGE_ebtables-legacy=y
CONFIG_PACKAGE_ebtables-legacy-utils=y
CONFIG_PACKAGE_ebtables-nft=y
CONFIG_PACKAGE_etherwake=y
CONFIG_PACKAGE_ethtool=y
CONFIG_PACKAGE_g-net-com=y
CONFIG_PACKAGE_g-net-speed=y
CONFIG_PACKAGE_g_api=y
CONFIG_PACKAGE_g_dhcpd=y
CONFIG_PACKAGE_g_relay=y
CONFIG_PACKAGE_g_resource_builder=y
CONFIG_PACKAGE_gfc-file-compare=y
CONFIG_PACKAGE_grep=y
CONFIG_PACKAGE_gsr-statistic-restore=y
CONFIG_PACKAGE_htop=y
CONFIG_PACKAGE_httpstorm=y
CONFIG_PACKAGE_iftop=y
CONFIG_PACKAGE_img2vhd=y
CONFIG_PACKAGE_ip-full=y
CONFIG_PACKAGE_ip6tables-extra=y
CONFIG_PACKAGE_ip6tables-mod-nat=y
CONFIG_PACKAGE_ip6tables-nft=y
CONFIG_PACKAGE_ip6tables-zz-legacy=y
CONFIG_PACKAGE_ipset=y
CONFIG_PACKAGE_iptables-mod-chaos=y
CONFIG_PACKAGE_iptables-mod-delude=y
CONFIG_PACKAGE_iptables-mod-fuzzy=y
CONFIG_PACKAGE_iptables-mod-ipmark=y
CONFIG_PACKAGE_iptables-mod-ipopt=y
CONFIG_PACKAGE_iptables-mod-iprange=y
CONFIG_PACKAGE_iptables-mod-tarpit=y
CONFIG_PACKAGE_iptables-mod-tee=y
CONFIG_PACKAGE_iptables-nft=y
CONFIG_PACKAGE_iptables-zz-legacy=y
CONFIG_PACKAGE_iputils-arping=y
CONFIG_PACKAGE_iwcap=y
CONFIG_PACKAGE_kmod-arptables=y
CONFIG_PACKAGE_kmod-cdrom=y
CONFIG_PACKAGE_kmod-crypto-sha256=y
CONFIG_PACKAGE_kmod-dma-buf=y
CONFIG_PACKAGE_kmod-ebtables=y
CONFIG_PACKAGE_kmod-ebtables-ipv4=y
CONFIG_PACKAGE_kmod-ebtables-ipv6=y
CONFIG_PACKAGE_kmod-fs-exfat=y
CONFIG_PACKAGE_kmod-fs-ext4=y
CONFIG_PACKAGE_kmod-fs-msdos=y
CONFIG_PACKAGE_kmod-fs-ntfs3=y
CONFIG_PACKAGE_kmod-fs-udf=y
CONFIG_PACKAGE_kmod-fs-vfat=y
CONFIG_PACKAGE_kmod-fuse=y
CONFIG_PACKAGE_kmod-input-core=y
CONFIG_PACKAGE_kmod-ip6tables=y
CONFIG_PACKAGE_kmod-ip6tables-extra=y
CONFIG_PACKAGE_kmod-ipt-chaos=y
CONFIG_PACKAGE_kmod-ipt-compat-xtables=y
CONFIG_PACKAGE_kmod-ipt-conntrack=y
CONFIG_PACKAGE_kmod-ipt-core=y
CONFIG_PACKAGE_kmod-ipt-delude=y
CONFIG_PACKAGE_kmod-ipt-fuzzy=y
CONFIG_PACKAGE_kmod-ipt-ipmark=y
CONFIG_PACKAGE_kmod-ipt-ipopt=y
CONFIG_PACKAGE_kmod-ipt-iprange=y
CONFIG_PACKAGE_kmod-ipt-ipset=y
CONFIG_PACKAGE_kmod-ipt-nat=y
CONFIG_PACKAGE_kmod-ipt-nat6=y
CONFIG_PACKAGE_kmod-ipt-offload=y
CONFIG_PACKAGE_kmod-ipt-tarpit=y
CONFIG_PACKAGE_kmod-ipt-tee=y
CONFIG_PACKAGE_kmod-lib-crc-itu-t=y
CONFIG_PACKAGE_kmod-lib-crc16=y
CONFIG_PACKAGE_kmod-mii=y
CONFIG_PACKAGE_kmod-nf-ipt=y
CONFIG_PACKAGE_kmod-nf-ipt6=y
CONFIG_PACKAGE_kmod-nf-nat6=y
CONFIG_PACKAGE_kmod-nft-arp=y
CONFIG_PACKAGE_kmod-nft-bridge=y
CONFIG_PACKAGE_kmod-nft-compat=y
CONFIG_PACKAGE_kmod-nls-cp1251=y
CONFIG_PACKAGE_kmod-nls-cp437=y
CONFIG_PACKAGE_kmod-nls-cp866=y
CONFIG_PACKAGE_kmod-nls-iso8859-1=y
CONFIG_PACKAGE_kmod-nls-iso8859-13=y
CONFIG_PACKAGE_kmod-nls-iso8859-15=y
CONFIG_PACKAGE_kmod-nls-iso8859-2=y
CONFIG_PACKAGE_kmod-nls-utf8=y
# CONFIG_PACKAGE_kmod-ppp is not set
CONFIG_PACKAGE_kmod-scsi-cdrom=y
CONFIG_PACKAGE_kmod-scsi-core=y
CONFIG_PACKAGE_kmod-tun=y
CONFIG_PACKAGE_kmod-usb-acm=y
CONFIG_PACKAGE_kmod-usb-net=y
CONFIG_PACKAGE_kmod-usb-net-ipheth=y
CONFIG_PACKAGE_kmod-usb-serial=y
CONFIG_PACKAGE_kmod-usb-serial-ftdi=y
CONFIG_PACKAGE_kmod-usb-storage=y
CONFIG_PACKAGE_kmod-usb-storage-extras=y
CONFIG_PACKAGE_kmod-video-core=y
CONFIG_PACKAGE_kmod-video-uvc=y
CONFIG_PACKAGE_kmod-video-videobuf2=y
CONFIG_PACKAGE_less=y
CONFIG_PACKAGE_libatomic=y
CONFIG_PACKAGE_libbpf=y
CONFIG_PACKAGE_libelf=y
CONFIG_PACKAGE_libevent2-core=y
CONFIG_PACKAGE_libgcrypt=y
CONFIG_PACKAGE_libgpg-error=y
CONFIG_PACKAGE_libimobiledevice=y
CONFIG_PACKAGE_libimobiledevice-utils=y
CONFIG_PACKAGE_libip4tc=y
CONFIG_PACKAGE_libip6tc=y
CONFIG_PACKAGE_libipset=y
CONFIG_PACKAGE_libiptext=y
CONFIG_PACKAGE_libiptext-nft=y
CONFIG_PACKAGE_libiptext6=y
CONFIG_PACKAGE_libjpeg-turbo=y
CONFIG_PACKAGE_liblua=y
CONFIG_PACKAGE_liblucihttp=y
CONFIG_PACKAGE_liblucihttp-lua=y
CONFIG_PACKAGE_liblucihttp-ucode=y
CONFIG_PACKAGE_liblzo=y
CONFIG_PACKAGE_libmbedtls=m
CONFIG_PACKAGE_libncurses=y
CONFIG_PACKAGE_libopenssl=y
CONFIG_PACKAGE_libopenssl-conf=y
CONFIG_PACKAGE_libpcap=y
CONFIG_PACKAGE_libpcre=y
CONFIG_PACKAGE_libpcre2=y
CONFIG_PACKAGE_libplist=y
CONFIG_PACKAGE_librt=y
CONFIG_PACKAGE_libubus-lua=y
CONFIG_PACKAGE_libusb-1.0=y
CONFIG_PACKAGE_libusbmuxd=y
CONFIG_PACKAGE_libusbmuxd-utils=y
# CONFIG_PACKAGE_libustream-mbedtls is not set
CONFIG_PACKAGE_libustream-openssl=y
CONFIG_PACKAGE_libuuid=y
CONFIG_PACKAGE_libxml2=y
CONFIG_PACKAGE_libxtables=y
CONFIG_PACKAGE_linux_colour=y
CONFIG_PACKAGE_lua=y
CONFIG_PACKAGE_luci=y
CONFIG_PACKAGE_luci-app-attendedsysupgrade=y
CONFIG_PACKAGE_luci-app-firewall=y
CONFIG_PACKAGE_luci-app-ledtrig-switch=y
CONFIG_PACKAGE_luci-app-ledtrig-usbport=y
CONFIG_PACKAGE_luci-app-mjpg-streamer=y
CONFIG_PACKAGE_luci-app-openvpn=y
CONFIG_PACKAGE_luci-app-opkg=y
CONFIG_PACKAGE_luci-app-wol=y
CONFIG_PACKAGE_luci-base=y
CONFIG_PACKAGE_luci-compat=y
CONFIG_PACKAGE_luci-lib-base=y
CONFIG_PACKAGE_luci-lib-ip=y
CONFIG_PACKAGE_luci-lib-jsonc=y
CONFIG_PACKAGE_luci-lib-nixio=y
CONFIG_PACKAGE_luci-light=y
CONFIG_PACKAGE_luci-lua-runtime=y
CONFIG_PACKAGE_luci-mod-admin-full=y
CONFIG_PACKAGE_luci-mod-network=y
CONFIG_PACKAGE_luci-mod-status=y
CONFIG_PACKAGE_luci-mod-system=y
CONFIG_PACKAGE_luci-proto-ipv6=y
CONFIG_PACKAGE_luci-proto-ppp=y
CONFIG_PACKAGE_luci-ssl-openssl=y
CONFIG_PACKAGE_luci-theme-bootstrap=y
CONFIG_PACKAGE_mjpg-streamer=y
CONFIG_PACKAGE_mjpg-streamer-input-uvc=y
CONFIG_PACKAGE_mjpg-streamer-output-http=y
CONFIG_PACKAGE_mjpg-streamer-www=y
CONFIG_PACKAGE_mtr-json=y
CONFIG_PACKAGE_nano-full=y
CONFIG_PACKAGE_netcat=y
CONFIG_PACKAGE_ntfs-3g=y
CONFIG_PACKAGE_openssh-sftp-server=y
CONFIG_PACKAGE_openssl-util=y
CONFIG_PACKAGE_openvpn-openssl=y
CONFIG_PACKAGE_perl=y
CONFIG_PACKAGE_perlbase-base=y
CONFIG_PACKAGE_perlbase-bytes=y
CONFIG_PACKAGE_perlbase-class=y
CONFIG_PACKAGE_perlbase-config=y
CONFIG_PACKAGE_perlbase-dynaloader=y
CONFIG_PACKAGE_perlbase-errno=y
CONFIG_PACKAGE_perlbase-essential=y
CONFIG_PACKAGE_perlbase-fcntl=y
CONFIG_PACKAGE_perlbase-filehandle=y
CONFIG_PACKAGE_perlbase-getopt=y
CONFIG_PACKAGE_perlbase-io=y
CONFIG_PACKAGE_perlbase-list=y
CONFIG_PACKAGE_perlbase-net=y
CONFIG_PACKAGE_perlbase-posix=y
CONFIG_PACKAGE_perlbase-scalar=y
CONFIG_PACKAGE_perlbase-selectsaver=y
CONFIG_PACKAGE_perlbase-socket=y
CONFIG_PACKAGE_perlbase-symbol=y
CONFIG_PACKAGE_perlbase-tie=y
CONFIG_PACKAGE_perlbase-time=y
CONFIG_PACKAGE_perlbase-xsloader=y
CONFIG_PACKAGE_plistutil=y
# CONFIG_PACKAGE_ppp is not set
CONFIG_PACKAGE_procps-ng=y
CONFIG_PACKAGE_procps-ng-ps=y
CONFIG_PACKAGE_procps-ng-snice=y
CONFIG_PACKAGE_procps-ng-vmstat=y
CONFIG_PACKAGE_procps-ng-w=y
CONFIG_PACKAGE_px5g-standalone=y
CONFIG_PACKAGE_resolveip=y
CONFIG_PACKAGE_rpcd=y
CONFIG_PACKAGE_rpcd-mod-file=y
CONFIG_PACKAGE_rpcd-mod-iwinfo=y
CONFIG_PACKAGE_rpcd-mod-luci=y
CONFIG_PACKAGE_rpcd-mod-rpcsys=y
CONFIG_PACKAGE_rpcd-mod-rrdns=y
CONFIG_PACKAGE_rpcd-mod-ucode=y
CONFIG_PACKAGE_screen=y
CONFIG_PACKAGE_tcpdump=y
CONFIG_PACKAGE_terminfo=y
CONFIG_PACKAGE_tmux=y
CONFIG_PACKAGE_ucode-mod-html=y
CONFIG_PACKAGE_ucode-mod-lua=y
CONFIG_PACKAGE_ucode-mod-math=y
CONFIG_PACKAGE_uhttpd=y
CONFIG_PACKAGE_uhttpd-mod-ubus=y
CONFIG_PACKAGE_usbids=y
CONFIG_PACKAGE_usbmuxd=y
CONFIG_PACKAGE_wakeonlan=y
CONFIG_PACKAGE_whois=y
CONFIG_PACKAGE_wireless-tools=y
CONFIG_PACKAGE_wpad-basic-mbedtls=m
CONFIG_PACKAGE_wpad-basic-openssl=y
CONFIG_PACKAGE_xtables-legacy=y
CONFIG_PACKAGE_xtables-nft=y
CONFIG_PACKAGE_zlib=y
CONFIG_PERL_NOCOMMENT=y
CONFIG_PERL_THREADS=y
# CONFIG_OPENSSL_WITH_IDEA is not set
# CONFIG_OPENSSL_WITH_MDC2 is not set
# CONFIG_OPENSSL_WITH_SEED is not set
# CONFIG_OPENSSL_WITH_WHIRLPOOL is not set
CONFIG_PACKAGE_kmod-lib-crc-ccitt=y
```
### Terms
- [X] I am reporting an issue for OpenWrt, not an unsupported fork.