Linux jobworks 6.8.0-136-generic #136-Ubuntu SMP PREEMPT_DYNAMIC Wed Jul 1 21:53:05 UTC 2026 x86_64
Apache/2.4.58 (Ubuntu)
Server IP : 10.0.1.5 & Your IP : 216.73.217.52
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
src /
linux-headers-6.8.0-136 /
include /
linux /
Delete
Unzip
Name
Size
Permission
Date
Action
amba
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
atomic
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
avf
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
bcma
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
byteorder
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
can
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
cdx
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
ceph
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
clk
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
comedi
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
crush
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
decompress
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
device
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
dma
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
dsa
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
extcon
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
firmware
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
fpga
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
framer
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
fsl
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
gpio
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
greybus
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
habanalabs
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
hsi
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
i3c
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
iio
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
input
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
io_uring
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
irqchip
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
isdn
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
lockd
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
lsm
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mailbox
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mdio
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mfd
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mlx4
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mlx5
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mmc
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mtd
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
mux
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
net
[ DIR ]
drwxr-xr-x
2026-07-17 06:28
netfilter
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
netfilter_arp
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
netfilter_bridge
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
netfilter_ipv4
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
netfilter_ipv6
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
pcs
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
pds
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
perf
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
phy
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
pinctrl
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
platform_data
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
power
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
pse-pd
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
qed
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
raid
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
regulator
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
remoteproc
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
reset
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
rpmsg
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
rtc
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
sched
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
soc
[ DIR ]
drwxr-xr-x
2026-07-17 06:28
soundwire
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
spi
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
ssb
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
sunrpc
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
surface_aggregator
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
ulpi
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
unaligned
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
usb
[ DIR ]
drwxr-xr-x
2026-07-17 06:29
8250_pci.h
1.01
KB
-rw-r--r--
2024-03-10 20:38
acct.h
2.45
KB
-rw-r--r--
2024-03-10 20:38
acpi.h
44.11
KB
-rw-r--r--
2026-07-01 19:48
acpi_amd_wbrf.h
2.24
KB
-rw-r--r--
2024-03-10 20:38
acpi_dma.h
3.08
KB
-rw-r--r--
2024-03-10 20:38
acpi_iort.h
2.64
KB
-rw-r--r--
2024-03-10 20:38
acpi_mdio.h
819
B
-rw-r--r--
2024-03-10 20:38
acpi_pmtmr.h
674
B
-rw-r--r--
2024-03-10 20:38
acpi_viot.h
478
B
-rw-r--r--
2024-03-10 20:38
adb.h
1.79
KB
-rw-r--r--
2024-03-10 20:38
adfs_fs.h
574
B
-rw-r--r--
2024-03-10 20:38
adreno-smmu-priv.h
2.74
KB
-rw-r--r--
2024-03-10 20:38
adxl.h
310
B
-rw-r--r--
2024-03-10 20:38
aer.h
1.29
KB
-rw-r--r--
2024-03-10 20:38
agp_backend.h
3.45
KB
-rw-r--r--
2024-03-10 20:38
agpgart.h
3.79
KB
-rw-r--r--
2024-03-10 20:38
ahci-remap.h
607
B
-rw-r--r--
2024-03-10 20:38
ahci_platform.h
1.81
KB
-rw-r--r--
2024-03-10 20:38
aio.h
570
B
-rw-r--r--
2024-03-10 20:38
alarmtimer.h
1.94
KB
-rw-r--r--
2024-03-10 20:38
alcor_pci.h
8.7
KB
-rw-r--r--
2024-03-10 20:38
align.h
552
B
-rw-r--r--
2024-03-10 20:38
altera_jtaguart.h
379
B
-rw-r--r--
2024-03-10 20:38
altera_uart.h
397
B
-rw-r--r--
2024-03-10 20:38
amd-iommu.h
2.07
KB
-rw-r--r--
2024-03-10 20:38
amd-pmf-io.h
1.25
KB
-rw-r--r--
2024-03-10 20:38
anon_inodes.h
855
B
-rw-r--r--
2024-03-10 20:38
aperture.h
1.61
KB
-rw-r--r--
2024-03-10 20:38
apm-emulation.h
1.56
KB
-rw-r--r--
2024-03-10 20:38
apm_bios.h
2.25
KB
-rw-r--r--
2024-03-10 20:38
apple-gmux.h
4.63
KB
-rw-r--r--
2024-03-10 20:38
arch_topology.h
3
KB
-rw-r--r--
2024-03-10 20:38
args.h
994
B
-rw-r--r--
2024-03-10 20:38
arm-cci.h
1.39
KB
-rw-r--r--
2024-03-10 20:38
arm-smccc.h
17.18
KB
-rw-r--r--
2026-07-01 19:48
arm_ffa.h
13.25
KB
-rw-r--r--
2024-03-10 20:38
arm_sdei.h
2.67
KB
-rw-r--r--
2026-07-01 19:48
armada-37xx-rwtm-mailbox.h
431
B
-rw-r--r--
2024-03-10 20:38
array_size.h
332
B
-rw-r--r--
2024-03-10 20:38
ascii85.h
555
B
-rw-r--r--
2024-03-10 20:38
asn1.h
1.79
KB
-rw-r--r--
2024-03-10 20:38
asn1_ber_bytecode.h
2.52
KB
-rw-r--r--
2024-03-10 20:38
asn1_decoder.h
468
B
-rw-r--r--
2024-03-10 20:38
asn1_encoder.h
1006
B
-rw-r--r--
2024-03-10 20:38
assoc_array.h
2.88
KB
-rw-r--r--
2024-03-10 20:38
assoc_array_priv.h
5.3
KB
-rw-r--r--
2024-03-10 20:38
async.h
4.33
KB
-rw-r--r--
2024-03-10 20:38
async_tx.h
6.7
KB
-rw-r--r--
2024-03-10 20:38
ata.h
30.45
KB
-rw-r--r--
2026-07-01 19:48
ata_platform.h
755
B
-rw-r--r--
2024-03-10 20:38
atalk.h
4.45
KB
-rw-r--r--
2024-03-10 20:38
ath9k_platform.h
1.44
KB
-rw-r--r--
2024-03-10 20:38
atm.h
287
B
-rw-r--r--
2024-03-10 20:38
atm_tcp.h
542
B
-rw-r--r--
2024-03-10 20:38
atmdev.h
10.23
KB
-rw-r--r--
2026-07-01 19:48
atmel-isc-media.h
2.07
KB
-rw-r--r--
2024-03-10 20:38
atmel-ssc.h
9.74
KB
-rw-r--r--
2024-03-10 20:38
atmel_pdc.h
1.26
KB
-rw-r--r--
2024-03-10 20:38
atomic.h
2.58
KB
-rw-r--r--
2024-03-10 20:38
attribute_container.h
2.74
KB
-rw-r--r--
2024-03-10 20:38
audit.h
20.24
KB
-rw-r--r--
2026-07-01 19:48
audit_arch.h
784
B
-rw-r--r--
2026-07-01 19:48
auto_dev-ioctl.h
296
B
-rw-r--r--
2024-03-10 20:38
auto_fs.h
278
B
-rw-r--r--
2024-03-10 20:38
auxiliary_bus.h
9.67
KB
-rw-r--r--
2024-03-10 20:38
auxvec.h
304
B
-rw-r--r--
2024-03-10 20:38
average.h
2.42
KB
-rw-r--r--
2024-03-10 20:38
backing-dev-defs.h
8.4
KB
-rw-r--r--
2024-03-10 20:38
backing-dev.h
10.46
KB
-rw-r--r--
2026-07-01 19:48
backing-file.h
1.34
KB
-rw-r--r--
2024-03-10 20:38
backlight.h
13.13
KB
-rw-r--r--
2024-03-10 20:38
badblocks.h
2.63
KB
-rw-r--r--
2024-03-10 20:38
balloon_compaction.h
5.69
KB
-rw-r--r--
2026-07-01 19:48
base64.h
370
B
-rw-r--r--
2024-03-10 20:38
bcd.h
683
B
-rw-r--r--
2024-03-10 20:38
bch.h
2.1
KB
-rw-r--r--
2024-03-10 20:38
bcm47xx_nvram.h
1.2
KB
-rw-r--r--
2024-03-10 20:38
bcm47xx_sprom.h
616
B
-rw-r--r--
2024-03-10 20:38
bcm47xx_wdt.h
555
B
-rw-r--r--
2024-03-10 20:38
bcm963xx_nvram.h
2.96
KB
-rw-r--r--
2024-03-10 20:38
bcm963xx_tag.h
3.6
KB
-rw-r--r--
2024-03-10 20:38
binfmts.h
4.51
KB
-rw-r--r--
2026-07-01 19:48
bio.h
21.19
KB
-rw-r--r--
2026-07-01 19:48
bit_spinlock.h
2.3
KB
-rw-r--r--
2024-03-10 20:38
bitfield.h
6.37
KB
-rw-r--r--
2024-03-10 20:38
bitmap-str.h
842
B
-rw-r--r--
2024-03-10 20:38
bitmap.h
26.05
KB
-rw-r--r--
2026-07-01 19:48
bitops.h
9.59
KB
-rw-r--r--
2026-07-01 19:48
bitrev.h
2.53
KB
-rw-r--r--
2024-03-10 20:38
bits.h
2.48
KB
-rw-r--r--
2026-07-01 19:48
blk-cgroup.h
1.53
KB
-rw-r--r--
2024-03-10 20:38
blk-crypto-profile.h
5.3
KB
-rw-r--r--
2024-03-10 20:38
blk-crypto.h
4.13
KB
-rw-r--r--
2024-03-10 20:38
blk-integrity.h
4.68
KB
-rw-r--r--
2026-07-01 19:48
blk-mq-pci.h
271
B
-rw-r--r--
2024-03-10 20:38
blk-mq-virtio.h
294
B
-rw-r--r--
2024-03-10 20:38
blk-mq.h
35.19
KB
-rw-r--r--
2026-07-01 19:48
blk-pm.h
647
B
-rw-r--r--
2024-03-10 20:38
blk_types.h
16.5
KB
-rw-r--r--
2026-07-01 19:48
blkdev.h
45.69
KB
-rw-r--r--
2026-07-01 19:48
blkpg.h
436
B
-rw-r--r--
2024-03-10 20:38
blktrace_api.h
3.55
KB
-rw-r--r--
2024-03-10 20:38
blockgroup_lock.h
810
B
-rw-r--r--
2024-03-10 20:38
bma150.h
1.25
KB
-rw-r--r--
2024-03-10 20:38
bootconfig.h
9.27
KB
-rw-r--r--
2026-07-01 19:48
bootmem_info.h
1.69
KB
-rw-r--r--
2024-03-10 20:38
bottom_half.h
1013
B
-rw-r--r--
2024-03-10 20:38
bpf-cgroup-defs.h
2.07
KB
-rw-r--r--
2024-03-10 20:38
bpf-cgroup.h
18.2
KB
-rw-r--r--
2026-07-01 19:48
bpf-netns.h
1.41
KB
-rw-r--r--
2024-03-10 20:38
bpf.h
103.56
KB
-rw-r--r--
2026-07-01 19:48
bpf_lirc.h
698
B
-rw-r--r--
2024-03-10 20:38
bpf_local_storage.h
5.61
KB
-rw-r--r--
2024-03-10 20:38
bpf_lsm.h
2.01
KB
-rw-r--r--
2026-07-01 19:48
bpf_mem_alloc.h
2.05
KB
-rw-r--r--
2026-07-01 19:48
bpf_mprog.h
9.29
KB
-rw-r--r--
2024-03-10 20:38
bpf_trace.h
166
B
-rw-r--r--
2024-03-10 20:38
bpf_types.h
6.01
KB
-rw-r--r--
2024-03-10 20:38
bpf_verifier.h
31.84
KB
-rw-r--r--
2026-07-01 19:48
bpfptr.h
2
KB
-rw-r--r--
2024-03-10 20:38
brcmphy.h
16.93
KB
-rw-r--r--
2024-03-10 20:38
bsearch.h
624
B
-rw-r--r--
2024-03-10 20:38
bsg-lib.h
1.69
KB
-rw-r--r--
2024-03-10 20:38
bsg.h
499
B
-rw-r--r--
2024-03-10 20:38
btf.h
17.37
KB
-rw-r--r--
2026-07-01 19:48
btf_ids.h
7.67
KB
-rw-r--r--
2024-03-10 20:38
btree-128.h
2.67
KB
-rw-r--r--
2024-03-10 20:38
btree-type.h
3.9
KB
-rw-r--r--
2024-03-10 20:38
btree.h
6.84
KB
-rw-r--r--
2024-03-10 20:38
btrfs.h
145
B
-rw-r--r--
2024-03-10 20:38
buffer_head.h
16.34
KB
-rw-r--r--
2026-07-01 19:48
bug.h
2.17
KB
-rw-r--r--
2024-03-10 20:38
build-salt.h
375
B
-rw-r--r--
2024-03-10 20:38
build_bug.h
2.99
KB
-rw-r--r--
2024-03-10 20:38
buildid.h
581
B
-rw-r--r--
2024-03-10 20:38
bvec.h
7.31
KB
-rw-r--r--
2026-07-01 19:48
c2port.h
1.35
KB
-rw-r--r--
2024-03-10 20:38
cache.h
5.51
KB
-rw-r--r--
2026-07-01 19:48
cacheflush.h
675
B
-rw-r--r--
2024-03-10 20:38
cacheinfo.h
4.27
KB
-rw-r--r--
2024-03-10 20:38
call_once.h
1.67
KB
-rw-r--r--
2026-07-01 19:48
capability.h
6.45
KB
-rw-r--r--
2026-07-01 19:48
cb710.h
5.36
KB
-rw-r--r--
2024-03-10 20:38
cc_platform.h
3.07
KB
-rw-r--r--
2024-03-10 20:38
cciss_ioctl.h
1.03
KB
-rw-r--r--
2024-03-10 20:38
ccp.h
18.14
KB
-rw-r--r--
2024-03-10 20:38
cdev.h
845
B
-rw-r--r--
2024-03-10 20:38
cdrom.h
8.99
KB
-rw-r--r--
2026-07-01 19:48
cfag12864b.h
1.47
KB
-rw-r--r--
2024-03-10 20:38
cfi.h
1.23
KB
-rw-r--r--
2024-03-10 20:38
cfi_types.h
1.06
KB
-rw-r--r--
2024-03-10 20:38
cgroup-defs.h
26.29
KB
-rw-r--r--
2026-07-01 19:48
cgroup.h
26.3
KB
-rw-r--r--
2026-07-01 19:48
cgroup_api.h
26
B
-rw-r--r--
2024-03-10 20:38
cgroup_rdma.h
1.18
KB
-rw-r--r--
2024-03-10 20:38
cgroup_refcnt.h
2.59
KB
-rw-r--r--
2024-03-10 20:38
cgroup_subsys.h
1.23
KB
-rw-r--r--
2024-03-10 20:38
circ_buf.h
1.09
KB
-rw-r--r--
2024-03-10 20:38
cleanup.h
9.41
KB
-rw-r--r--
2026-07-01 19:48
clk-provider.h
62.98
KB
-rw-r--r--
2024-03-10 20:38
clk.h
34.21
KB
-rw-r--r--
2026-07-01 19:48
clkdev.h
1.2
KB
-rw-r--r--
2024-03-10 20:38
clockchips.h
7.29
KB
-rw-r--r--
2024-03-10 20:38
clocksource.h
9.99
KB
-rw-r--r--
2026-07-01 19:48
clocksource_ids.h
247
B
-rw-r--r--
2024-03-10 20:38
closure.h
12.33
KB
-rw-r--r--
2024-03-10 20:38
cma.h
2.01
KB
-rw-r--r--
2024-03-10 20:38
cn_proc.h
1.85
KB
-rw-r--r--
2024-03-10 20:38
cnt32_to_63.h
3.46
KB
-rw-r--r--
2024-03-10 20:38
coda.h
2.16
KB
-rw-r--r--
2024-03-10 20:38
compaction.h
4.5
KB
-rw-r--r--
2026-07-01 19:48
compat.h
32.32
KB
-rw-r--r--
2026-07-01 19:48
compiler-clang.h
4.5
KB
-rw-r--r--
2026-07-01 19:48
compiler-gcc.h
4.57
KB
-rw-r--r--
2026-07-01 19:48
compiler-version.h
517
B
-rw-r--r--
2024-03-10 20:38
compiler.h
7.87
KB
-rw-r--r--
2026-07-01 19:48
compiler_attributes.h
15.33
KB
-rw-r--r--
2026-07-01 19:48
compiler_types.h
17.21
KB
-rw-r--r--
2026-07-01 19:48
completion.h
4.14
KB
-rw-r--r--
2024-03-10 20:38
component.h
4.35
KB
-rw-r--r--
2024-03-10 20:38
configfs.h
8.35
KB
-rw-r--r--
2024-03-10 20:38
connector.h
4.01
KB
-rw-r--r--
2024-03-10 20:38
console.h
17.63
KB
-rw-r--r--
2026-07-01 19:48
console_struct.h
7.05
KB
-rw-r--r--
2024-03-10 20:38
consolemap.h
1.25
KB
-rw-r--r--
2024-03-10 20:38
const.h
100
B
-rw-r--r--
2024-03-10 20:38
container.h
616
B
-rw-r--r--
2024-03-10 20:38
container_of.h
1.3
KB
-rw-r--r--
2024-03-10 20:38
context_tracking.h
4.15
KB
-rw-r--r--
2024-03-10 20:38
context_tracking_irq.h
633
B
-rw-r--r--
2026-07-01 19:48
context_tracking_state.h
3.84
KB
-rw-r--r--
2024-03-10 20:38
cookie.h
1.22
KB
-rw-r--r--
2024-03-10 20:38
cordic.h
2.08
KB
-rw-r--r--
2024-03-10 20:38
coredump.h
1.43
KB
-rw-r--r--
2024-03-10 20:38
coresight-pmu.h
1.86
KB
-rw-r--r--
2024-03-10 20:38
coresight-stm.h
152
B
-rw-r--r--
2024-03-10 20:38
coresight.h
21.27
KB
-rw-r--r--
2026-07-01 19:48
count_zeros.h
1.42
KB
-rw-r--r--
2024-03-10 20:38
counter.h
21.39
KB
-rw-r--r--
2026-07-01 19:48
cper.h
17.75
KB
-rw-r--r--
2026-07-01 19:48
cpu.h
7.69
KB
-rw-r--r--
2026-07-01 19:48
cpu_cooling.h
1.86
KB
-rw-r--r--
2024-03-10 20:38
cpu_pm.h
2.38
KB
-rw-r--r--
2024-03-10 20:38
cpu_rmap.h
1.7
KB
-rw-r--r--
2024-03-10 20:38
cpu_smt.h
1.12
KB
-rw-r--r--
2024-03-10 20:38
cpufeature.h
1.71
KB
-rw-r--r--
2024-03-10 20:38
cpufreq.h
37
KB
-rw-r--r--
2026-07-01 19:48
cpuhotplug.h
16.78
KB
-rw-r--r--
2026-07-01 19:48
cpuidle.h
11.42
KB
-rw-r--r--
2024-03-10 20:38
cpuidle_haltpoll.h
312
B
-rw-r--r--
2024-03-10 20:38
cpumask.h
36.17
KB
-rw-r--r--
2026-07-01 19:48
cpumask_api.h
27
B
-rw-r--r--
2024-03-10 20:38
cpuset.h
7.94
KB
-rw-r--r--
2026-07-01 19:48
crash_core.h
4.92
KB
-rw-r--r--
2024-03-10 20:38
crash_dump.h
5.04
KB
-rw-r--r--
2024-03-10 20:38
crc-ccitt.h
369
B
-rw-r--r--
2024-03-10 20:38
crc-itu-t.h
530
B
-rw-r--r--
2024-03-10 20:38
crc-t10dif.h
453
B
-rw-r--r--
2024-03-10 20:38
crc16.h
540
B
-rw-r--r--
2024-03-10 20:38
crc32.h
2.83
KB
-rw-r--r--
2024-03-10 20:38
crc32c.h
293
B
-rw-r--r--
2024-03-10 20:38
crc32poly.h
610
B
-rw-r--r--
2024-03-10 20:38
crc4.h
192
B
-rw-r--r--
2024-03-10 20:38
crc64.h
539
B
-rw-r--r--
2024-03-10 20:38
crc7.h
316
B
-rw-r--r--
2024-03-10 20:38
crc8.h
3.66
KB
-rw-r--r--
2024-03-10 20:38
cred.h
12.46
KB
-rw-r--r--
2024-03-10 20:38
crypto.h
19.01
KB
-rw-r--r--
2024-03-10 20:38
cs5535.h
6.13
KB
-rw-r--r--
2024-03-10 20:38
ctype.h
1.87
KB
-rw-r--r--
2024-03-10 20:38
cuda.h
620
B
-rw-r--r--
2024-03-10 20:38
cxl-event.h
2.93
KB
-rw-r--r--
2024-03-10 20:38
damon.h
27.06
KB
-rw-r--r--
2026-07-01 19:48
dasd_mod.h
204
B
-rw-r--r--
2024-03-10 20:38
davinci_emac.h
1.05
KB
-rw-r--r--
2024-03-10 20:38
dax.h
8.88
KB
-rw-r--r--
2024-03-10 20:38
dca.h
1.88
KB
-rw-r--r--
2024-03-10 20:38
dcache.h
18.11
KB
-rw-r--r--
2026-07-01 19:48
dccp.h
10.74
KB
-rw-r--r--
2024-03-10 20:38
debug_locks.h
1.57
KB
-rw-r--r--
2024-03-10 20:38
debugfs.h
12.5
KB
-rw-r--r--
2024-03-10 20:38
debugobjects.h
3.99
KB
-rw-r--r--
2024-03-10 20:38
delay.h
2.47
KB
-rw-r--r--
2024-03-10 20:38
delayacct.h
6.76
KB
-rw-r--r--
2024-03-10 20:38
delayed_call.h
709
B
-rw-r--r--
2024-03-10 20:38
dev_printk.h
9.65
KB
-rw-r--r--
2026-07-01 19:48
devcoredump.h
2.21
KB
-rw-r--r--
2024-03-10 20:38
devfreq-event.h
5.95
KB
-rw-r--r--
2024-03-10 20:38
devfreq.h
14.52
KB
-rw-r--r--
2024-03-10 20:38
devfreq_cooling.h
2.7
KB
-rw-r--r--
2024-03-10 20:38
device-mapper.h
20.22
KB
-rw-r--r--
2024-03-10 20:38
device.h
44.36
KB
-rw-r--r--
2026-07-01 19:48
device_cgroup.h
1.57
KB
-rw-r--r--
2024-03-10 20:38
devm-helpers.h
2.68
KB
-rw-r--r--
2024-03-10 20:38
devpts_fs.h
1.13
KB
-rw-r--r--
2024-03-10 20:38
dfl.h
2.72
KB
-rw-r--r--
2024-03-10 20:38
digsig.h
1.18
KB
-rw-r--r--
2024-03-10 20:38
dim.h
9.2
KB
-rw-r--r--
2024-03-10 20:38
dio.h
10.76
KB
-rw-r--r--
2024-03-10 20:38
dirent.h
215
B
-rw-r--r--
2024-03-10 20:38
dlm.h
5.62
KB
-rw-r--r--
2024-03-10 20:38
dlm_plock.h
642
B
-rw-r--r--
2024-03-10 20:38
dm-bufio.h
4.9
KB
-rw-r--r--
2024-03-10 20:38
dm-dirty-log.h
4
KB
-rw-r--r--
2024-03-10 20:38
dm-io.h
2.03
KB
-rw-r--r--
2026-07-01 19:48
dm-kcopyd.h
3.03
KB
-rw-r--r--
2024-03-10 20:38
dm-region-hash.h
3.16
KB
-rw-r--r--
2024-03-10 20:38
dm-verity-loadpin.h
617
B
-rw-r--r--
2024-03-10 20:38
dm9000.h
987
B
-rw-r--r--
2024-03-10 20:38
dma-buf.h
21.17
KB
-rw-r--r--
2024-03-10 20:38
dma-direct.h
3.62
KB
-rw-r--r--
2024-03-10 20:38
dma-direction.h
407
B
-rw-r--r--
2024-03-10 20:38
dma-fence-array.h
2.53
KB
-rw-r--r--
2024-03-10 20:38
dma-fence-chain.h
3.49
KB
-rw-r--r--
2024-03-10 20:38
dma-fence-unwrap.h
2.24
KB
-rw-r--r--
2024-03-10 20:38
dma-fence.h
22.67
KB
-rw-r--r--
2024-03-10 20:38
dma-heap.h
1.58
KB
-rw-r--r--
2024-03-10 20:38
dma-map-ops.h
16.73
KB
-rw-r--r--
2024-03-10 20:38
dma-mapping.h
20.25
KB
-rw-r--r--
2026-07-01 19:48
dma-resv.h
16.94
KB
-rw-r--r--
2024-03-10 20:38
dmaengine.h
53.73
KB
-rw-r--r--
2024-03-10 20:38
dmapool.h
1.79
KB
-rw-r--r--
2024-03-10 20:38
dmar.h
8.11
KB
-rw-r--r--
2024-03-10 20:38
dmi.h
4.41
KB
-rw-r--r--
2026-07-01 19:48
dnotify.h
1012
B
-rw-r--r--
2024-03-10 20:38
dns_resolver.h
1.36
KB
-rw-r--r--
2024-03-10 20:38
dpll.h
6.56
KB
-rw-r--r--
2026-07-01 19:48
dqblk_qtree.h
2.19
KB
-rw-r--r--
2024-03-10 20:38
dqblk_v1.h
327
B
-rw-r--r--
2024-03-10 20:38
dqblk_v2.h
406
B
-rw-r--r--
2024-03-10 20:38
drbd.h
9.92
KB
-rw-r--r--
2024-03-10 20:38
drbd_config.h
285
B
-rw-r--r--
2024-03-10 20:38
drbd_genl.h
21.49
KB
-rw-r--r--
2024-03-10 20:38
drbd_genl_api.h
1.76
KB
-rw-r--r--
2024-03-10 20:38
drbd_limits.h
7.92
KB
-rw-r--r--
2024-03-10 20:38
ds2782_battery.h
158
B
-rw-r--r--
2024-03-10 20:38
dtlk.h
3.5
KB
-rw-r--r--
2024-03-10 20:38
dtpm.h
1.46
KB
-rw-r--r--
2024-03-10 20:38
dw_apb_timer.h
1.53
KB
-rw-r--r--
2024-03-10 20:38
dynamic_debug.h
11
KB
-rw-r--r--
2024-03-10 20:38
dynamic_queue_limits.h
3.74
KB
-rw-r--r--
2026-07-01 19:48
earlycpio.h
359
B
-rw-r--r--
2024-03-10 20:38
ecryptfs.h
3.82
KB
-rw-r--r--
2024-03-10 20:38
edac.h
19.44
KB
-rw-r--r--
2024-03-10 20:38
edd.h
1.05
KB
-rw-r--r--
2024-03-10 20:38
eeprom_93cx6.h
2.64
KB
-rw-r--r--
2026-07-01 19:48
eeprom_93xx46.h
1.04
KB
-rw-r--r--
2024-03-10 20:38
efi-bgrt.h
644
B
-rw-r--r--
2024-03-10 20:38
efi.h
45.27
KB
-rw-r--r--
2026-07-01 19:48
efi_embedded_fw.h
1.04
KB
-rw-r--r--
2024-03-10 20:38
efs_vh.h
1.55
KB
-rw-r--r--
2024-03-10 20:38
eisa.h
2.96
KB
-rw-r--r--
2024-03-10 20:38
elf-fdpic.h
2.39
KB
-rw-r--r--
2024-03-10 20:38
elf-randomize.h
583
B
-rw-r--r--
2024-03-10 20:38
elf.h
2.96
KB
-rw-r--r--
2024-03-10 20:38
elfcore-compat.h
1.43
KB
-rw-r--r--
2024-03-10 20:38
elfcore.h
3.93
KB
-rw-r--r--
2024-03-10 20:38
elfnote-lto.h
314
B
-rw-r--r--
2024-03-10 20:38
elfnote.h
3.54
KB
-rw-r--r--
2024-03-10 20:38
enclosure.h
4.02
KB
-rw-r--r--
2024-03-10 20:38
energy_model.h
11.54
KB
-rw-r--r--
2024-03-10 20:38
entry-common.h
18.58
KB
-rw-r--r--
2024-03-10 20:38
entry-kvm.h
2.74
KB
-rw-r--r--
2024-03-10 20:38
err.h
2.94
KB
-rw-r--r--
2026-07-01 19:48
errname.h
283
B
-rw-r--r--
2024-03-10 20:38
errno.h
1.45
KB
-rw-r--r--
2024-03-10 20:38
error-injection.h
630
B
-rw-r--r--
2024-03-10 20:38
errqueue.h
524
B
-rw-r--r--
2024-03-10 20:38
errseq.h
382
B
-rw-r--r--
2024-03-10 20:38
etherdevice.h
19.27
KB
-rw-r--r--
2026-07-01 19:48
ethtool.h
43.95
KB
-rw-r--r--
2026-07-01 19:48
ethtool_netlink.h
3.25
KB
-rw-r--r--
2024-03-10 20:38
eventfd.h
2.1
KB
-rw-r--r--
2024-03-10 20:38
eventpoll.h
2.41
KB
-rw-r--r--
2026-07-01 19:48
evm.h
4.91
KB
-rw-r--r--
2024-03-10 20:38
export-internal.h
2.3
KB
-rw-r--r--
2024-03-10 20:38
export.h
2.21
KB
-rw-r--r--
2026-07-01 19:48
exportfs.h
10.21
KB
-rw-r--r--
2024-03-10 20:38
ext2_fs.h
967
B
-rw-r--r--
2024-03-10 20:38
extable.h
1.28
KB
-rw-r--r--
2024-03-10 20:38
extcon-provider.h
3.83
KB
-rw-r--r--
2024-03-10 20:38
extcon.h
9.99
KB
-rw-r--r--
2024-03-10 20:38
f2fs_fs.h
20.13
KB
-rw-r--r--
2026-07-01 19:48
f75375s.h
541
B
-rw-r--r--
2024-03-10 20:38
falloc.h
1.79
KB
-rw-r--r--
2026-07-01 19:48
fanotify.h
4.67
KB
-rw-r--r--
2026-07-01 19:48
fault-inject-usercopy.h
496
B
-rw-r--r--
2024-03-10 20:38
fault-inject.h
2.76
KB
-rw-r--r--
2024-03-10 20:38
fb.h
29.42
KB
-rw-r--r--
2026-07-01 19:48
fbcon.h
2.2
KB
-rw-r--r--
2026-07-01 19:48
fcdevice.h
774
B
-rw-r--r--
2024-03-10 20:38
fcntl.h
1.66
KB
-rw-r--r--
2024-03-10 20:38
fd.h
490
B
-rw-r--r--
2024-03-10 20:38
fddidevice.h
833
B
-rw-r--r--
2024-03-10 20:38
fdtable.h
3.46
KB
-rw-r--r--
2026-07-01 19:48
fec.h
463
B
-rw-r--r--
2024-03-10 20:38
fiemap.h
713
B
-rw-r--r--
2024-03-10 20:38
file.h
3.19
KB
-rw-r--r--
2026-07-01 19:48
fileattr.h
1.9
KB
-rw-r--r--
2024-03-10 20:38
filelock.h
11.44
KB
-rw-r--r--
2024-03-10 20:38
filter.h
45.03
KB
-rw-r--r--
2026-07-01 19:48
find.h
19.62
KB
-rw-r--r--
2024-03-10 20:38
fips.h
303
B
-rw-r--r--
2024-03-10 20:38
firewire.h
16.41
KB
-rw-r--r--
2024-03-10 20:38
firmware-map.h
959
B
-rw-r--r--
2024-03-10 20:38
firmware.h
5.81
KB
-rw-r--r--
2024-03-10 20:38
fixp-arith.h
4.21
KB
-rw-r--r--
2024-03-10 20:38
flat.h
2.57
KB
-rw-r--r--
2024-03-10 20:38
flex_proportions.h
2.83
KB
-rw-r--r--
2024-03-10 20:38
font.h
1.67
KB
-rw-r--r--
2024-03-10 20:38
fortify-string.h
26.73
KB
-rw-r--r--
2026-07-01 19:48
fprobe.h
3.15
KB
-rw-r--r--
2024-03-10 20:38
freezer.h
2.34
KB
-rw-r--r--
2024-03-10 20:38
fs.h
117.06
KB
-rw-r--r--
2026-07-01 19:48
fs_api.h
22
B
-rw-r--r--
2024-03-10 20:38
fs_context.h
8.18
KB
-rw-r--r--
2026-07-01 19:48
fs_parser.h
4.67
KB
-rw-r--r--
2026-07-01 19:48
fs_pin.h
539
B
-rw-r--r--
2024-03-10 20:38
fs_stack.h
895
B
-rw-r--r--
2024-03-10 20:38
fs_struct.h
1.04
KB
-rw-r--r--
2024-03-10 20:38
fs_types.h
2.02
KB
-rw-r--r--
2024-03-10 20:38
fscache-cache.h
7.09
KB
-rw-r--r--
2026-07-01 19:48
fscache.h
23.85
KB
-rw-r--r--
2024-03-10 20:38
fscrypt.h
32.98
KB
-rw-r--r--
2024-03-10 20:38
fsi-occ.h
715
B
-rw-r--r--
2024-03-10 20:38
fsi-sbefifo.h
629
B
-rw-r--r--
2024-03-10 20:38
fsi.h
2.26
KB
-rw-r--r--
2024-03-10 20:38
fsl-diu-fb.h
3.87
KB
-rw-r--r--
2024-03-10 20:38
fsl_devices.h
4.16
KB
-rw-r--r--
2024-03-10 20:38
fsl_hypervisor.h
2.76
KB
-rw-r--r--
2024-03-10 20:38
fsl_ifc.h
24.48
KB
-rw-r--r--
2024-03-10 20:38
fsldma.h
202
B
-rw-r--r--
2024-03-10 20:38
fsnotify.h
10.93
KB
-rw-r--r--
2026-07-01 19:48
fsnotify_backend.h
29.13
KB
-rw-r--r--
2026-07-01 19:48
fsverity.h
9.29
KB
-rw-r--r--
2024-03-10 20:38
ftrace.h
38.74
KB
-rw-r--r--
2026-07-01 19:48
ftrace_irq.h
884
B
-rw-r--r--
2024-03-10 20:38
futex.h
2.44
KB
-rw-r--r--
2024-03-10 20:38
fw_table.h
1.69
KB
-rw-r--r--
2024-03-10 20:38
fwnode.h
8.12
KB
-rw-r--r--
2026-07-01 19:48
fwnode_mdio.h
858
B
-rw-r--r--
2024-03-10 20:38
gameport.h
5.24
KB
-rw-r--r--
2024-03-10 20:38
gcd.h
193
B
-rw-r--r--
2024-03-10 20:38
genalloc.h
7.73
KB
-rw-r--r--
2026-07-01 19:48
generic-radix-tree.h
8.33
KB
-rw-r--r--
2024-03-10 20:38
genetlink.h
589
B
-rw-r--r--
2024-03-10 20:38
genl_magic_func.h
11.67
KB
-rw-r--r--
2024-03-10 20:38
genl_magic_struct.h
7.58
KB
-rw-r--r--
2024-03-10 20:38
getcpu.h
641
B
-rw-r--r--
2024-03-10 20:38
gfp.h
12.06
KB
-rw-r--r--
2026-07-01 19:48
gfp_api.h
23
B
-rw-r--r--
2024-03-10 20:38
gfp_types.h
14.98
KB
-rw-r--r--
2026-07-01 19:48
glob.h
256
B
-rw-r--r--
2024-03-10 20:38
gnss.h
1.56
KB
-rw-r--r--
2024-03-10 20:38
goldfish.h
878
B
-rw-r--r--
2024-03-10 20:38
gpio-pxa.h
571
B
-rw-r--r--
2024-03-10 20:38
gpio.h
5.44
KB
-rw-r--r--
2024-03-10 20:38
gpio_keys.h
1.81
KB
-rw-r--r--
2024-03-10 20:38
greybus.h
4.14
KB
-rw-r--r--
2024-03-10 20:38
group_cpus.h
310
B
-rw-r--r--
2024-03-10 20:38
hardirq.h
3.25
KB
-rw-r--r--
2024-03-10 20:38
hash.h
2.93
KB
-rw-r--r--
2024-03-10 20:38
hashtable.h
6.67
KB
-rw-r--r--
2024-03-10 20:38
hashtable_api.h
29
B
-rw-r--r--
2024-03-10 20:38
hdlc.h
3.19
KB
-rw-r--r--
2024-03-10 20:38
hdlcdrv.h
6.32
KB
-rw-r--r--
2024-03-10 20:38
hdmi.h
12.55
KB
-rw-r--r--
2024-03-10 20:38
hex.h
884
B
-rw-r--r--
2024-03-10 20:38
hid-debug.h
1.42
KB
-rw-r--r--
2024-03-10 20:38
hid-roccat.h
490
B
-rw-r--r--
2024-03-10 20:38
hid-sensor-hub.h
8.97
KB
-rw-r--r--
2024-03-10 20:38
hid-sensor-ids.h
7.49
KB
-rw-r--r--
2024-03-10 20:38
hid.h
38.89
KB
-rw-r--r--
2026-07-01 19:48
hid_bpf.h
5.24
KB
-rw-r--r--
2024-03-10 20:38
hidden.h
966
B
-rw-r--r--
2024-03-10 20:38
hiddev.h
1.42
KB
-rw-r--r--
2024-03-10 20:38
hidraw.h
1.12
KB
-rw-r--r--
2024-03-10 20:38
highmem-internal.h
6.74
KB
-rw-r--r--
2024-03-10 20:38
highmem.h
18.04
KB
-rw-r--r--
2026-07-01 19:48
highuid.h
3.12
KB
-rw-r--r--
2024-03-10 20:38
hil.h
18.42
KB
-rw-r--r--
2024-03-10 20:38
hil_mlc.h
5.13
KB
-rw-r--r--
2024-03-10 20:38
hippidevice.h
1.08
KB
-rw-r--r--
2024-03-10 20:38
hisi_acc_qm.h
14.04
KB
-rw-r--r--
2026-07-01 19:48
hmm.h
3.93
KB
-rw-r--r--
2024-03-10 20:38
host1x.h
13.49
KB
-rw-r--r--
2024-03-10 20:38
host1x_context_bus.h
331
B
-rw-r--r--
2024-03-10 20:38
hp_sdc.h
14.01
KB
-rw-r--r--
2024-03-10 20:38
hpet.h
2.55
KB
-rw-r--r--
2024-03-10 20:38
hrtimer.h
14.87
KB
-rw-r--r--
2026-07-01 19:48
hrtimer_api.h
27
B
-rw-r--r--
2024-03-10 20:38
hrtimer_defs.h
660
B
-rw-r--r--
2024-03-10 20:38
hrtimer_types.h
1.53
KB
-rw-r--r--
2024-03-10 20:38
hte.h
7.37
KB
-rw-r--r--
2024-03-10 20:38
huge_mm.h
16.06
KB
-rw-r--r--
2026-07-01 19:48
hugetlb.h
35.76
KB
-rw-r--r--
2026-07-01 19:48
hugetlb_cgroup.h
6.78
KB
-rw-r--r--
2024-03-10 20:38
hugetlb_inline.h
374
B
-rw-r--r--
2024-03-10 20:38
hw_breakpoint.h
4.19
KB
-rw-r--r--
2024-03-10 20:38
hw_random.h
2.25
KB
-rw-r--r--
2024-03-10 20:38
hwmon-sysfs.h
2.8
KB
-rw-r--r--
2024-03-10 20:38
hwmon-vid.h
862
B
-rw-r--r--
2024-03-10 20:38
hwmon.h
15.58
KB
-rw-r--r--
2024-03-10 20:38
hwspinlock.h
15.79
KB
-rw-r--r--
2026-07-01 19:48
hyperv.h
49.49
KB
-rw-r--r--
2026-07-01 19:48
hypervisor.h
799
B
-rw-r--r--
2026-07-01 19:48
i2c-algo-bit.h
1.4
KB
-rw-r--r--
2024-03-10 20:38
i2c-algo-pca.h
2.89
KB
-rw-r--r--
2024-03-10 20:38
i2c-algo-pcf.h
1.21
KB
-rw-r--r--
2024-03-10 20:38
i2c-atr.h
3.95
KB
-rw-r--r--
2024-03-10 20:38
i2c-dev.h
371
B
-rw-r--r--
2024-03-10 20:38
i2c-mux.h
1.63
KB
-rw-r--r--
2024-03-10 20:38
i2c-smbus.h
1.52
KB
-rw-r--r--
2024-03-10 20:38
i2c.h
39.03
KB
-rw-r--r--
2026-07-01 19:48
i8042.h
2.02
KB
-rw-r--r--
2024-03-10 20:38
i8253.h
808
B
-rw-r--r--
2026-07-01 19:48
i8254.h
489
B
-rw-r--r--
2024-03-10 20:38
icmp.h
1
KB
-rw-r--r--
2024-03-10 20:38
icmpv6.h
2.87
KB
-rw-r--r--
2024-03-10 20:38
idle_inject.h
1.02
KB
-rw-r--r--
2024-03-10 20:38
idr.h
9.72
KB
-rw-r--r--
2024-03-10 20:38
ieee80211.h
168.2
KB
-rw-r--r--
2026-07-01 19:48
ieee802154.h
14.46
KB
-rw-r--r--
2024-03-10 20:38
if_arp.h
1.81
KB
-rw-r--r--
2024-03-10 20:38
if_bridge.h
5.42
KB
-rw-r--r--
2026-07-01 19:48
if_eql.h
1.13
KB
-rw-r--r--
2024-03-10 20:38
if_ether.h
1.3
KB
-rw-r--r--
2026-07-01 19:48
if_fddi.h
3.24
KB
-rw-r--r--
2024-03-10 20:38
if_hsr.h
1.07
KB
-rw-r--r--
2024-03-10 20:38
if_link.h
592
B
-rw-r--r--
2024-03-10 20:38
if_ltalk.h
188
B
-rw-r--r--
2024-03-10 20:38
if_macvlan.h
2.76
KB
-rw-r--r--
2024-03-10 20:38
if_phonet.h
319
B
-rw-r--r--
2024-03-10 20:38
if_pppol2tp.h
501
B
-rw-r--r--
2024-03-10 20:38
if_pppox.h
2.83
KB
-rw-r--r--
2024-03-10 20:38
if_rmnet.h
2.06
KB
-rw-r--r--
2024-03-10 20:38
if_tap.h
2.21
KB
-rw-r--r--
2024-03-10 20:38
if_team.h
7.94
KB
-rw-r--r--
2024-03-10 20:38
if_tun.h
1.55
KB
-rw-r--r--
2024-03-10 20:38
if_tunnel.h
409
B
-rw-r--r--
2024-03-10 20:38
if_vlan.h
21.92
KB
-rw-r--r--
2026-07-01 19:48
igmp.h
4.36
KB
-rw-r--r--
2024-03-10 20:38
ihex.h
2.15
KB
-rw-r--r--
2024-03-10 20:38
ima.h
6.67
KB
-rw-r--r--
2026-07-01 19:48
imx-media.h
605
B
-rw-r--r--
2024-03-10 20:38
in.h
2.29
KB
-rw-r--r--
2024-03-10 20:38
in6.h
1.63
KB
-rw-r--r--
2024-03-10 20:38
indirect_call_wrapper.h
2.38
KB
-rw-r--r--
2026-07-01 19:48
inet.h
2.64
KB
-rw-r--r--
2024-03-10 20:38
inet_diag.h
2.74
KB
-rw-r--r--
2024-03-10 20:38
inetdevice.h
9.02
KB
-rw-r--r--
2026-07-01 19:48
init.h
12.28
KB
-rw-r--r--
2026-07-01 19:48
init_ohci1394_dma.h
196
B
-rw-r--r--
2024-03-10 20:38
init_syscalls.h
1.01
KB
-rw-r--r--
2024-03-10 20:38
init_task.h
1.1
KB
-rw-r--r--
2024-03-10 20:38
initrd.h
1008
B
-rw-r--r--
2024-03-10 20:38
inotify.h
628
B
-rw-r--r--
2024-03-10 20:38
input.h
20.03
KB
-rw-r--r--
2024-03-10 20:38
instruction_pointer.h
346
B
-rw-r--r--
2024-03-10 20:38
instrumentation.h
1.96
KB
-rw-r--r--
2024-03-10 20:38
instrumented.h
5.15
KB
-rw-r--r--
2024-03-10 20:38
int_log.h
1.26
KB
-rw-r--r--
2024-03-10 20:38
integrity.h
1.15
KB
-rw-r--r--
2024-03-10 20:38
intel-ish-client-if.h
4.29
KB
-rw-r--r--
2026-07-01 19:48
intel_rapl.h
5.01
KB
-rw-r--r--
2026-07-01 19:48
intel_tcc.h
466
B
-rw-r--r--
2026-07-01 19:48
intel_th.h
2.44
KB
-rw-r--r--
2024-03-10 20:38
intel_tpmi.h
1.64
KB
-rw-r--r--
2024-03-10 20:38
interconnect-clk.h
466
B
-rw-r--r--
2024-03-10 20:38
interconnect-provider.h
5.5
KB
-rw-r--r--
2024-03-10 20:38
interconnect.h
3.36
KB
-rw-r--r--
2024-03-10 20:38
interrupt.h
25.4
KB
-rw-r--r--
2026-07-01 19:48
interval_tree.h
2.88
KB
-rw-r--r--
2024-03-10 20:38
interval_tree_generic.h
6.7
KB
-rw-r--r--
2024-03-10 20:38
io-64-nonatomic-hi-lo.h
2.41
KB
-rw-r--r--
2024-03-10 20:38
io-64-nonatomic-lo-hi.h
2.41
KB
-rw-r--r--
2024-03-10 20:38
io-mapping.h
4.69
KB
-rw-r--r--
2024-03-10 20:38
io-pgtable.h
9.58
KB
-rw-r--r--
2024-03-10 20:38
io.h
5.2
KB
-rw-r--r--
2026-07-01 19:48
io_uring.h
1.23
KB
-rw-r--r--
2026-07-01 19:48
io_uring_types.h
17.46
KB
-rw-r--r--
2026-07-01 19:48
ioam6.h
226
B
-rw-r--r--
2024-03-10 20:38
ioam6_genl.h
266
B
-rw-r--r--
2024-03-10 20:38
ioam6_iptunnel.h
285
B
-rw-r--r--
2024-03-10 20:38
iocontext.h
4.16
KB
-rw-r--r--
2024-03-10 20:38
iomap.h
14.46
KB
-rw-r--r--
2026-07-01 19:48
iommu-helper.h
1.12
KB
-rw-r--r--
2024-03-10 20:38
iommu.h
47.63
KB
-rw-r--r--
2026-07-01 19:48
iommufd.h
3.5
KB
-rw-r--r--
2024-03-10 20:38
iopoll.h
7.98
KB
-rw-r--r--
2024-03-10 20:38
ioport.h
13.83
KB
-rw-r--r--
2026-07-01 19:48
ioprio.h
2.17
KB
-rw-r--r--
2026-07-01 19:48
ioremap.h
719
B
-rw-r--r--
2024-03-10 20:38
iosys-map.h
16.73
KB
-rw-r--r--
2026-07-01 19:48
iov_iter.h
7.12
KB
-rw-r--r--
2024-03-10 20:38
iova.h
4.08
KB
-rw-r--r--
2024-03-10 20:38
iova_bitmap.h
1.31
KB
-rw-r--r--
2024-03-10 20:38
ip.h
1.56
KB
-rw-r--r--
2024-03-10 20:38
ipack.h
8.69
KB
-rw-r--r--
2024-03-10 20:38
ipc.h
619
B
-rw-r--r--
2024-03-10 20:38
ipc_namespace.h
5.63
KB
-rw-r--r--
2026-07-01 19:48
ipmi.h
11.09
KB
-rw-r--r--
2024-03-10 20:38
ipmi_smi.h
9.83
KB
-rw-r--r--
2024-03-10 20:38
ipv6.h
8.01
KB
-rw-r--r--
2024-03-10 20:38
ipv6_route.h
372
B
-rw-r--r--
2024-03-10 20:38
irq.h
42.29
KB
-rw-r--r--
2026-07-01 19:48
irq_poll.h
575
B
-rw-r--r--
2024-03-10 20:38
irq_sim.h
789
B
-rw-r--r--
2024-03-10 20:38
irq_work.h
2.04
KB
-rw-r--r--
2024-03-10 20:38
irqbypass.h
3.45
KB
-rw-r--r--
2024-03-10 20:38
irqchip.h
2.65
KB
-rw-r--r--
2024-03-10 20:38
irqdesc.h
7.81
KB
-rw-r--r--
2024-03-10 20:38
irqdomain.h
20.39
KB
-rw-r--r--
2024-03-10 20:38
irqdomain_defs.h
820
B
-rw-r--r--
2024-03-10 20:38
irqflags.h
7.75
KB
-rw-r--r--
2026-07-01 19:48
irqflags_types.h
563
B
-rw-r--r--
2024-03-10 20:38
irqhandler.h
300
B
-rw-r--r--
2024-03-10 20:38
irqnr.h
856
B
-rw-r--r--
2024-03-10 20:38
irqreturn.h
529
B
-rw-r--r--
2024-03-10 20:38
isa-dma.h
276
B
-rw-r--r--
2024-03-10 20:38
isa.h
3.33
KB
-rw-r--r--
2024-03-10 20:38
isapnp.h
2.88
KB
-rw-r--r--
2024-03-10 20:38
iscsi_boot_sysfs.h
3.71
KB
-rw-r--r--
2024-03-10 20:38
iscsi_ibft.h
994
B
-rw-r--r--
2024-03-10 20:38
ism.h
2.2
KB
-rw-r--r--
2026-07-01 19:48
iversion.h
10.96
KB
-rw-r--r--
2024-03-10 20:38
jbd2.h
51.7
KB
-rw-r--r--
2026-07-01 19:48
jhash.h
4.56
KB
-rw-r--r--
2024-03-10 20:38
jiffies.h
19.67
KB
-rw-r--r--
2026-07-01 19:48
journal-head.h
2.91
KB
-rw-r--r--
2024-03-10 20:38
joystick.h
437
B
-rw-r--r--
2024-03-10 20:38
jump_label.h
16.25
KB
-rw-r--r--
2024-03-10 20:38
jump_label_ratelimit.h
2.77
KB
-rw-r--r--
2024-03-10 20:38
jz4740-adc.h
1023
B
-rw-r--r--
2024-03-10 20:38
jz4780-nemc.h
976
B
-rw-r--r--
2024-03-10 20:38
kallsyms.h
4.26
KB
-rw-r--r--
2026-07-01 19:48
kasan-checks.h
1.46
KB
-rw-r--r--
2024-03-10 20:38
kasan-enabled.h
639
B
-rw-r--r--
2024-03-10 20:38
kasan-tags.h
487
B
-rw-r--r--
2024-03-10 20:38
kasan.h
19.22
KB
-rw-r--r--
2026-07-01 19:48
kbd_diacr.h
198
B
-rw-r--r--
2024-03-10 20:38
kbd_kern.h
3.6
KB
-rw-r--r--
2024-03-10 20:38
kbuild.h
380
B
-rw-r--r--
2024-03-10 20:38
kconfig.h
2.63
KB
-rw-r--r--
2024-03-10 20:38
kcore.h
891
B
-rw-r--r--
2024-03-10 20:38
kcov.h
3.16
KB
-rw-r--r--
2026-07-01 19:48
kcsan-checks.h
18.63
KB
-rw-r--r--
2024-03-10 20:38
kcsan.h
2.19
KB
-rw-r--r--
2024-03-10 20:38
kdb.h
7.43
KB
-rw-r--r--
2024-03-10 20:38
kdebug.h
487
B
-rw-r--r--
2024-03-10 20:38
kdev_t.h
1.8
KB
-rw-r--r--
2024-03-10 20:38
kern_levels.h
1.57
KB
-rw-r--r--
2024-03-10 20:38
kernel-page-flags.h
551
B
-rw-r--r--
2024-03-10 20:38
kernel.h
14.07
KB
-rw-r--r--
2024-03-10 20:38
kernel_read_file.h
1.62
KB
-rw-r--r--
2024-03-10 20:38
kernel_stat.h
3.37
KB
-rw-r--r--
2024-03-10 20:38
kernelcapi.h
1.45
KB
-rw-r--r--
2024-03-10 20:38
kernfs.h
19.49
KB
-rw-r--r--
2026-07-01 19:48
kexec.h
14.09
KB
-rw-r--r--
2026-07-01 19:48
key-type.h
6.63
KB
-rw-r--r--
2024-03-10 20:38
key.h
16.05
KB
-rw-r--r--
2024-03-10 20:38
keyboard.h
665
B
-rw-r--r--
2024-03-10 20:38
keyctl.h
1.25
KB
-rw-r--r--
2024-03-10 20:38
kfence.h
8.72
KB
-rw-r--r--
2026-07-01 19:48
kfifo.h
26.18
KB
-rw-r--r--
2024-03-10 20:38
kgdb.h
12.12
KB
-rw-r--r--
2024-03-10 20:38
khugepaged.h
1.77
KB
-rw-r--r--
2024-03-10 20:38
klist.h
1.88
KB
-rw-r--r--
2024-03-10 20:38
kmemleak.h
3.12
KB
-rw-r--r--
2024-03-10 20:38
kmod.h
1.02
KB
-rw-r--r--
2024-03-10 20:38
kmsan-checks.h
2.38
KB
-rw-r--r--
2024-03-10 20:38
kmsan.h
9.24
KB
-rw-r--r--
2024-03-10 20:38
kmsan_string.h
681
B
-rw-r--r--
2024-03-10 20:38
kmsan_types.h
908
B
-rw-r--r--
2024-03-10 20:38
kmsg_dump.h
2.71
KB
-rw-r--r--
2024-03-10 20:38
kobj_map.h
545
B
-rw-r--r--
2024-03-10 20:38
kobject.h
6.95
KB
-rw-r--r--
2024-03-10 20:38
kobject_api.h
27
B
-rw-r--r--
2024-03-10 20:38
kobject_ns.h
1.91
KB
-rw-r--r--
2024-03-10 20:38
kprobes.h
16.45
KB
-rw-r--r--
2026-07-01 19:48
kref.h
3.08
KB
-rw-r--r--
2024-03-10 20:38
kref_api.h
24
B
-rw-r--r--
2024-03-10 20:38
ks0108.h
970
B
-rw-r--r--
2024-03-10 20:38
ks8842.h
632
B
-rw-r--r--
2024-03-10 20:38
ks8851_mll.h
472
B
-rw-r--r--
2024-03-10 20:38
ksm.h
4.31
KB
-rw-r--r--
2026-07-01 19:48
kstrtox.h
6.51
KB
-rw-r--r--
2024-03-10 20:38
kthread.h
7
KB
-rw-r--r--
2024-03-10 20:38
ktime.h
5.33
KB
-rw-r--r--
2024-03-10 20:38
ktime_api.h
25
B
-rw-r--r--
2024-03-10 20:38
kvm_dirty_ring.h
2.68
KB
-rw-r--r--
2024-03-10 20:38
kvm_host.h
73.35
KB
-rw-r--r--
2026-07-01 19:48
kvm_irqfd.h
1.99
KB
-rw-r--r--
2024-03-10 20:38
kvm_para.h
402
B
-rw-r--r--
2024-03-10 20:38
kvm_types.h
2.79
KB
-rw-r--r--
2024-03-10 20:38
l2tp.h
261
B
-rw-r--r--
2024-03-10 20:38
lantiq.h
365
B
-rw-r--r--
2024-03-10 20:38
lapb.h
1.78
KB
-rw-r--r--
2024-03-10 20:38
latencytop.h
1.06
KB
-rw-r--r--
2024-03-10 20:38
lcd.h
3.78
KB
-rw-r--r--
2024-03-10 20:38
lcm.h
275
B
-rw-r--r--
2024-03-10 20:38
led-class-flash.h
6.74
KB
-rw-r--r--
2024-03-10 20:38
led-class-multicolor.h
3.26
KB
-rw-r--r--
2024-03-10 20:38
led-lm3530.h
3.7
KB
-rw-r--r--
2024-03-10 20:38
leds-bd2802.h
476
B
-rw-r--r--
2024-03-10 20:38
leds-lp3944.h
950
B
-rw-r--r--
2024-03-10 20:38
leds-lp3952.h
2.35
KB
-rw-r--r--
2024-03-10 20:38
leds-pca9532.h
866
B
-rw-r--r--
2024-03-10 20:38
leds-regulator.h
1.14
KB
-rw-r--r--
2024-03-10 20:38
leds-ti-lmu-common.h
1.12
KB
-rw-r--r--
2024-03-10 20:38
leds.h
22.56
KB
-rw-r--r--
2026-07-01 19:48
libata.h
68.03
KB
-rw-r--r--
2026-07-01 19:48
libfdt.h
202
B
-rw-r--r--
2024-03-10 20:38
libfdt_env.h
491
B
-rw-r--r--
2024-03-10 20:38
libgcc.h
810
B
-rw-r--r--
2024-03-10 20:38
libnvdimm.h
9.93
KB
-rw-r--r--
2024-03-10 20:38
libps2.h
2.47
KB
-rw-r--r--
2024-03-10 20:38
license.h
418
B
-rw-r--r--
2024-03-10 20:38
limits.h
809
B
-rw-r--r--
2024-03-10 20:38
linear_range.h
2.01
KB
-rw-r--r--
2024-03-10 20:38
linkage.h
9.56
KB
-rw-r--r--
2024-03-10 20:38
linkmode.h
2.5
KB
-rw-r--r--
2024-03-10 20:38
linux_logo.h
1.91
KB
-rw-r--r--
2024-03-10 20:38
lis3lv02d.h
5
KB
-rw-r--r--
2024-03-10 20:38
list.h
35.11
KB
-rw-r--r--
2024-03-10 20:38
list_bl.h
4.79
KB
-rw-r--r--
2024-03-10 20:38
list_lru.h
9.12
KB
-rw-r--r--
2024-03-10 20:38
list_nulls.h
4.22
KB
-rw-r--r--
2024-03-10 20:38
list_sort.h
374
B
-rw-r--r--
2024-03-10 20:38
litex.h
2.06
KB
-rw-r--r--
2024-03-10 20:38
livepatch.h
8.23
KB
-rw-r--r--
2024-03-10 20:38
livepatch_sched.h
802
B
-rw-r--r--
2024-03-10 20:38
llc.h
749
B
-rw-r--r--
2024-03-10 20:38
llist.h
10.43
KB
-rw-r--r--
2024-03-10 20:38
llist_api.h
25
B
-rw-r--r--
2024-03-10 20:38
local_lock.h
1.33
KB
-rw-r--r--
2024-03-10 20:38
local_lock_internal.h
3.42
KB
-rw-r--r--
2024-03-10 20:38
lockdep.h
20.16
KB
-rw-r--r--
2026-07-01 19:48
lockdep_api.h
27
B
-rw-r--r--
2024-03-10 20:38
lockdep_types.h
7.56
KB
-rw-r--r--
2024-03-10 20:38
lockref.h
1.46
KB
-rw-r--r--
2024-03-10 20:38
log2.h
6.23
KB
-rw-r--r--
2024-03-10 20:38
logic_iomem.h
2.07
KB
-rw-r--r--
2024-03-10 20:38
logic_pio.h
3.09
KB
-rw-r--r--
2024-03-10 20:38
lp.h
2.76
KB
-rw-r--r--
2024-03-10 20:38
lru_cache.h
11.66
KB
-rw-r--r--
2024-03-10 20:38
lsm_audit.h
2.87
KB
-rw-r--r--
2024-03-10 20:38
lsm_hook_defs.h
22.43
KB
-rw-r--r--
2026-07-01 19:48
lsm_hooks.h
4.84
KB
-rw-r--r--
2026-07-01 19:48
lwq.h
3.69
KB
-rw-r--r--
2024-03-10 20:38
lz4.h
26.44
KB
-rw-r--r--
2024-03-10 20:38
lzo.h
1.93
KB
-rw-r--r--
2026-07-01 19:48
mISDNdsp.h
1.19
KB
-rw-r--r--
2024-03-10 20:38
mISDNhw.h
5.39
KB
-rw-r--r--
2024-03-10 20:38
mISDNif.h
14.9
KB
-rw-r--r--
2024-03-10 20:38
mailbox_client.h
1.78
KB
-rw-r--r--
2026-07-01 19:48
mailbox_controller.h
5.88
KB
-rw-r--r--
2026-07-01 19:48
map_benchmark.h
1.11
KB
-rw-r--r--
2026-07-01 19:48
maple.h
2.67
KB
-rw-r--r--
2024-03-10 20:38
maple_tree.h
28.19
KB
-rw-r--r--
2026-07-01 19:48
marvell_phy.h
1.74
KB
-rw-r--r--
2024-03-10 20:38
math.h
6.27
KB
-rw-r--r--
2026-07-01 19:48
math64.h
8.28
KB
-rw-r--r--
2024-03-10 20:38
mbcache.h
2.09
KB
-rw-r--r--
2024-03-10 20:38
mbus.h
3.09
KB
-rw-r--r--
2024-03-10 20:38
mc146818rtc.h
4.72
KB
-rw-r--r--
2024-03-10 20:38
mc6821.h
1.18
KB
-rw-r--r--
2024-03-10 20:38
mcb.h
3.67
KB
-rw-r--r--
2024-03-10 20:38
mdev.h
2.36
KB
-rw-r--r--
2024-03-10 20:38
mdio-bitbang.h
1.46
KB
-rw-r--r--
2024-03-10 20:38
mdio-gpio.h
177
B
-rw-r--r--
2024-03-10 20:38
mdio-mux.h
1021
B
-rw-r--r--
2024-03-10 20:38
mdio.h
21.24
KB
-rw-r--r--
2026-07-01 19:48
mei_aux.h
929
B
-rw-r--r--
2024-03-10 20:38
mei_cl_bus.h
4.6
KB
-rw-r--r--
2024-03-10 20:38
mem_encrypt.h
780
B
-rw-r--r--
2024-03-10 20:38
memblock.h
21.04
KB
-rw-r--r--
2024-03-10 20:38
memcontrol.h
47.92
KB
-rw-r--r--
2026-07-01 19:48
memfd.h
717
B
-rw-r--r--
2026-07-01 19:48
memory-tiers.h
3.5
KB
-rw-r--r--
2026-07-01 19:48
memory.h
6.39
KB
-rw-r--r--
2026-07-01 19:48
memory_hotplug.h
11.84
KB
-rw-r--r--
2026-07-01 19:48
mempolicy.h
7.25
KB
-rw-r--r--
2026-07-01 19:48
mempool.h
3.52
KB
-rw-r--r--
2024-03-10 20:38
memregion.h
1.8
KB
-rw-r--r--
2024-03-10 20:38
memremap.h
7.67
KB
-rw-r--r--
2026-07-01 19:48
memstick.h
9.6
KB
-rw-r--r--
2024-03-10 20:38
mhi.h
26.78
KB
-rw-r--r--
2024-03-10 20:38
mhi_ep.h
10.63
KB
-rw-r--r--
2024-03-10 20:38
micrel_phy.h
2.13
KB
-rw-r--r--
2024-03-10 20:38
microchipphy.h
2.65
KB
-rw-r--r--
2024-03-10 20:38
migrate.h
7.81
KB
-rw-r--r--
2026-07-01 19:48
migrate_mode.h
985
B
-rw-r--r--
2024-03-10 20:38
mii.h
15.49
KB
-rw-r--r--
2024-03-10 20:38
mii_timestamper.h
3.66
KB
-rw-r--r--
2024-03-10 20:38
min_heap.h
3.3
KB
-rw-r--r--
2024-03-10 20:38
minmax.h
10.05
KB
-rw-r--r--
2026-07-01 19:48
misc_cgroup.h
2.94
KB
-rw-r--r--
2024-03-10 20:38
miscdevice.h
3.21
KB
-rw-r--r--
2024-03-10 20:38
mm.h
129.25
KB
-rw-r--r--
2026-07-01 19:48
mm_api.h
22
B
-rw-r--r--
2024-03-10 20:38
mm_inline.h
16.7
KB
-rw-r--r--
2024-03-10 20:38
mm_types.h
45.26
KB
-rw-r--r--
2026-07-01 19:48
mm_types_task.h
1.9
KB
-rw-r--r--
2024-03-10 20:38
mman.h
5.48
KB
-rw-r--r--
2026-07-01 19:48
mmap_lock.h
5.04
KB
-rw-r--r--
2026-07-01 19:48
mmdebug.h
3.86
KB
-rw-r--r--
2026-07-01 19:48
mmiotrace.h
3.05
KB
-rw-r--r--
2024-03-10 20:38
mmu_context.h
1.06
KB
-rw-r--r--
2024-03-10 20:38
mmu_notifier.h
23.4
KB
-rw-r--r--
2024-03-10 20:38
mmzone.h
64.68
KB
-rw-r--r--
2026-07-01 19:48
mnt_idmapping.h
6.84
KB
-rw-r--r--
2024-03-10 20:38
mnt_namespace.h
627
B
-rw-r--r--
2024-03-10 20:38
mod_devicetable.h
25.17
KB
-rw-r--r--
2026-07-01 19:48
module.h
27.24
KB
-rw-r--r--
2026-07-01 19:48
module_signature.h
1.22
KB
-rw-r--r--
2024-03-10 20:38
module_symbol.h
409
B
-rw-r--r--
2024-03-10 20:38
moduleloader.h
4.21
KB
-rw-r--r--
2026-07-01 19:48
moduleparam.h
22.4
KB
-rw-r--r--
2026-07-01 19:48
most.h
12.2
KB
-rw-r--r--
2024-03-10 20:38
mount.h
4.29
KB
-rw-r--r--
2026-07-01 19:48
moxtet.h
2.33
KB
-rw-r--r--
2024-03-10 20:38
mpage.h
644
B
-rw-r--r--
2024-03-10 20:38
mpi.h
8.41
KB
-rw-r--r--
2024-03-10 20:38
mpls.h
394
B
-rw-r--r--
2024-03-10 20:38
mpls_iptunnel.h
178
B
-rw-r--r--
2024-03-10 20:38
mroute.h
2.12
KB
-rw-r--r--
2024-03-10 20:38
mroute6.h
2.93
KB
-rw-r--r--
2024-03-10 20:38
mroute_base.h
12.34
KB
-rw-r--r--
2026-07-01 19:48
msdos_fs.h
273
B
-rw-r--r--
2024-03-10 20:38
msdos_partition.h
1.62
KB
-rw-r--r--
2024-03-10 20:38
msg.h
395
B
-rw-r--r--
2024-03-10 20:38
msi.h
22.87
KB
-rw-r--r--
2026-07-01 19:48
msi_api.h
1.96
KB
-rw-r--r--
2024-03-10 20:38
mtio.h
1.29
KB
-rw-r--r--
2024-03-10 20:38
mutex.h
5.71
KB
-rw-r--r--
2026-07-01 19:48
mutex_api.h
25
B
-rw-r--r--
2024-03-10 20:38
mutex_types.h
2.09
KB
-rw-r--r--
2024-03-10 20:38
mv643xx.h
51.05
KB
-rw-r--r--
2024-03-10 20:38
mv643xx_eth.h
2
KB
-rw-r--r--
2024-03-10 20:38
mv643xx_i2c.h
335
B
-rw-r--r--
2024-03-10 20:38
mvebu-pmsu.h
520
B
-rw-r--r--
2024-03-10 20:38
mxm-wmi.h
399
B
-rw-r--r--
2024-03-10 20:38
namei.h
5.56
KB
-rw-r--r--
2024-03-10 20:38
nd.h
6.25
KB
-rw-r--r--
2024-03-10 20:38
ndctl.h
674
B
-rw-r--r--
2024-03-10 20:38
net.h
11.97
KB
-rw-r--r--
2026-07-01 19:48
net_tstamp.h
1.89
KB
-rw-r--r--
2024-03-10 20:38
netdev_features.h
11.56
KB
-rw-r--r--
2026-07-01 19:48
netdevice.h
167.47
KB
-rw-r--r--
2026-07-01 19:48
netfilter.h
14.25
KB
-rw-r--r--
2024-03-10 20:38
netfilter_bridge.h
2.08
KB
-rw-r--r--
2024-03-10 20:38
netfilter_defs.h
242
B
-rw-r--r--
2024-03-10 20:38
netfilter_ipv4.h
1.05
KB
-rw-r--r--
2024-03-10 20:38
netfilter_ipv6.h
5.86
KB
-rw-r--r--
2024-03-10 20:38
netfilter_netdev.h
3.96
KB
-rw-r--r--
2024-03-10 20:38
netfs.h
18.03
KB
-rw-r--r--
2024-03-10 20:38
netlink.h
10.69
KB
-rw-r--r--
2026-07-01 19:48
netpoll.h
2.48
KB
-rw-r--r--
2026-07-01 19:48
nfs.h
1.47
KB
-rw-r--r--
2026-07-01 19:48
nfs3.h
260
B
-rw-r--r--
2024-03-10 20:38
nfs4.h
23.78
KB
-rw-r--r--
2026-07-01 19:48
nfs_common.h
402
B
-rw-r--r--
2026-07-01 19:48
nfs_fs.h
19.97
KB
-rw-r--r--
2026-07-01 19:48
nfs_fs_i.h
308
B
-rw-r--r--
2024-03-10 20:38
nfs_fs_sb.h
11.1
KB
-rw-r--r--
2026-07-01 19:48
nfs_iostat.h
3.92
KB
-rw-r--r--
2024-03-10 20:38
nfs_page.h
8.7
KB
-rw-r--r--
2026-07-01 19:48
nfs_ssc.h
2.01
KB
-rw-r--r--
2024-03-10 20:38
nfs_xdr.h
42.41
KB
-rw-r--r--
2026-07-01 19:48
nfsacl.h
1.4
KB
-rw-r--r--
2024-03-10 20:38
nitro_enclaves.h
267
B
-rw-r--r--
2024-03-10 20:38
nl802154.h
3.87
KB
-rw-r--r--
2024-03-10 20:38
nls.h
3.09
KB
-rw-r--r--
2024-03-10 20:38
nmi.h
7.48
KB
-rw-r--r--
2026-07-01 19:48
node.h
4.7
KB
-rw-r--r--
2026-07-01 19:48
nodemask.h
17.51
KB
-rw-r--r--
2024-03-10 20:38
nodemask_types.h
263
B
-rw-r--r--
2024-03-10 20:38
nospec.h
2.24
KB
-rw-r--r--
2024-03-10 20:38
notifier.h
8.24
KB
-rw-r--r--
2024-03-10 20:38
ns_common.h
283
B
-rw-r--r--
2024-03-10 20:38
nsc_gpio.h
1.42
KB
-rw-r--r--
2024-03-10 20:38
nsproxy.h
3.15
KB
-rw-r--r--
2024-03-10 20:38
ntb.h
52.43
KB
-rw-r--r--
2024-03-10 20:38
ntb_transport.h
3.8
KB
-rw-r--r--
2024-03-10 20:38
nubus.h
5.54
KB
-rw-r--r--
2024-03-10 20:38
numa.h
1.38
KB
-rw-r--r--
2026-07-01 19:48
nvme-auth.h
1.44
KB
-rw-r--r--
2024-03-10 20:38
nvme-fc-driver.h
46.6
KB
-rw-r--r--
2024-03-10 20:38
nvme-fc.h
9.72
KB
-rw-r--r--
2024-03-10 20:38
nvme-keyring.h
732
B
-rw-r--r--
2026-07-01 19:48
nvme-rdma.h
2.07
KB
-rw-r--r--
2024-03-10 20:38
nvme-tcp.h
4.67
KB
-rw-r--r--
2026-07-01 19:48
nvme.h
45.98
KB
-rw-r--r--
2026-07-01 19:48
nvmem-consumer.h
6.87
KB
-rw-r--r--
2024-03-10 20:38
nvmem-provider.h
7.86
KB
-rw-r--r--
2024-03-10 20:38
nvram.h
3.47
KB
-rw-r--r--
2024-03-10 20:38
objagg.h
1.94
KB
-rw-r--r--
2026-07-01 19:48
objpool.h
6.91
KB
-rw-r--r--
2024-03-10 20:38
objtool.h
4.88
KB
-rw-r--r--
2024-03-10 20:38
objtool_types.h
1.8
KB
-rw-r--r--
2024-03-10 20:38
of.h
49.31
KB
-rw-r--r--
2026-07-01 19:48
of_address.h
5.46
KB
-rw-r--r--
2024-03-10 20:38
of_clk.h
819
B
-rw-r--r--
2024-03-10 20:38
of_device.h
2.23
KB
-rw-r--r--
2024-03-10 20:38
of_dma.h
2.3
KB
-rw-r--r--
2024-03-10 20:38
of_fdt.h
3.48
KB
-rw-r--r--
2026-07-01 19:48
of_gpio.h
878
B
-rw-r--r--
2024-03-10 20:38
of_graph.h
3.55
KB
-rw-r--r--
2024-03-10 20:38
of_iommu.h
671
B
-rw-r--r--
2024-03-10 20:38
of_irq.h
3.82
KB
-rw-r--r--
2024-03-10 20:38
of_mdio.h
3.91
KB
-rw-r--r--
2024-03-10 20:38
of_net.h
1.15
KB
-rw-r--r--
2024-03-10 20:38
of_pci.h
915
B
-rw-r--r--
2024-03-10 20:38
of_pdt.h
1.14
KB
-rw-r--r--
2024-03-10 20:38
of_platform.h
4.14
KB
-rw-r--r--
2024-03-10 20:38
of_reserved_mem.h
2.24
KB
-rw-r--r--
2024-03-10 20:38
oid_registry.h
5.99
KB
-rw-r--r--
2026-07-01 19:48
olpc-ec.h
2
KB
-rw-r--r--
2024-03-10 20:38
omap-dma.h
9.54
KB
-rw-r--r--
2024-03-10 20:38
omap-gpmc.h
2.64
KB
-rw-r--r--
2024-03-10 20:38
omap-iommu.h
880
B
-rw-r--r--
2024-03-10 20:38
omap-mailbox.h
689
B
-rw-r--r--
2024-03-10 20:38
omapfb.h
576
B
-rw-r--r--
2024-03-10 20:38
once.h
2.66
KB
-rw-r--r--
2026-07-01 19:48
once_lite.h
926
B
-rw-r--r--
2026-07-01 19:48
oom.h
2.85
KB
-rw-r--r--
2024-03-10 20:38
openvswitch.h
403
B
-rw-r--r--
2024-03-10 20:38
osq_lock.h
912
B
-rw-r--r--
2024-03-10 20:38
overflow.h
12.82
KB
-rw-r--r--
2026-07-01 19:48
packing.h
1.87
KB
-rw-r--r--
2026-07-01 19:48
padata.h
5.98
KB
-rw-r--r--
2026-07-01 19:48
page-flags-layout.h
3.49
KB
-rw-r--r--
2024-03-10 20:38
page-flags.h
37.74
KB
-rw-r--r--
2026-07-01 19:48
page-isolation.h
1.24
KB
-rw-r--r--
2024-03-10 20:38
page_counter.h
2.41
KB
-rw-r--r--
2024-03-10 20:38
page_ext.h
2.91
KB
-rw-r--r--
2024-03-10 20:38
page_idle.h
2.88
KB
-rw-r--r--
2024-03-10 20:38
page_owner.h
2.32
KB
-rw-r--r--
2024-03-10 20:38
page_ref.h
7.54
KB
-rw-r--r--
2026-07-01 19:48
page_reporting.h
895
B
-rw-r--r--
2024-03-10 20:38
page_table_check.h
3.74
KB
-rw-r--r--
2024-03-10 20:38
pageblock-flags.h
2.67
KB
-rw-r--r--
2026-07-01 19:48
pagemap.h
48.04
KB
-rw-r--r--
2026-07-01 19:48
pagevec.h
2.18
KB
-rw-r--r--
2024-03-10 20:38
pagewalk.h
5.17
KB
-rw-r--r--
2024-03-10 20:38
panic.h
2.67
KB
-rw-r--r--
2024-03-10 20:38
panic_notifier.h
296
B
-rw-r--r--
2024-03-10 20:38
parman.h
2.87
KB
-rw-r--r--
2024-03-10 20:38
parport.h
19.02
KB
-rw-r--r--
2024-03-10 20:38
parport_pc.h
6.62
KB
-rw-r--r--
2024-03-10 20:38
parser.h
1.17
KB
-rw-r--r--
2024-03-10 20:38
part_stat.h
2.38
KB
-rw-r--r--
2024-03-10 20:38
pata_arasan_cf_data.h
1.22
KB
-rw-r--r--
2024-03-10 20:38
patchkey.h
757
B
-rw-r--r--
2024-03-10 20:38
path.h
854
B
-rw-r--r--
2026-07-01 19:48
pch_dma.h
408
B
-rw-r--r--
2024-03-10 20:38
pci-acpi.h
4.18
KB
-rw-r--r--
2024-03-10 20:38
pci-ats.h
1.88
KB
-rw-r--r--
2026-07-01 19:48
pci-doe.h
576
B
-rw-r--r--
2024-03-10 20:38
pci-ecam.h
3.28
KB
-rw-r--r--
2024-03-10 20:38
pci-ep-cfs.h
956
B
-rw-r--r--
2024-03-10 20:38
pci-epc.h
10.83
KB
-rw-r--r--
2026-07-01 19:48
pci-epf.h
7.5
KB
-rw-r--r--
2024-03-10 20:38
pci-p2pdma.h
3.01
KB
-rw-r--r--
2024-03-10 20:38
pci.h
99.25
KB
-rw-r--r--
2026-07-01 19:48
pci_hotplug.h
4.35
KB
-rw-r--r--
2024-03-10 20:38
pci_ids.h
125.49
KB
-rw-r--r--
2026-07-01 19:48
pcs-lynx.h
442
B
-rw-r--r--
2024-03-10 20:38
pcs-rzn1-miic.h
385
B
-rw-r--r--
2024-03-10 20:38
pe.h
16.73
KB
-rw-r--r--
2024-03-10 20:38
peci-cpu.h
1.5
KB
-rw-r--r--
2024-03-10 20:38
peci.h
3.17
KB
-rw-r--r--
2024-03-10 20:38
percpu-defs.h
17.22
KB
-rw-r--r--
2024-03-10 20:38
percpu-refcount.h
11.22
KB
-rw-r--r--
2024-03-10 20:38
percpu-rwsem.h
4.33
KB
-rw-r--r--
2024-03-10 20:38
percpu.h
4.72
KB
-rw-r--r--
2024-03-10 20:38
percpu_counter.h
6.81
KB
-rw-r--r--
2024-03-10 20:38
perf_event.h
55.52
KB
-rw-r--r--
2026-07-01 19:48
perf_event_api.h
30
B
-rw-r--r--
2024-03-10 20:38
perf_regs.h
1.05
KB
-rw-r--r--
2024-03-10 20:38
personality.h
393
B
-rw-r--r--
2024-03-10 20:38
pfn.h
666
B
-rw-r--r--
2024-03-10 20:38
pfn_t.h
3.21
KB
-rw-r--r--
2024-03-10 20:38
pgalloc.h
948
B
-rw-r--r--
2026-07-01 19:48
pgtable.h
46.17
KB
-rw-r--r--
2026-07-01 19:48
pgtable_api.h
27
B
-rw-r--r--
2024-03-10 20:38
phonet.h
537
B
-rw-r--r--
2024-03-10 20:38
phy.h
71.52
KB
-rw-r--r--
2026-07-01 19:48
phy_fixed.h
1.82
KB
-rw-r--r--
2024-03-10 20:38
phy_led_triggers.h
1.01
KB
-rw-r--r--
2024-03-10 20:38
phylib_stubs.h
1.5
KB
-rw-r--r--
2024-03-10 20:38
phylink.h
24.63
KB
-rw-r--r--
2024-03-10 20:38
pid.h
9.38
KB
-rw-r--r--
2024-03-10 20:38
pid_namespace.h
3.07
KB
-rw-r--r--
2024-03-10 20:38
pid_types.h
282
B
-rw-r--r--
2024-03-10 20:38
pim.h
2.67
KB
-rw-r--r--
2024-03-10 20:38
pipe_fs_i.h
9.06
KB
-rw-r--r--
2024-03-10 20:38
pkeys.h
990
B
-rw-r--r--
2024-03-10 20:38
pktcdvd.h
5.72
KB
-rw-r--r--
2024-03-10 20:38
pl320-ipc.h
209
B
-rw-r--r--
2024-03-10 20:38
platform_device.h
13.42
KB
-rw-r--r--
2026-07-01 19:48
platform_profile.h
1.16
KB
-rw-r--r--
2026-07-01 19:48
pldmfw.h
4.76
KB
-rw-r--r--
2024-03-10 20:38
plist.h
8.58
KB
-rw-r--r--
2024-03-10 20:38
plist_types.h
315
B
-rw-r--r--
2024-03-10 20:38
pm-trace.h
940
B
-rw-r--r--
2024-03-10 20:38
pm.h
36.78
KB
-rw-r--r--
2024-03-10 20:38
pm_clock.h
2.59
KB
-rw-r--r--
2024-03-10 20:38
pm_domain.h
14.05
KB
-rw-r--r--
2026-07-01 19:48
pm_opp.h
18.38
KB
-rw-r--r--
2024-03-10 20:38
pm_qos.h
10.41
KB
-rw-r--r--
2024-03-10 20:38
pm_runtime.h
20.05
KB
-rw-r--r--
2026-07-01 19:48
pm_wakeirq.h
863
B
-rw-r--r--
2024-03-10 20:38
pm_wakeup.h
7.02
KB
-rw-r--r--
2024-03-10 20:38
pmbus.h
2.48
KB
-rw-r--r--
2024-03-10 20:38
pmu.h
2.45
KB
-rw-r--r--
2024-03-10 20:38
pnp.h
14.86
KB
-rw-r--r--
2026-07-01 19:48
poison.h
2.98
KB
-rw-r--r--
2024-03-10 20:38
poll.h
4.19
KB
-rw-r--r--
2026-07-01 19:48
polynomial.h
814
B
-rw-r--r--
2024-03-10 20:38
posix-clock.h
4.7
KB
-rw-r--r--
2026-07-01 19:48
posix-timers.h
5.35
KB
-rw-r--r--
2024-03-10 20:38
posix-timers_types.h
2.21
KB
-rw-r--r--
2024-03-10 20:38
posix_acl.h
4.28
KB
-rw-r--r--
2024-03-10 20:38
posix_acl_xattr.h
1.95
KB
-rw-r--r--
2024-03-10 20:38
power_supply.h
40.07
KB
-rw-r--r--
2024-03-10 20:38
powercap.h
11.98
KB
-rw-r--r--
2024-03-10 20:38
ppp-comp.h
2.97
KB
-rw-r--r--
2024-03-10 20:38
ppp_channel.h
3.04
KB
-rw-r--r--
2024-03-10 20:38
ppp_defs.h
1.12
KB
-rw-r--r--
2026-07-01 19:48
pps_kernel.h
2.94
KB
-rw-r--r--
2026-07-01 19:48
pr.h
1.33
KB
-rw-r--r--
2024-03-10 20:38
prandom.h
1.28
KB
-rw-r--r--
2024-03-10 20:38
preempt.h
15.75
KB
-rw-r--r--
2026-07-01 19:48
prefetch.h
1.55
KB
-rw-r--r--
2024-03-10 20:38
prime_numbers.h
1.35
KB
-rw-r--r--
2024-03-10 20:38
printk.h
23.3
KB
-rw-r--r--
2026-07-01 19:48
prmt.h
143
B
-rw-r--r--
2024-03-10 20:38
proc_fs.h
9.13
KB
-rw-r--r--
2026-07-01 19:48
proc_ns.h
2.52
KB
-rw-r--r--
2024-03-10 20:38
processor.h
1.84
KB
-rw-r--r--
2024-03-10 20:38
profile.h
1.5
KB
-rw-r--r--
2026-07-01 19:48
projid.h
2.22
KB
-rw-r--r--
2024-03-10 20:38
property.h
19.95
KB
-rw-r--r--
2026-07-01 19:48
pruss_driver.h
4.44
KB
-rw-r--r--
2026-07-01 19:48
psci.h
1.52
KB
-rw-r--r--
2024-03-10 20:38
pseudo_fs.h
362
B
-rw-r--r--
2024-03-10 20:38
psi.h
1.78
KB
-rw-r--r--
2024-03-10 20:38
psi_types.h
4.94
KB
-rw-r--r--
2026-07-01 19:48
psp-platform-access.h
1.83
KB
-rw-r--r--
2024-03-10 20:38
psp-sev.h
18.33
KB
-rw-r--r--
2024-03-10 20:38
psp-tee.h
2.65
KB
-rw-r--r--
2024-03-10 20:38
psp.h
771
B
-rw-r--r--
2026-07-01 19:48
pstore.h
7.76
KB
-rw-r--r--
2024-03-10 20:38
pstore_blk.h
1.53
KB
-rw-r--r--
2024-03-10 20:38
pstore_ram.h
883
B
-rw-r--r--
2024-03-10 20:38
pstore_zone.h
2.28
KB
-rw-r--r--
2024-03-10 20:38
ptdump.h
567
B
-rw-r--r--
2024-03-10 20:38
pti.h
240
B
-rw-r--r--
2024-03-10 20:38
ptp_classify.h
6.88
KB
-rw-r--r--
2024-03-10 20:38
ptp_clock_kernel.h
15.59
KB
-rw-r--r--
2024-03-10 20:38
ptp_kvm.h
486
B
-rw-r--r--
2024-03-10 20:38
ptp_mock.h
670
B
-rw-r--r--
2024-03-10 20:38
ptp_pch.h
666
B
-rw-r--r--
2024-03-10 20:38
ptr_ring.h
16.23
KB
-rw-r--r--
2026-07-01 19:48
ptrace.h
16.79
KB
-rw-r--r--
2024-03-10 20:38
ptrace_api.h
26
B
-rw-r--r--
2024-03-10 20:38
purgatory.h
590
B
-rw-r--r--
2024-03-10 20:38
pvclock_gtod.h
548
B
-rw-r--r--
2024-03-10 20:38
pwm.h
15.65
KB
-rw-r--r--
2026-07-01 19:48
pwm_backlight.h
709
B
-rw-r--r--
2024-03-10 20:38
pxa168_eth.h
728
B
-rw-r--r--
2024-03-10 20:38
pxa2xx_ssp.h
11.13
KB
-rw-r--r--
2024-03-10 20:38
qnx6_fs.h
3.27
KB
-rw-r--r--
2024-03-10 20:38
quota.h
18.76
KB
-rw-r--r--
2026-07-01 19:48
quotaops.h
10.05
KB
-rw-r--r--
2026-07-01 19:48
radix-tree.h
15.95
KB
-rw-r--r--
2024-03-10 20:38
raid_class.h
2.01
KB
-rw-r--r--
2024-03-10 20:38
ramfs.h
746
B
-rw-r--r--
2024-03-10 20:38
random.h
5.14
KB
-rw-r--r--
2024-03-10 20:38
randomize_kstack.h
3.83
KB
-rw-r--r--
2026-07-01 19:48
range.h
743
B
-rw-r--r--
2024-03-10 20:38
ras.h
1.39
KB
-rw-r--r--
2026-07-01 19:48
ratelimit.h
1.72
KB
-rw-r--r--
2024-03-10 20:38
ratelimit_types.h
1.33
KB
-rw-r--r--
2024-03-10 20:38
rational.h
639
B
-rw-r--r--
2024-03-10 20:38
rbtree.h
8.94
KB
-rw-r--r--
2024-03-10 20:38
rbtree_augmented.h
10.18
KB
-rw-r--r--
2024-03-10 20:38
rbtree_latch.h
6.66
KB
-rw-r--r--
2024-03-10 20:38
rbtree_types.h
946
B
-rw-r--r--
2024-03-10 20:38
rcu_node_tree.h
3.73
KB
-rw-r--r--
2024-03-10 20:38
rcu_notifier.h
1.09
KB
-rw-r--r--
2024-03-10 20:38
rcu_segcblist.h
11.72
KB
-rw-r--r--
2024-03-10 20:38
rcu_sync.h
1.46
KB
-rw-r--r--
2024-03-10 20:38
rculist.h
28.56
KB
-rw-r--r--
2024-03-10 20:38
rculist_bl.h
3.29
KB
-rw-r--r--
2024-03-10 20:38
rculist_nulls.h
8.71
KB
-rw-r--r--
2026-07-01 19:48
rcupdate.h
39.69
KB
-rw-r--r--
2026-07-01 19:48
rcupdate_trace.h
3.16
KB
-rw-r--r--
2024-03-10 20:38
rcupdate_wait.h
2.16
KB
-rw-r--r--
2024-03-10 20:38
rcuref.h
4.66
KB
-rw-r--r--
2026-07-01 19:48
rcutiny.h
4.62
KB
-rw-r--r--
2026-07-01 19:48
rcutree.h
4.38
KB
-rw-r--r--
2026-07-01 19:48
rcuwait.h
2.32
KB
-rw-r--r--
2024-03-10 20:38
rcuwait_api.h
27
B
-rw-r--r--
2024-03-10 20:38
reboot-mode.h
600
B
-rw-r--r--
2024-03-10 20:38
reboot.h
4.95
KB
-rw-r--r--
2024-03-10 20:38
reciprocal_div.h
3.28
KB
-rw-r--r--
2024-03-10 20:38
ref_tracker.h
2.35
KB
-rw-r--r--
2024-03-10 20:38
refcount.h
11.78
KB
-rw-r--r--
2024-03-10 20:38
refcount_api.h
28
B
-rw-r--r--
2024-03-10 20:38
refcount_types.h
512
B
-rw-r--r--
2024-03-10 20:38
regmap.h
69.16
KB
-rw-r--r--
2026-07-01 19:48
regset.h
11.35
KB
-rw-r--r--
2024-03-10 20:38
relay.h
8.47
KB
-rw-r--r--
2024-03-10 20:38
remoteproc.h
25.08
KB
-rw-r--r--
2024-03-10 20:38
resctrl.h
8.69
KB
-rw-r--r--
2024-03-10 20:38
reset-controller.h
3.57
KB
-rw-r--r--
2024-03-10 20:38
reset.h
30.96
KB
-rw-r--r--
2026-07-01 19:48
resource.h
223
B
-rw-r--r--
2024-03-10 20:38
resource_ext.h
2.08
KB
-rw-r--r--
2024-03-10 20:38
restart_block.h
1.11
KB
-rw-r--r--
2024-03-10 20:38
resume_user_mode.h
1.88
KB
-rw-r--r--
2024-03-10 20:38
rethook.h
3.15
KB
-rw-r--r--
2024-03-10 20:38
rfkill.h
10.75
KB
-rw-r--r--
2024-03-10 20:38
rhashtable-types.h
3.46
KB
-rw-r--r--
2024-03-10 20:38
rhashtable.h
37.92
KB
-rw-r--r--
2024-03-10 20:38
ring_buffer.h
7.93
KB
-rw-r--r--
2026-07-01 19:48
rio.h
19.02
KB
-rw-r--r--
2024-03-10 20:38
rio_drv.h
14.32
KB
-rw-r--r--
2024-03-10 20:38
rio_ids.h
723
B
-rw-r--r--
2024-03-10 20:38
rio_regs.h
19.07
KB
-rw-r--r--
2024-03-10 20:38
rmap.h
24.05
KB
-rw-r--r--
2024-03-10 20:38
rmi.h
12.04
KB
-rw-r--r--
2024-03-10 20:38
rndis.h
16.86
KB
-rw-r--r--
2024-03-10 20:38
rodata_test.h
394
B
-rw-r--r--
2024-03-10 20:38
root_dev.h
361
B
-rw-r--r--
2024-03-10 20:38
rpmsg.h
9.46
KB
-rw-r--r--
2024-03-10 20:38
rseq.h
3.08
KB
-rw-r--r--
2026-07-01 19:48
rslib.h
3.64
KB
-rw-r--r--
2024-03-10 20:38
rtc.h
9.25
KB
-rw-r--r--
2024-03-10 20:38
rtmutex.h
3.38
KB
-rw-r--r--
2024-03-10 20:38
rtnetlink.h
5.5
KB
-rw-r--r--
2024-03-10 20:38
rtsx_common.h
890
B
-rw-r--r--
2024-03-10 20:38
rtsx_pci.h
40.09
KB
-rw-r--r--
2024-03-10 20:38
rtsx_usb.h
15.38
KB
-rw-r--r--
2024-03-10 20:38
rv.h
1.56
KB
-rw-r--r--
2024-03-10 20:38
rwbase_rt.h
1020
B
-rw-r--r--
2026-07-01 19:48
rwlock.h
4.15
KB
-rw-r--r--
2024-03-10 20:38
rwlock_api_smp.h
7.85
KB
-rw-r--r--
2024-03-10 20:38
rwlock_rt.h
3.29
KB
-rw-r--r--
2024-03-10 20:38
rwlock_types.h
1.77
KB
-rw-r--r--
2024-03-10 20:38
rwsem.h
8.57
KB
-rw-r--r--
2026-07-01 19:48
sbitmap.h
17.81
KB
-rw-r--r--
2026-07-01 19:48
scatterlist.h
21.17
KB
-rw-r--r--
2026-07-01 19:48
scc.h
2.84
KB
-rw-r--r--
2024-03-10 20:38
sched.h
61.03
KB
-rw-r--r--
2026-07-01 19:48
sched_clock.h
1.46
KB
-rw-r--r--
2024-03-10 20:38
scmi_protocol.h
35
KB
-rw-r--r--
2024-03-10 20:38
scpi_protocol.h
2.67
KB
-rw-r--r--
2024-03-10 20:38
screen_info.h
3.35
KB
-rw-r--r--
2026-07-01 19:48
scs.h
2.25
KB
-rw-r--r--
2024-03-10 20:38
sctp.h
23.09
KB
-rw-r--r--
2024-03-10 20:38
scx200.h
1.82
KB
-rw-r--r--
2024-03-10 20:38
scx200_gpio.h
2.38
KB
-rw-r--r--
2024-03-10 20:38
seccomp.h
2.99
KB
-rw-r--r--
2026-07-01 19:48
seccomp_types.h
834
B
-rw-r--r--
2024-03-10 20:38
secretmem.h
706
B
-rw-r--r--
2026-07-01 19:48
securebits.h
239
B
-rw-r--r--
2024-03-10 20:38
security.h
61.1
KB
-rw-r--r--
2026-07-01 19:48
sed-opal-key.h
614
B
-rw-r--r--
2024-03-10 20:38
sed-opal.h
1.92
KB
-rw-r--r--
2024-03-10 20:38
seg6.h
121
B
-rw-r--r--
2024-03-10 20:38
seg6_genl.h
136
B
-rw-r--r--
2024-03-10 20:38
seg6_hmac.h
136
B
-rw-r--r--
2024-03-10 20:38
seg6_iptunnel.h
148
B
-rw-r--r--
2024-03-10 20:38
seg6_local.h
100
B
-rw-r--r--
2024-03-10 20:38
selection.h
1.81
KB
-rw-r--r--
2026-07-01 19:48
sem.h
515
B
-rw-r--r--
2024-03-10 20:38
sem_types.h
234
B
-rw-r--r--
2024-03-10 20:38
semaphore.h
1.58
KB
-rw-r--r--
2024-03-10 20:38
seq_buf.h
4.24
KB
-rw-r--r--
2024-03-10 20:38
seq_file.h
9.99
KB
-rw-r--r--
2024-03-10 20:38
seq_file_net.h
787
B
-rw-r--r--
2024-03-10 20:38
seqlock.h
36.77
KB
-rw-r--r--
2026-07-01 19:48
seqlock_api.h
27
B
-rw-r--r--
2024-03-10 20:38
seqlock_types.h
3.11
KB
-rw-r--r--
2024-03-10 20:38
serdev.h
10.12
KB
-rw-r--r--
2024-03-10 20:38
serial.h
1.03
KB
-rw-r--r--
2024-03-10 20:38
serial_8250.h
7.21
KB
-rw-r--r--
2024-03-10 20:38
serial_bcm63xx.h
4.73
KB
-rw-r--r--
2024-03-10 20:38
serial_core.h
36.91
KB
-rw-r--r--
2026-07-01 19:48
serial_max3100.h
1.19
KB
-rw-r--r--
2024-03-10 20:38
serial_s3c.h
9.32
KB
-rw-r--r--
2024-03-10 20:38
serial_sci.h
1.6
KB
-rw-r--r--
2024-03-10 20:38
serio.h
4.39
KB
-rw-r--r--
2026-07-01 19:48
set_memory.h
1.9
KB
-rw-r--r--
2024-03-10 20:38
sfp.h
16.93
KB
-rw-r--r--
2026-07-01 19:48
sh_clk.h
5.96
KB
-rw-r--r--
2024-03-10 20:38
sh_dma.h
3.47
KB
-rw-r--r--
2024-03-10 20:38
sh_eth.h
369
B
-rw-r--r--
2024-03-10 20:38
sh_intc.h
3.63
KB
-rw-r--r--
2024-03-10 20:38
sh_timer.h
172
B
-rw-r--r--
2024-03-10 20:38
shdma-base.h
4.27
KB
-rw-r--r--
2026-07-01 19:48
shm.h
961
B
-rw-r--r--
2024-03-10 20:38
shmem_fs.h
7.65
KB
-rw-r--r--
2026-07-01 19:48
shrinker.h
4.87
KB
-rw-r--r--
2024-03-10 20:38
signal.h
13.79
KB
-rw-r--r--
2024-03-10 20:38
signal_types.h
1.69
KB
-rw-r--r--
2024-03-10 20:38
signalfd.h
817
B
-rw-r--r--
2024-03-10 20:38
siox.h
2.26
KB
-rw-r--r--
2024-03-10 20:38
siphash.h
5.66
KB
-rw-r--r--
2024-03-10 20:38
sizes.h
1.68
KB
-rw-r--r--
2024-03-10 20:38
skb_array.h
5.22
KB
-rw-r--r--
2026-07-01 19:48
skbuff.h
145.75
KB
-rw-r--r--
2026-07-01 19:48
skmsg.h
15.4
KB
-rw-r--r--
2026-07-01 19:48
slab.h
24.79
KB
-rw-r--r--
2026-07-01 19:48
slimbus.h
6.93
KB
-rw-r--r--
2024-03-10 20:38
sm501-regs.h
11.62
KB
-rw-r--r--
2024-03-10 20:38
sm501.h
4.02
KB
-rw-r--r--
2024-03-10 20:38
smc91x.h
1.57
KB
-rw-r--r--
2024-03-10 20:38
smp.h
7.93
KB
-rw-r--r--
2026-07-01 19:48
smp_types.h
1.35
KB
-rw-r--r--
2024-03-10 20:38
smpboot.h
1.68
KB
-rw-r--r--
2024-03-10 20:38
smsc911x.h
1.63
KB
-rw-r--r--
2024-03-10 20:38
smscphy.h
3.1
KB
-rw-r--r--
2024-03-10 20:38
sock_diag.h
2.42
KB
-rw-r--r--
2026-07-01 19:48
socket.h
15.49
KB
-rw-r--r--
2024-03-10 20:38
sockptr.h
3.8
KB
-rw-r--r--
2026-07-01 19:48
softirq.h
29
B
-rw-r--r--
2024-03-10 20:38
sonet.h
469
B
-rw-r--r--
2024-03-10 20:38
sony-laptop.h
1.41
KB
-rw-r--r--
2024-03-10 20:38
sonypi.h
1.71
KB
-rw-r--r--
2024-03-10 20:38
sort.h
348
B
-rw-r--r--
2024-03-10 20:38
sound.h
685
B
-rw-r--r--
2024-03-10 20:38
soundcard.h
1.59
KB
-rw-r--r--
2024-03-10 20:38
spinlock.h
17.55
KB
-rw-r--r--
2026-07-01 19:48
spinlock_api.h
28
B
-rw-r--r--
2024-03-10 20:38
spinlock_api_smp.h
5.23
KB
-rw-r--r--
2024-03-10 20:38
spinlock_api_up.h
3.38
KB
-rw-r--r--
2024-03-10 20:38
spinlock_rt.h
4.12
KB
-rw-r--r--
2024-03-10 20:38
spinlock_types.h
1.78
KB
-rw-r--r--
2024-03-10 20:38
spinlock_types_raw.h
1.69
KB
-rw-r--r--
2024-03-10 20:38
spinlock_types_up.h
730
B
-rw-r--r--
2024-03-10 20:38
spinlock_up.h
2.08
KB
-rw-r--r--
2026-07-01 19:48
splice.h
3.72
KB
-rw-r--r--
2024-03-10 20:38
spmi.h
5.85
KB
-rw-r--r--
2024-03-10 20:38
sprintf.h
1.24
KB
-rw-r--r--
2026-07-01 19:48
sram.h
437
B
-rw-r--r--
2024-03-10 20:38
srcu.h
11.26
KB
-rw-r--r--
2024-03-10 20:38
srcutiny.h
2.96
KB
-rw-r--r--
2024-03-10 20:38
srcutree.h
7.67
KB
-rw-r--r--
2024-03-10 20:38
ssbi.h
726
B
-rw-r--r--
2024-03-10 20:38
stackdepot.h
8.65
KB
-rw-r--r--
2026-07-01 19:48
stackleak.h
2.36
KB
-rw-r--r--
2024-03-10 20:38
stackprotector.h
859
B
-rw-r--r--
2024-03-10 20:38
stacktrace.h
4
KB
-rw-r--r--
2024-03-10 20:38
start_kernel.h
448
B
-rw-r--r--
2024-03-10 20:38
stat.h
1.69
KB
-rw-r--r--
2024-03-10 20:38
statfs.h
1.78
KB
-rw-r--r--
2024-03-10 20:38
static_call.h
10.66
KB
-rw-r--r--
2026-07-01 19:48
static_call_types.h
2.74
KB
-rw-r--r--
2024-03-10 20:38
static_key.h
30
B
-rw-r--r--
2024-03-10 20:38
stdarg.h
313
B
-rw-r--r--
2024-03-10 20:38
stddef.h
3.17
KB
-rw-r--r--
2024-03-10 20:38
stm.h
4.34
KB
-rw-r--r--
2024-03-10 20:38
stmmac.h
8.35
KB
-rw-r--r--
2026-07-01 19:48
stmp3xxx_rtc_wdt.h
331
B
-rw-r--r--
2024-03-10 20:38
stmp_device.h
412
B
-rw-r--r--
2024-03-10 20:38
stop_machine.h
4.93
KB
-rw-r--r--
2024-03-10 20:38
string.h
12.24
KB
-rw-r--r--
2024-03-10 20:38
string_choices.h
979
B
-rw-r--r--
2026-07-01 19:48
string_helpers.h
3.17
KB
-rw-r--r--
2024-03-10 20:38
stringhash.h
2.65
KB
-rw-r--r--
2024-03-10 20:38
stringify.h
395
B
-rw-r--r--
2024-03-10 20:38
sungem_phy.h
3.96
KB
-rw-r--r--
2024-03-10 20:38
sunserialcore.h
1.08
KB
-rw-r--r--
2024-03-10 20:38
sunxi-rsb.h
2.89
KB
-rw-r--r--
2024-03-10 20:38
surface_acpi_notify.h
1.07
KB
-rw-r--r--
2024-03-10 20:38
suspend.h
21.74
KB
-rw-r--r--
2024-03-10 20:38
svga.h
3.75
KB
-rw-r--r--
2024-03-10 20:38
sw842.h
328
B
-rw-r--r--
2024-03-10 20:38
swab.h
912
B
-rw-r--r--
2024-03-10 20:38
swait.h
9.47
KB
-rw-r--r--
2024-03-10 20:38
swait_api.h
25
B
-rw-r--r--
2024-03-10 20:38
swap.h
21.49
KB
-rw-r--r--
2026-07-01 19:48
swap_cgroup.h
972
B
-rw-r--r--
2024-03-10 20:38
swap_slots.h
842
B
-rw-r--r--
2024-03-10 20:38
swapfile.h
450
B
-rw-r--r--
2024-03-10 20:38
swapops.h
15.55
KB
-rw-r--r--
2026-07-01 19:48
swiotlb.h
8.06
KB
-rw-r--r--
2024-03-10 20:38
switchtec.h
10.92
KB
-rw-r--r--
2024-03-10 20:38
sxgbe_platform.h
1.23
KB
-rw-r--r--
2024-03-10 20:38
sync_core.h
581
B
-rw-r--r--
2024-03-10 20:38
sync_file.h
1.57
KB
-rw-r--r--
2024-03-10 20:38
synclink.h
989
B
-rw-r--r--
2024-03-10 20:38
sys.h
960
B
-rw-r--r--
2024-03-10 20:38
sys_soc.h
1.26
KB
-rw-r--r--
2024-03-10 20:38
syscall_user_dispatch.h
1.31
KB
-rw-r--r--
2024-03-10 20:38
syscall_user_dispatch_types.h
388
B
-rw-r--r--
2024-03-10 20:38
syscalls.h
55.59
KB
-rw-r--r--
2026-07-01 19:48
syscalls_api.h
28
B
-rw-r--r--
2024-03-10 20:38
syscore_ops.h
633
B
-rw-r--r--
2024-03-10 20:38
sysctl.h
9.6
KB
-rw-r--r--
2026-07-01 19:48
sysfb.h
2.76
KB
-rw-r--r--
2026-07-01 19:48
sysfs.h
18.23
KB
-rw-r--r--
2024-03-10 20:38
syslog.h
1.29
KB
-rw-r--r--
2024-03-10 20:38
sysrq.h
1.95
KB
-rw-r--r--
2024-03-10 20:38
sysv_fs.h
9.03
KB
-rw-r--r--
2024-03-10 20:38
t10-pi.h
2.17
KB
-rw-r--r--
2024-03-10 20:38
task_io_accounting.h
1.13
KB
-rw-r--r--
2024-03-10 20:38
task_io_accounting_ops.h
2.55
KB
-rw-r--r--
2024-03-10 20:38
task_work.h
1.1
KB
-rw-r--r--
2026-07-01 19:48
taskstats_kern.h
957
B
-rw-r--r--
2024-03-10 20:38
tboot.h
3.26
KB
-rw-r--r--
2024-03-10 20:38
tc.h
3.45
KB
-rw-r--r--
2024-03-10 20:38
tca6416_keypad.h
683
B
-rw-r--r--
2024-03-10 20:38
tcp.h
20.61
KB
-rw-r--r--
2026-07-01 19:48
tee_drv.h
15.77
KB
-rw-r--r--
2024-03-10 20:38
tegra-icc.h
1.86
KB
-rw-r--r--
2024-03-10 20:38
termios_internal.h
1.48
KB
-rw-r--r--
2024-03-10 20:38
textsearch.h
4.75
KB
-rw-r--r--
2026-07-01 19:48
textsearch_fsm.h
1.19
KB
-rw-r--r--
2024-03-10 20:38
tfrc.h
1.68
KB
-rw-r--r--
2024-03-10 20:38
thermal.h
15.81
KB
-rw-r--r--
2026-07-01 19:48
thread_info.h
7.47
KB
-rw-r--r--
2024-03-10 20:38
threads.h
1.28
KB
-rw-r--r--
2024-03-10 20:38
thunderbolt.h
21.4
KB
-rw-r--r--
2024-03-10 20:38
ti-emif-sram.h
4.75
KB
-rw-r--r--
2024-03-10 20:38
ti_wilink_st.h
13.47
KB
-rw-r--r--
2024-03-10 20:38
tick.h
9.85
KB
-rw-r--r--
2026-07-01 19:48
tifm.h
4.66
KB
-rw-r--r--
2024-03-10 20:38
timb_dma.h
1.17
KB
-rw-r--r--
2024-03-10 20:38
timb_gpio.h
717
B
-rw-r--r--
2024-03-10 20:38
time.h
3.14
KB
-rw-r--r--
2024-03-10 20:38
time32.h
1.75
KB
-rw-r--r--
2024-03-10 20:38
time64.h
4.57
KB
-rw-r--r--
2024-03-10 20:38
time_namespace.h
4.02
KB
-rw-r--r--
2024-03-10 20:38
timecounter.h
4.14
KB
-rw-r--r--
2024-03-10 20:38
timekeeper_internal.h
5.33
KB
-rw-r--r--
2024-03-10 20:38
timekeeping.h
7.67
KB
-rw-r--r--
2024-03-10 20:38
timer.h
7.38
KB
-rw-r--r--
2024-03-10 20:38
timer_types.h
477
B
-rw-r--r--
2024-03-10 20:38
timerfd.h
508
B
-rw-r--r--
2024-03-10 20:38
timeriomem-rng.h
432
B
-rw-r--r--
2024-03-10 20:38
timerqueue.h
1.28
KB
-rw-r--r--
2024-03-10 20:38
timerqueue_types.h
335
B
-rw-r--r--
2024-03-10 20:38
timex.h
6.67
KB
-rw-r--r--
2024-03-10 20:38
tnum.h
4.26
KB
-rw-r--r--
2026-07-01 19:48
topology.h
7.33
KB
-rw-r--r--
2024-03-10 20:38
torture.h
4.9
KB
-rw-r--r--
2024-03-10 20:38
toshiba.h
460
B
-rw-r--r--
2024-03-10 20:38
tpm.h
11.46
KB
-rw-r--r--
2026-07-01 19:48
tpm_command.h
847
B
-rw-r--r--
2024-03-10 20:38
tpm_eventlog.h
6.59
KB
-rw-r--r--
2026-07-01 19:48
trace.h
2.77
KB
-rw-r--r--
2026-07-01 19:48
trace_clock.h
667
B
-rw-r--r--
2024-03-10 20:38
trace_events.h
30.65
KB
-rw-r--r--
2026-07-01 19:48
trace_recursion.h
6.62
KB
-rw-r--r--
2026-07-01 19:48
trace_seq.h
4.52
KB
-rw-r--r--
2026-07-01 19:48
tracefs.h
3.79
KB
-rw-r--r--
2026-07-01 19:48
tracepoint-defs.h
2.36
KB
-rw-r--r--
2024-03-10 20:38
tracepoint.h
18.46
KB
-rw-r--r--
2024-03-10 20:38
transport_class.h
2.58
KB
-rw-r--r--
2024-03-10 20:38
ts-nbus.h
532
B
-rw-r--r--
2024-03-10 20:38
tsacct_kern.h
1.2
KB
-rw-r--r--
2024-03-10 20:38
tsm.h
2.04
KB
-rw-r--r--
2024-03-10 20:38
tty.h
17.65
KB
-rw-r--r--
2024-03-10 20:38
tty_buffer.h
1.29
KB
-rw-r--r--
2024-03-10 20:38
tty_driver.h
22.2
KB
-rw-r--r--
2026-07-01 19:48
tty_flip.h
2.68
KB
-rw-r--r--
2024-03-10 20:38
tty_ldisc.h
10.29
KB
-rw-r--r--
2024-03-10 20:38
tty_port.h
9.69
KB
-rw-r--r--
2026-07-01 19:48
typecheck.h
782
B
-rw-r--r--
2024-03-10 20:38
types.h
6.03
KB
-rw-r--r--
2026-07-01 19:48
u64_stats_sync.h
5.61
KB
-rw-r--r--
2026-07-01 19:48
u64_stats_sync_api.h
34
B
-rw-r--r--
2024-03-10 20:38
uacce.h
4.37
KB
-rw-r--r--
2024-03-10 20:38
uaccess.h
14.36
KB
-rw-r--r--
2026-07-01 19:48
ubsan.h
307
B
-rw-r--r--
2026-07-01 19:48
ucs2_string.h
740
B
-rw-r--r--
2024-03-10 20:38
udp.h
5.55
KB
-rw-r--r--
2026-07-01 19:48
uidgid.h
4.27
KB
-rw-r--r--
2024-03-10 20:38
uidgid_types.h
241
B
-rw-r--r--
2024-03-10 20:38
uio.h
11.2
KB
-rw-r--r--
2024-03-10 20:38
uio_driver.h
4.71
KB
-rw-r--r--
2024-03-10 20:38
umh.h
1.82
KB
-rw-r--r--
2024-03-10 20:38
unicode.h
1.96
KB
-rw-r--r--
2024-03-10 20:38
units.h
2.85
KB
-rw-r--r--
2024-03-10 20:38
uprobes.h
6.09
KB
-rw-r--r--
2026-07-01 19:48
usb.h
78.97
KB
-rw-r--r--
2026-07-01 19:48
usb_usual.h
3.58
KB
-rw-r--r--
2024-03-10 20:38
usbdevice_fs.h
2.18
KB
-rw-r--r--
2024-03-10 20:38
user-return-notifier.h
1.18
KB
-rw-r--r--
2024-03-10 20:38
user.h
22
B
-rw-r--r--
2024-03-10 20:38
user_events.h
1.68
KB
-rw-r--r--
2024-03-10 20:38
user_namespace.h
6.41
KB
-rw-r--r--
2026-07-01 19:48
userfaultfd_k.h
10.9
KB
-rw-r--r--
2026-07-01 19:48
usermode_driver.h
515
B
-rw-r--r--
2024-03-10 20:38
util_macros.h
2.51
KB
-rw-r--r--
2026-07-01 19:48
uts.h
388
B
-rw-r--r--
2024-03-10 20:38
utsname.h
1.8
KB
-rw-r--r--
2024-03-10 20:38
uuid.h
2.49
KB
-rw-r--r--
2024-03-10 20:38
vbox_utils.h
1.75
KB
-rw-r--r--
2024-03-10 20:38
vdpa.h
21.38
KB
-rw-r--r--
2024-03-10 20:38
verification.h
1.93
KB
-rw-r--r--
2024-03-10 20:38
vermagic.h
1.24
KB
-rw-r--r--
2024-03-10 20:38
vexpress.h
297
B
-rw-r--r--
2024-03-10 20:38
vfio.h
13.09
KB
-rw-r--r--
2026-07-01 19:48
vfio_pci_core.h
5.35
KB
-rw-r--r--
2026-07-01 19:48
vfs.h
116
B
-rw-r--r--
2024-03-10 20:38
vga_switcheroo.h
8.62
KB
-rw-r--r--
2024-03-10 20:38
vgaarb.h
2.81
KB
-rw-r--r--
2024-03-10 20:38
vhost_iotlb.h
1.43
KB
-rw-r--r--
2024-03-10 20:38
via-core.h
6.57
KB
-rw-r--r--
2024-03-10 20:38
via.h
932
B
-rw-r--r--
2024-03-10 20:38
via_i2c.h
844
B
-rw-r--r--
2024-03-10 20:38
videodev2.h
2.7
KB
-rw-r--r--
2024-03-10 20:38
virtio.h
8.68
KB
-rw-r--r--
2026-07-01 19:48
virtio_anchor.h
507
B
-rw-r--r--
2024-03-10 20:38
virtio_byteorder.h
1.46
KB
-rw-r--r--
2024-03-10 20:38
virtio_caif.h
513
B
-rw-r--r--
2024-03-10 20:38
virtio_config.h
18.39
KB
-rw-r--r--
2026-07-01 19:48
virtio_dma_buf.h
1.12
KB
-rw-r--r--
2024-03-10 20:38
virtio_net.h
6.53
KB
-rw-r--r--
2026-07-01 19:48
virtio_pci_admin.h
843
B
-rw-r--r--
2024-03-10 20:38
virtio_pci_legacy.h
1.37
KB
-rw-r--r--
2024-03-10 20:38
virtio_pci_modern.h
4.39
KB
-rw-r--r--
2024-03-10 20:38
virtio_ring.h
3.2
KB
-rw-r--r--
2024-03-10 20:38
virtio_vsock.h
8.16
KB
-rw-r--r--
2026-07-01 19:48
vm_event_item.h
3.82
KB
-rw-r--r--
2024-03-10 20:38
vmalloc.h
8.38
KB
-rw-r--r--
2026-07-01 19:48
vmpressure.h
1.68
KB
-rw-r--r--
2024-03-10 20:38
vmstat.h
16.97
KB
-rw-r--r--
2026-07-01 19:48
vmw_vmci_api.h
2.88
KB
-rw-r--r--
2024-03-10 20:38
vmw_vmci_defs.h
30.03
KB
-rw-r--r--
2024-03-10 20:38
vringh.h
9.35
KB
-rw-r--r--
2024-03-10 20:38
vt.h
611
B
-rw-r--r--
2024-03-10 20:38
vt_buffer.h
1.49
KB
-rw-r--r--
2024-03-10 20:38
vt_kern.h
5.28
KB
-rw-r--r--
2024-03-10 20:38
vtime.h
4.6
KB
-rw-r--r--
2024-03-10 20:38
w1.h
8.93
KB
-rw-r--r--
2024-03-10 20:38
wait.h
43.03
KB
-rw-r--r--
2026-07-01 19:48
wait_api.h
24
B
-rw-r--r--
2024-03-10 20:38
wait_bit.h
13.17
KB
-rw-r--r--
2026-07-01 19:48
watch_queue.h
3.83
KB
-rw-r--r--
2024-03-10 20:38
watchdog.h
8.21
KB
-rw-r--r--
2024-03-10 20:38
win_minmax.h
832
B
-rw-r--r--
2024-03-10 20:38
wireless.h
1.57
KB
-rw-r--r--
2024-03-10 20:38
wkup_m3_ipc.h
1.58
KB
-rw-r--r--
2024-03-10 20:38
wm97xx.h
10.44
KB
-rw-r--r--
2024-03-10 20:38
wmi.h
2.75
KB
-rw-r--r--
2024-03-10 20:38
workqueue.h
24.54
KB
-rw-r--r--
2026-07-01 19:48
workqueue_api.h
29
B
-rw-r--r--
2024-03-10 20:38
workqueue_types.h
564
B
-rw-r--r--
2024-03-10 20:38
writeback.h
12.25
KB
-rw-r--r--
2024-03-10 20:38
ww_mutex.h
12.73
KB
-rw-r--r--
2024-03-10 20:38
wwan.h
5.88
KB
-rw-r--r--
2026-07-01 19:48
xarray.h
58
KB
-rw-r--r--
2026-07-01 19:48
xattr.h
4.34
KB
-rw-r--r--
2024-03-10 20:38
xxhash.h
8.27
KB
-rw-r--r--
2024-03-10 20:38
xz.h
16.15
KB
-rw-r--r--
2024-03-10 20:38
yam.h
2.18
KB
-rw-r--r--
2024-03-10 20:38
zconf.h
1.73
KB
-rw-r--r--
2024-03-10 20:38
zlib.h
28.11
KB
-rw-r--r--
2024-03-10 20:38
zorro.h
3.57
KB
-rw-r--r--
2024-03-10 20:38
zpool.h
2.84
KB
-rw-r--r--
2024-03-10 20:38
zsmalloc.h
1.71
KB
-rw-r--r--
2024-03-10 20:38
zstd.h
17.11
KB
-rw-r--r--
2024-03-10 20:38
zstd_errors.h
3.09
KB
-rw-r--r--
2024-03-10 20:38
zstd_lib.h
144.05
KB
-rw-r--r--
2024-03-10 20:38
zswap.h
1.67
KB
-rw-r--r--
2026-07-01 19:48
zutil.h
2.73
KB
-rw-r--r--
2024-03-10 20:38
Save
Rename
/* SPDX-License-Identifier: GPL-2.0-only */ /* Copyright (c) 2011-2014 PLUMgrid, http://plumgrid.com */ #ifndef _LINUX_BPF_H #define _LINUX_BPF_H 1 #include <uapi/linux/bpf.h> #include <uapi/linux/filter.h> #include <linux/workqueue.h> #include <linux/file.h> #include <linux/percpu.h> #include <linux/err.h> #include <linux/rbtree_latch.h> #include <linux/numa.h> #include <linux/mm_types.h> #include <linux/wait.h> #include <linux/refcount.h> #include <linux/mutex.h> #include <linux/module.h> #include <linux/kallsyms.h> #include <linux/capability.h> #include <linux/sched/mm.h> #include <linux/slab.h> #include <linux/percpu-refcount.h> #include <linux/stddef.h> #include <linux/bpfptr.h> #include <linux/btf.h> #include <linux/rcupdate_trace.h> #include <linux/static_call.h> #include <linux/memcontrol.h> #include <linux/cfi.h> struct bpf_verifier_env; struct bpf_verifier_log; struct perf_event; struct bpf_prog; struct bpf_prog_aux; struct bpf_map; struct sock; struct seq_file; struct btf; struct btf_type; struct exception_table_entry; struct seq_operations; struct bpf_iter_aux_info; struct bpf_local_storage; struct bpf_local_storage_map; struct kobject; struct mem_cgroup; struct module; struct bpf_func_state; struct ftrace_ops; struct cgroup; extern struct idr btf_idr; extern spinlock_t btf_idr_lock; extern struct kobject *btf_kobj; extern struct bpf_mem_alloc bpf_global_ma, bpf_global_percpu_ma; extern bool bpf_global_ma_set; typedef u64 (*bpf_callback_t)(u64, u64, u64, u64, u64); typedef int (*bpf_iter_init_seq_priv_t)(void *private_data, struct bpf_iter_aux_info *aux); typedef void (*bpf_iter_fini_seq_priv_t)(void *private_data); typedef unsigned int (*bpf_func_t)(const void *, const struct bpf_insn *); struct bpf_iter_seq_info { const struct seq_operations *seq_ops; bpf_iter_init_seq_priv_t init_seq_private; bpf_iter_fini_seq_priv_t fini_seq_private; u32 seq_priv_size; }; /* map is generic key/value storage optionally accessible by eBPF programs */ struct bpf_map_ops { /* funcs callable from userspace (via syscall) */ int (*map_alloc_check)(union bpf_attr *attr); struct bpf_map *(*map_alloc)(union bpf_attr *attr); void (*map_release)(struct bpf_map *map, struct file *map_file); void (*map_free)(struct bpf_map *map); int (*map_get_next_key)(struct bpf_map *map, void *key, void *next_key); void (*map_release_uref)(struct bpf_map *map); void *(*map_lookup_elem_sys_only)(struct bpf_map *map, void *key); int (*map_lookup_batch)(struct bpf_map *map, const union bpf_attr *attr, union bpf_attr __user *uattr); int (*map_lookup_and_delete_elem)(struct bpf_map *map, void *key, void *value, u64 flags); int (*map_lookup_and_delete_batch)(struct bpf_map *map, const union bpf_attr *attr, union bpf_attr __user *uattr); int (*map_update_batch)(struct bpf_map *map, struct file *map_file, const union bpf_attr *attr, union bpf_attr __user *uattr); int (*map_delete_batch)(struct bpf_map *map, const union bpf_attr *attr, union bpf_attr __user *uattr); /* funcs callable from userspace and from eBPF programs */ void *(*map_lookup_elem)(struct bpf_map *map, void *key); long (*map_update_elem)(struct bpf_map *map, void *key, void *value, u64 flags); long (*map_delete_elem)(struct bpf_map *map, void *key); long (*map_push_elem)(struct bpf_map *map, void *value, u64 flags); long (*map_pop_elem)(struct bpf_map *map, void *value); long (*map_peek_elem)(struct bpf_map *map, void *value); void *(*map_lookup_percpu_elem)(struct bpf_map *map, void *key, u32 cpu); /* funcs called by prog_array and perf_event_array map */ void *(*map_fd_get_ptr)(struct bpf_map *map, struct file *map_file, int fd); /* If need_defer is true, the implementation should guarantee that * the to-be-put element is still alive before the bpf program, which * may manipulate it, exists. */ void (*map_fd_put_ptr)(struct bpf_map *map, void *ptr, bool need_defer); int (*map_gen_lookup)(struct bpf_map *map, struct bpf_insn *insn_buf); u32 (*map_fd_sys_lookup_elem)(void *ptr); void (*map_seq_show_elem)(struct bpf_map *map, void *key, struct seq_file *m); int (*map_check_btf)(const struct bpf_map *map, const struct btf *btf, const struct btf_type *key_type, const struct btf_type *value_type); /* Prog poke tracking helpers. */ int (*map_poke_track)(struct bpf_map *map, struct bpf_prog_aux *aux); void (*map_poke_untrack)(struct bpf_map *map, struct bpf_prog_aux *aux); void (*map_poke_run)(struct bpf_map *map, u32 key, struct bpf_prog *old, struct bpf_prog *new); /* Direct value access helpers. */ int (*map_direct_value_addr)(const struct bpf_map *map, u64 *imm, u32 off); int (*map_direct_value_meta)(const struct bpf_map *map, u64 imm, u32 *off); int (*map_mmap)(struct bpf_map *map, struct vm_area_struct *vma); __poll_t (*map_poll)(struct bpf_map *map, struct file *filp, struct poll_table_struct *pts); /* Functions called by bpf_local_storage maps */ int (*map_local_storage_charge)(struct bpf_local_storage_map *smap, void *owner, u32 size); void (*map_local_storage_uncharge)(struct bpf_local_storage_map *smap, void *owner, u32 size); struct bpf_local_storage __rcu ** (*map_owner_storage_ptr)(void *owner); /* Misc helpers.*/ long (*map_redirect)(struct bpf_map *map, u64 key, u64 flags); /* map_meta_equal must be implemented for maps that can be * used as an inner map. It is a runtime check to ensure * an inner map can be inserted to an outer map. * * Some properties of the inner map has been used during the * verification time. When inserting an inner map at the runtime, * map_meta_equal has to ensure the inserting map has the same * properties that the verifier has used earlier. */ bool (*map_meta_equal)(const struct bpf_map *meta0, const struct bpf_map *meta1); int (*map_set_for_each_callback_args)(struct bpf_verifier_env *env, struct bpf_func_state *caller, struct bpf_func_state *callee); long (*map_for_each_callback)(struct bpf_map *map, bpf_callback_t callback_fn, void *callback_ctx, u64 flags); u64 (*map_mem_usage)(const struct bpf_map *map); /* BTF id of struct allocated by map_alloc */ int *map_btf_id; /* bpf_iter info used to open a seq_file */ const struct bpf_iter_seq_info *iter_seq_info; }; enum { /* Support at most 10 fields in a BTF type */ BTF_FIELDS_MAX = 10, }; enum btf_field_type { BPF_SPIN_LOCK = (1 << 0), BPF_TIMER = (1 << 1), BPF_KPTR_UNREF = (1 << 2), BPF_KPTR_REF = (1 << 3), BPF_KPTR_PERCPU = (1 << 4), BPF_KPTR = BPF_KPTR_UNREF | BPF_KPTR_REF | BPF_KPTR_PERCPU, BPF_LIST_HEAD = (1 << 5), BPF_LIST_NODE = (1 << 6), BPF_RB_ROOT = (1 << 7), BPF_RB_NODE = (1 << 8), BPF_GRAPH_NODE = BPF_RB_NODE | BPF_LIST_NODE, BPF_GRAPH_ROOT = BPF_RB_ROOT | BPF_LIST_HEAD, BPF_REFCOUNT = (1 << 9), }; enum bpf_cgroup_storage_type { BPF_CGROUP_STORAGE_SHARED, BPF_CGROUP_STORAGE_PERCPU, __BPF_CGROUP_STORAGE_MAX #define MAX_BPF_CGROUP_STORAGE_TYPE __BPF_CGROUP_STORAGE_MAX }; #ifdef CONFIG_CGROUP_BPF # define for_each_cgroup_storage_type(stype) \ for (stype = 0; stype < MAX_BPF_CGROUP_STORAGE_TYPE; stype++) #else # define for_each_cgroup_storage_type(stype) for (; false; ) #endif /* CONFIG_CGROUP_BPF */ typedef void (*btf_dtor_kfunc_t)(void *); struct btf_field_kptr { struct btf *btf; struct module *module; /* dtor used if btf_is_kernel(btf), otherwise the type is * program-allocated, dtor is NULL, and __bpf_obj_drop_impl is used */ btf_dtor_kfunc_t dtor; u32 btf_id; }; struct btf_field_graph_root { struct btf *btf; u32 value_btf_id; u32 node_offset; struct btf_record *value_rec; }; struct btf_field { u32 offset; u32 size; enum btf_field_type type; union { struct btf_field_kptr kptr; struct btf_field_graph_root graph_root; }; }; struct btf_record { u32 cnt; u32 field_mask; int spin_lock_off; int timer_off; int refcount_off; struct btf_field fields[]; }; /* Non-opaque version of bpf_rb_node in uapi/linux/bpf.h */ struct bpf_rb_node_kern { struct rb_node rb_node; void *owner; } __attribute__((aligned(8))); /* Non-opaque version of bpf_list_node in uapi/linux/bpf.h */ struct bpf_list_node_kern { struct list_head list_head; void *owner; } __attribute__((aligned(8))); /* 'Ownership' of program-containing map is claimed by the first program * that is going to use this map or by the first program which FD is * stored in the map to make sure that all callers and callees have the * same prog type, JITed flag and xdp_has_frags flag. */ struct bpf_map_owner { enum bpf_prog_type type; bool jited; bool xdp_has_frags; u64 storage_cookie[MAX_BPF_CGROUP_STORAGE_TYPE]; const struct btf_type *attach_func_proto; enum bpf_attach_type expected_attach_type; }; struct bpf_map { /* The first two cachelines with read-mostly members of which some * are also accessed in fast-path (e.g. ops, max_entries). */ const struct bpf_map_ops *ops ____cacheline_aligned; struct bpf_map *inner_map_meta; #ifdef CONFIG_SECURITY void *security; #endif enum bpf_map_type map_type; u32 key_size; u32 value_size; u32 max_entries; u64 map_extra; /* any per-map-type extra fields */ u32 map_flags; u32 id; struct btf_record *record; int numa_node; u32 btf_key_type_id; u32 btf_value_type_id; u32 btf_vmlinux_value_type_id; struct btf *btf; #ifdef CONFIG_MEMCG_KMEM struct obj_cgroup *objcg; #endif char name[BPF_OBJ_NAME_LEN]; /* The 3rd and 4th cacheline with misc members to avoid false sharing * particularly with refcounting. */ atomic64_t refcnt ____cacheline_aligned; atomic64_t usercnt; /* rcu is used before freeing and work is only used during freeing */ union { struct work_struct work; struct rcu_head rcu; }; struct mutex freeze_mutex; atomic64_t writecnt; spinlock_t owner_lock; struct bpf_map_owner *owner; bool bypass_spec_v1; bool frozen; /* write-once; write-protected by freeze_mutex */ bool free_after_mult_rcu_gp; bool free_after_rcu_gp; atomic64_t sleepable_refcnt; s64 __percpu *elem_count; u64 cookie; /* write-once */ }; static inline const char *btf_field_type_name(enum btf_field_type type) { switch (type) { case BPF_SPIN_LOCK: return "bpf_spin_lock"; case BPF_TIMER: return "bpf_timer"; case BPF_KPTR_UNREF: case BPF_KPTR_REF: return "kptr"; case BPF_KPTR_PERCPU: return "percpu_kptr"; case BPF_LIST_HEAD: return "bpf_list_head"; case BPF_LIST_NODE: return "bpf_list_node"; case BPF_RB_ROOT: return "bpf_rb_root"; case BPF_RB_NODE: return "bpf_rb_node"; case BPF_REFCOUNT: return "bpf_refcount"; default: WARN_ON_ONCE(1); return "unknown"; } } static inline u32 btf_field_type_size(enum btf_field_type type) { switch (type) { case BPF_SPIN_LOCK: return sizeof(struct bpf_spin_lock); case BPF_TIMER: return sizeof(struct bpf_timer); case BPF_KPTR_UNREF: case BPF_KPTR_REF: case BPF_KPTR_PERCPU: return sizeof(u64); case BPF_LIST_HEAD: return sizeof(struct bpf_list_head); case BPF_LIST_NODE: return sizeof(struct bpf_list_node); case BPF_RB_ROOT: return sizeof(struct bpf_rb_root); case BPF_RB_NODE: return sizeof(struct bpf_rb_node); case BPF_REFCOUNT: return sizeof(struct bpf_refcount); default: WARN_ON_ONCE(1); return 0; } } static inline u32 btf_field_type_align(enum btf_field_type type) { switch (type) { case BPF_SPIN_LOCK: return __alignof__(struct bpf_spin_lock); case BPF_TIMER: return __alignof__(struct bpf_timer); case BPF_KPTR_UNREF: case BPF_KPTR_REF: case BPF_KPTR_PERCPU: return __alignof__(u64); case BPF_LIST_HEAD: return __alignof__(struct bpf_list_head); case BPF_LIST_NODE: return __alignof__(struct bpf_list_node); case BPF_RB_ROOT: return __alignof__(struct bpf_rb_root); case BPF_RB_NODE: return __alignof__(struct bpf_rb_node); case BPF_REFCOUNT: return __alignof__(struct bpf_refcount); default: WARN_ON_ONCE(1); return 0; } } static inline void bpf_obj_init_field(const struct btf_field *field, void *addr) { memset(addr, 0, field->size); switch (field->type) { case BPF_REFCOUNT: refcount_set((refcount_t *)addr, 1); break; case BPF_RB_NODE: RB_CLEAR_NODE((struct rb_node *)addr); break; case BPF_LIST_HEAD: case BPF_LIST_NODE: INIT_LIST_HEAD((struct list_head *)addr); break; case BPF_RB_ROOT: /* RB_ROOT_CACHED 0-inits, no need to do anything after memset */ case BPF_SPIN_LOCK: case BPF_TIMER: case BPF_KPTR_UNREF: case BPF_KPTR_REF: case BPF_KPTR_PERCPU: break; default: WARN_ON_ONCE(1); return; } } static inline bool btf_record_has_field(const struct btf_record *rec, enum btf_field_type type) { if (IS_ERR_OR_NULL(rec)) return false; return rec->field_mask & type; } static inline void bpf_obj_init(const struct btf_record *rec, void *obj) { int i; if (IS_ERR_OR_NULL(rec)) return; for (i = 0; i < rec->cnt; i++) bpf_obj_init_field(&rec->fields[i], obj + rec->fields[i].offset); } /* 'dst' must be a temporary buffer and should not point to memory that is being * used in parallel by a bpf program or bpf syscall, otherwise the access from * the bpf program or bpf syscall may be corrupted by the reinitialization, * leading to weird problems. Even 'dst' is newly-allocated from bpf memory * allocator, it is still possible for 'dst' to be used in parallel by a bpf * program or bpf syscall. */ static inline void check_and_init_map_value(struct bpf_map *map, void *dst) { bpf_obj_init(map->record, dst); } /* memcpy that is used with 8-byte aligned pointers, power-of-8 size and * forced to use 'long' read/writes to try to atomically copy long counters. * Best-effort only. No barriers here, since it _will_ race with concurrent * updates from BPF programs. Called from bpf syscall and mostly used with * size 8 or 16 bytes, so ask compiler to inline it. */ static inline void bpf_long_memcpy(void *dst, const void *src, u32 size) { const long *lsrc = src; long *ldst = dst; size /= sizeof(long); while (size--) data_race(*ldst++ = *lsrc++); } /* copy everything but bpf_spin_lock, bpf_timer, and kptrs. There could be one of each. */ static inline void bpf_obj_memcpy(struct btf_record *rec, void *dst, void *src, u32 size, bool long_memcpy) { u32 curr_off = 0; int i; if (IS_ERR_OR_NULL(rec)) { if (long_memcpy) bpf_long_memcpy(dst, src, round_up(size, 8)); else memcpy(dst, src, size); return; } for (i = 0; i < rec->cnt; i++) { u32 next_off = rec->fields[i].offset; u32 sz = next_off - curr_off; memcpy(dst + curr_off, src + curr_off, sz); curr_off += rec->fields[i].size + sz; } memcpy(dst + curr_off, src + curr_off, size - curr_off); } static inline void copy_map_value(struct bpf_map *map, void *dst, void *src) { bpf_obj_memcpy(map->record, dst, src, map->value_size, false); } static inline void copy_map_value_long(struct bpf_map *map, void *dst, void *src) { bpf_obj_memcpy(map->record, dst, src, map->value_size, true); } static inline void bpf_obj_memzero(struct btf_record *rec, void *dst, u32 size) { u32 curr_off = 0; int i; if (IS_ERR_OR_NULL(rec)) { memset(dst, 0, size); return; } for (i = 0; i < rec->cnt; i++) { u32 next_off = rec->fields[i].offset; u32 sz = next_off - curr_off; memset(dst + curr_off, 0, sz); curr_off += rec->fields[i].size + sz; } memset(dst + curr_off, 0, size - curr_off); } static inline void zero_map_value(struct bpf_map *map, void *dst) { bpf_obj_memzero(map->record, dst, map->value_size); } void copy_map_value_locked(struct bpf_map *map, void *dst, void *src, bool lock_src); void bpf_timer_cancel_and_free(void *timer); void bpf_list_head_free(const struct btf_field *field, void *list_head, struct bpf_spin_lock *spin_lock); void bpf_rb_root_free(const struct btf_field *field, void *rb_root, struct bpf_spin_lock *spin_lock); int bpf_obj_name_cpy(char *dst, const char *src, unsigned int size); struct bpf_offload_dev; struct bpf_offloaded_map; struct bpf_map_dev_ops { int (*map_get_next_key)(struct bpf_offloaded_map *map, void *key, void *next_key); int (*map_lookup_elem)(struct bpf_offloaded_map *map, void *key, void *value); int (*map_update_elem)(struct bpf_offloaded_map *map, void *key, void *value, u64 flags); int (*map_delete_elem)(struct bpf_offloaded_map *map, void *key); }; struct bpf_offloaded_map { struct bpf_map map; struct net_device *netdev; const struct bpf_map_dev_ops *dev_ops; void *dev_priv; struct list_head offloads; }; static inline struct bpf_offloaded_map *map_to_offmap(struct bpf_map *map) { return container_of(map, struct bpf_offloaded_map, map); } static inline bool bpf_map_offload_neutral(const struct bpf_map *map) { return map->map_type == BPF_MAP_TYPE_PERF_EVENT_ARRAY; } static inline bool bpf_map_support_seq_show(const struct bpf_map *map) { return (map->btf_value_type_id || map->btf_vmlinux_value_type_id) && map->ops->map_seq_show_elem; } int map_check_no_btf(const struct bpf_map *map, const struct btf *btf, const struct btf_type *key_type, const struct btf_type *value_type); bool bpf_map_meta_equal(const struct bpf_map *meta0, const struct bpf_map *meta1); extern const struct bpf_map_ops bpf_map_offload_ops; /* bpf_type_flag contains a set of flags that are applicable to the values of * arg_type, ret_type and reg_type. For example, a pointer value may be null, * or a memory is read-only. We classify types into two categories: base types * and extended types. Extended types are base types combined with a type flag. * * Currently there are no more than 32 base types in arg_type, ret_type and * reg_types. */ #define BPF_BASE_TYPE_BITS 8 enum bpf_type_flag { /* PTR may be NULL. */ PTR_MAYBE_NULL = BIT(0 + BPF_BASE_TYPE_BITS), /* MEM is read-only. When applied on bpf_arg, it indicates the arg is * compatible with both mutable and immutable memory. */ MEM_RDONLY = BIT(1 + BPF_BASE_TYPE_BITS), /* MEM points to BPF ring buffer reservation. */ MEM_RINGBUF = BIT(2 + BPF_BASE_TYPE_BITS), /* MEM is in user address space. */ MEM_USER = BIT(3 + BPF_BASE_TYPE_BITS), /* MEM is a percpu memory. MEM_PERCPU tags PTR_TO_BTF_ID. When tagged * with MEM_PERCPU, PTR_TO_BTF_ID _cannot_ be directly accessed. In * order to drop this tag, it must be passed into bpf_per_cpu_ptr() * or bpf_this_cpu_ptr(), which will return the pointer corresponding * to the specified cpu. */ MEM_PERCPU = BIT(4 + BPF_BASE_TYPE_BITS), /* Indicates that the argument will be released. */ OBJ_RELEASE = BIT(5 + BPF_BASE_TYPE_BITS), /* PTR is not trusted. This is only used with PTR_TO_BTF_ID, to mark * unreferenced and referenced kptr loaded from map value using a load * instruction, so that they can only be dereferenced but not escape the * BPF program into the kernel (i.e. cannot be passed as arguments to * kfunc or bpf helpers). */ PTR_UNTRUSTED = BIT(6 + BPF_BASE_TYPE_BITS), /* MEM can be uninitialized. */ MEM_UNINIT = BIT(7 + BPF_BASE_TYPE_BITS), /* DYNPTR points to memory local to the bpf program. */ DYNPTR_TYPE_LOCAL = BIT(8 + BPF_BASE_TYPE_BITS), /* DYNPTR points to a kernel-produced ringbuf record. */ DYNPTR_TYPE_RINGBUF = BIT(9 + BPF_BASE_TYPE_BITS), /* Size is known at compile time. */ MEM_FIXED_SIZE = BIT(10 + BPF_BASE_TYPE_BITS), /* MEM is of an allocated object of type in program BTF. This is used to * tag PTR_TO_BTF_ID allocated using bpf_obj_new. */ MEM_ALLOC = BIT(11 + BPF_BASE_TYPE_BITS), /* PTR was passed from the kernel in a trusted context, and may be * passed to KF_TRUSTED_ARGS kfuncs or BPF helper functions. * Confusingly, this is _not_ the opposite of PTR_UNTRUSTED above. * PTR_UNTRUSTED refers to a kptr that was read directly from a map * without invoking bpf_kptr_xchg(). What we really need to know is * whether a pointer is safe to pass to a kfunc or BPF helper function. * While PTR_UNTRUSTED pointers are unsafe to pass to kfuncs and BPF * helpers, they do not cover all possible instances of unsafe * pointers. For example, a pointer that was obtained from walking a * struct will _not_ get the PTR_UNTRUSTED type modifier, despite the * fact that it may be NULL, invalid, etc. This is due to backwards * compatibility requirements, as this was the behavior that was first * introduced when kptrs were added. The behavior is now considered * deprecated, and PTR_UNTRUSTED will eventually be removed. * * PTR_TRUSTED, on the other hand, is a pointer that the kernel * guarantees to be valid and safe to pass to kfuncs and BPF helpers. * For example, pointers passed to tracepoint arguments are considered * PTR_TRUSTED, as are pointers that are passed to struct_ops * callbacks. As alluded to above, pointers that are obtained from * walking PTR_TRUSTED pointers are _not_ trusted. For example, if a * struct task_struct *task is PTR_TRUSTED, then accessing * task->last_wakee will lose the PTR_TRUSTED modifier when it's stored * in a BPF register. Similarly, pointers passed to certain programs * types such as kretprobes are not guaranteed to be valid, as they may * for example contain an object that was recently freed. */ PTR_TRUSTED = BIT(12 + BPF_BASE_TYPE_BITS), /* MEM is tagged with rcu and memory access needs rcu_read_lock protection. */ MEM_RCU = BIT(13 + BPF_BASE_TYPE_BITS), /* Used to tag PTR_TO_BTF_ID | MEM_ALLOC references which are non-owning. * Currently only valid for linked-list and rbtree nodes. If the nodes * have a bpf_refcount_field, they must be tagged MEM_RCU as well. */ NON_OWN_REF = BIT(14 + BPF_BASE_TYPE_BITS), /* DYNPTR points to sk_buff */ DYNPTR_TYPE_SKB = BIT(15 + BPF_BASE_TYPE_BITS), /* DYNPTR points to xdp_buff */ DYNPTR_TYPE_XDP = BIT(16 + BPF_BASE_TYPE_BITS), /* Memory must be aligned on some architectures, used in combination with * MEM_FIXED_SIZE. */ MEM_ALIGNED = BIT(17 + BPF_BASE_TYPE_BITS), /* MEM is being written to, often combined with MEM_UNINIT. Non-presence * of MEM_WRITE means that MEM is only being read. MEM_WRITE without the * MEM_UNINIT means that memory needs to be initialized since it is also * read. */ MEM_WRITE = BIT(18 + BPF_BASE_TYPE_BITS), __BPF_TYPE_FLAG_MAX, __BPF_TYPE_LAST_FLAG = __BPF_TYPE_FLAG_MAX - 1, }; #define DYNPTR_TYPE_FLAG_MASK (DYNPTR_TYPE_LOCAL | DYNPTR_TYPE_RINGBUF | DYNPTR_TYPE_SKB \ | DYNPTR_TYPE_XDP) /* Max number of base types. */ #define BPF_BASE_TYPE_LIMIT (1UL << BPF_BASE_TYPE_BITS) /* Max number of all types. */ #define BPF_TYPE_LIMIT (__BPF_TYPE_LAST_FLAG | (__BPF_TYPE_LAST_FLAG - 1)) /* function argument constraints */ enum bpf_arg_type { ARG_DONTCARE = 0, /* unused argument in helper function */ /* the following constraints used to prototype * bpf_map_lookup/update/delete_elem() functions */ ARG_CONST_MAP_PTR, /* const argument used as pointer to bpf_map */ ARG_PTR_TO_MAP_KEY, /* pointer to stack used as map key */ ARG_PTR_TO_MAP_VALUE, /* pointer to stack used as map value */ /* Used to prototype bpf_memcmp() and other functions that access data * on eBPF program stack */ ARG_PTR_TO_MEM, /* pointer to valid memory (stack, packet, map value) */ ARG_CONST_SIZE, /* number of bytes accessed from memory */ ARG_CONST_SIZE_OR_ZERO, /* number of bytes accessed from memory or 0 */ ARG_PTR_TO_CTX, /* pointer to context */ ARG_ANYTHING, /* any (initialized) argument is ok */ ARG_PTR_TO_SPIN_LOCK, /* pointer to bpf_spin_lock */ ARG_PTR_TO_SOCK_COMMON, /* pointer to sock_common */ ARG_PTR_TO_SOCKET, /* pointer to bpf_sock (fullsock) */ ARG_PTR_TO_BTF_ID, /* pointer to in-kernel struct */ ARG_PTR_TO_RINGBUF_MEM, /* pointer to dynamically reserved ringbuf memory */ ARG_CONST_ALLOC_SIZE_OR_ZERO, /* number of allocated bytes requested */ ARG_PTR_TO_BTF_ID_SOCK_COMMON, /* pointer to in-kernel sock_common or bpf-mirrored bpf_sock */ ARG_PTR_TO_PERCPU_BTF_ID, /* pointer to in-kernel percpu type */ ARG_PTR_TO_FUNC, /* pointer to a bpf program function */ ARG_PTR_TO_STACK, /* pointer to stack */ ARG_PTR_TO_CONST_STR, /* pointer to a null terminated read-only string */ ARG_PTR_TO_TIMER, /* pointer to bpf_timer */ ARG_PTR_TO_KPTR, /* pointer to referenced kptr */ ARG_PTR_TO_DYNPTR, /* pointer to bpf_dynptr. See bpf_type_flag for dynptr type */ __BPF_ARG_TYPE_MAX, /* Extended arg_types. */ ARG_PTR_TO_MAP_VALUE_OR_NULL = PTR_MAYBE_NULL | ARG_PTR_TO_MAP_VALUE, ARG_PTR_TO_MEM_OR_NULL = PTR_MAYBE_NULL | ARG_PTR_TO_MEM, ARG_PTR_TO_CTX_OR_NULL = PTR_MAYBE_NULL | ARG_PTR_TO_CTX, ARG_PTR_TO_SOCKET_OR_NULL = PTR_MAYBE_NULL | ARG_PTR_TO_SOCKET, ARG_PTR_TO_STACK_OR_NULL = PTR_MAYBE_NULL | ARG_PTR_TO_STACK, ARG_PTR_TO_BTF_ID_OR_NULL = PTR_MAYBE_NULL | ARG_PTR_TO_BTF_ID, /* Pointer to memory does not need to be initialized, since helper function * fills all bytes or clears them in error case. */ ARG_PTR_TO_UNINIT_MEM = MEM_UNINIT | MEM_WRITE | ARG_PTR_TO_MEM, /* Pointer to valid memory of size known at compile time. */ ARG_PTR_TO_FIXED_SIZE_MEM = MEM_FIXED_SIZE | ARG_PTR_TO_MEM, /* This must be the last entry. Its purpose is to ensure the enum is * wide enough to hold the higher bits reserved for bpf_type_flag. */ __BPF_ARG_TYPE_LIMIT = BPF_TYPE_LIMIT, }; static_assert(__BPF_ARG_TYPE_MAX <= BPF_BASE_TYPE_LIMIT); /* type of values returned from helper functions */ enum bpf_return_type { RET_INTEGER, /* function returns integer */ RET_VOID, /* function doesn't return anything */ RET_PTR_TO_MAP_VALUE, /* returns a pointer to map elem value */ RET_PTR_TO_SOCKET, /* returns a pointer to a socket */ RET_PTR_TO_TCP_SOCK, /* returns a pointer to a tcp_sock */ RET_PTR_TO_SOCK_COMMON, /* returns a pointer to a sock_common */ RET_PTR_TO_MEM, /* returns a pointer to memory */ RET_PTR_TO_MEM_OR_BTF_ID, /* returns a pointer to a valid memory or a btf_id */ RET_PTR_TO_BTF_ID, /* returns a pointer to a btf_id */ __BPF_RET_TYPE_MAX, /* Extended ret_types. */ RET_PTR_TO_MAP_VALUE_OR_NULL = PTR_MAYBE_NULL | RET_PTR_TO_MAP_VALUE, RET_PTR_TO_SOCKET_OR_NULL = PTR_MAYBE_NULL | RET_PTR_TO_SOCKET, RET_PTR_TO_TCP_SOCK_OR_NULL = PTR_MAYBE_NULL | RET_PTR_TO_TCP_SOCK, RET_PTR_TO_SOCK_COMMON_OR_NULL = PTR_MAYBE_NULL | RET_PTR_TO_SOCK_COMMON, RET_PTR_TO_RINGBUF_MEM_OR_NULL = PTR_MAYBE_NULL | MEM_RINGBUF | RET_PTR_TO_MEM, RET_PTR_TO_DYNPTR_MEM_OR_NULL = PTR_MAYBE_NULL | RET_PTR_TO_MEM, RET_PTR_TO_BTF_ID_OR_NULL = PTR_MAYBE_NULL | RET_PTR_TO_BTF_ID, RET_PTR_TO_BTF_ID_TRUSTED = PTR_TRUSTED | RET_PTR_TO_BTF_ID, /* This must be the last entry. Its purpose is to ensure the enum is * wide enough to hold the higher bits reserved for bpf_type_flag. */ __BPF_RET_TYPE_LIMIT = BPF_TYPE_LIMIT, }; static_assert(__BPF_RET_TYPE_MAX <= BPF_BASE_TYPE_LIMIT); /* eBPF function prototype used by verifier to allow BPF_CALLs from eBPF programs * to in-kernel helper functions and for adjusting imm32 field in BPF_CALL * instructions after verifying */ struct bpf_func_proto { u64 (*func)(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5); bool gpl_only; bool pkt_access; bool might_sleep; enum bpf_return_type ret_type; union { struct { enum bpf_arg_type arg1_type; enum bpf_arg_type arg2_type; enum bpf_arg_type arg3_type; enum bpf_arg_type arg4_type; enum bpf_arg_type arg5_type; }; enum bpf_arg_type arg_type[5]; }; union { struct { u32 *arg1_btf_id; u32 *arg2_btf_id; u32 *arg3_btf_id; u32 *arg4_btf_id; u32 *arg5_btf_id; }; u32 *arg_btf_id[5]; struct { size_t arg1_size; size_t arg2_size; size_t arg3_size; size_t arg4_size; size_t arg5_size; }; size_t arg_size[5]; }; int *ret_btf_id; /* return value btf_id */ bool (*allowed)(const struct bpf_prog *prog); }; /* bpf_context is intentionally undefined structure. Pointer to bpf_context is * the first argument to eBPF programs. * For socket filters: 'struct bpf_context *' == 'struct sk_buff *' */ struct bpf_context; enum bpf_access_type { BPF_READ = 1, BPF_WRITE = 2 }; /* types of values stored in eBPF registers */ /* Pointer types represent: * pointer * pointer + imm * pointer + (u16) var * pointer + (u16) var + imm * if (range > 0) then [ptr, ptr + range - off) is safe to access * if (id > 0) means that some 'var' was added * if (off > 0) means that 'imm' was added */ enum bpf_reg_type { NOT_INIT = 0, /* nothing was written into register */ SCALAR_VALUE, /* reg doesn't contain a valid pointer */ PTR_TO_CTX, /* reg points to bpf_context */ CONST_PTR_TO_MAP, /* reg points to struct bpf_map */ PTR_TO_MAP_VALUE, /* reg points to map element value */ PTR_TO_MAP_KEY, /* reg points to a map element key */ PTR_TO_STACK, /* reg == frame_pointer + offset */ PTR_TO_PACKET_META, /* skb->data - meta_len */ PTR_TO_PACKET, /* reg points to skb->data */ PTR_TO_PACKET_END, /* skb->data + headlen */ PTR_TO_FLOW_KEYS, /* reg points to bpf_flow_keys */ PTR_TO_SOCKET, /* reg points to struct bpf_sock */ PTR_TO_SOCK_COMMON, /* reg points to sock_common */ PTR_TO_TCP_SOCK, /* reg points to struct tcp_sock */ PTR_TO_TP_BUFFER, /* reg points to a writable raw tp's buffer */ PTR_TO_XDP_SOCK, /* reg points to struct xdp_sock */ /* PTR_TO_BTF_ID points to a kernel struct that does not need * to be null checked by the BPF program. This does not imply the * pointer is _not_ null and in practice this can easily be a null * pointer when reading pointer chains. The assumption is program * context will handle null pointer dereference typically via fault * handling. The verifier must keep this in mind and can make no * assumptions about null or non-null when doing branch analysis. * Further, when passed into helpers the helpers can not, without * additional context, assume the value is non-null. */ PTR_TO_BTF_ID, /* PTR_TO_BTF_ID_OR_NULL points to a kernel struct that has not * been checked for null. Used primarily to inform the verifier * an explicit null check is required for this struct. */ PTR_TO_MEM, /* reg points to valid memory region */ PTR_TO_BUF, /* reg points to a read/write buffer */ PTR_TO_FUNC, /* reg points to a bpf program function */ CONST_PTR_TO_DYNPTR, /* reg points to a const struct bpf_dynptr */ __BPF_REG_TYPE_MAX, /* Extended reg_types. */ PTR_TO_MAP_VALUE_OR_NULL = PTR_MAYBE_NULL | PTR_TO_MAP_VALUE, PTR_TO_SOCKET_OR_NULL = PTR_MAYBE_NULL | PTR_TO_SOCKET, PTR_TO_SOCK_COMMON_OR_NULL = PTR_MAYBE_NULL | PTR_TO_SOCK_COMMON, PTR_TO_TCP_SOCK_OR_NULL = PTR_MAYBE_NULL | PTR_TO_TCP_SOCK, PTR_TO_BTF_ID_OR_NULL = PTR_MAYBE_NULL | PTR_TO_BTF_ID, /* This must be the last entry. Its purpose is to ensure the enum is * wide enough to hold the higher bits reserved for bpf_type_flag. */ __BPF_REG_TYPE_LIMIT = BPF_TYPE_LIMIT, }; static_assert(__BPF_REG_TYPE_MAX <= BPF_BASE_TYPE_LIMIT); /* The information passed from prog-specific *_is_valid_access * back to the verifier. */ struct bpf_insn_access_aux { enum bpf_reg_type reg_type; bool is_ldsx; union { int ctx_field_size; struct { struct btf *btf; u32 btf_id; }; }; struct bpf_verifier_log *log; /* for verbose logs */ bool is_retval; /* is accessing function return value ? */ }; static inline void bpf_ctx_record_field_size(struct bpf_insn_access_aux *aux, u32 size) { aux->ctx_field_size = size; } static bool bpf_is_ldimm64(const struct bpf_insn *insn) { return insn->code == (BPF_LD | BPF_IMM | BPF_DW); } static inline bool bpf_pseudo_func(const struct bpf_insn *insn) { return bpf_is_ldimm64(insn) && insn->src_reg == BPF_PSEUDO_FUNC; } struct bpf_prog_ops { int (*test_run)(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr); }; struct bpf_reg_state; struct bpf_verifier_ops { /* return eBPF function prototype for verification */ const struct bpf_func_proto * (*get_func_proto)(enum bpf_func_id func_id, const struct bpf_prog *prog); /* return true if 'size' wide access at offset 'off' within bpf_context * with 'type' (read or write) is allowed */ bool (*is_valid_access)(int off, int size, enum bpf_access_type type, const struct bpf_prog *prog, struct bpf_insn_access_aux *info); int (*gen_prologue)(struct bpf_insn *insn, bool direct_write, const struct bpf_prog *prog); int (*gen_ld_abs)(const struct bpf_insn *orig, struct bpf_insn *insn_buf); u32 (*convert_ctx_access)(enum bpf_access_type type, const struct bpf_insn *src, struct bpf_insn *dst, struct bpf_prog *prog, u32 *target_size); int (*btf_struct_access)(struct bpf_verifier_log *log, const struct bpf_reg_state *reg, int off, int size); }; struct bpf_prog_offload_ops { /* verifier basic callbacks */ int (*insn_hook)(struct bpf_verifier_env *env, int insn_idx, int prev_insn_idx); int (*finalize)(struct bpf_verifier_env *env); /* verifier optimization callbacks (called after .finalize) */ int (*replace_insn)(struct bpf_verifier_env *env, u32 off, struct bpf_insn *insn); int (*remove_insns)(struct bpf_verifier_env *env, u32 off, u32 cnt); /* program management callbacks */ int (*prepare)(struct bpf_prog *prog); int (*translate)(struct bpf_prog *prog); void (*destroy)(struct bpf_prog *prog); }; struct bpf_prog_offload { struct bpf_prog *prog; struct net_device *netdev; struct bpf_offload_dev *offdev; void *dev_priv; struct list_head offloads; bool dev_state; bool opt_failed; void *jited_image; u32 jited_len; }; /* The longest tracepoint has 12 args. * See include/trace/bpf_probe.h */ #define MAX_BPF_FUNC_ARGS 12 /* The maximum number of arguments passed through registers * a single function may have. */ #define MAX_BPF_FUNC_REG_ARGS 5 /* The argument is a structure. */ #define BTF_FMODEL_STRUCT_ARG BIT(0) /* The argument is signed. */ #define BTF_FMODEL_SIGNED_ARG BIT(1) struct btf_func_model { u8 ret_size; u8 ret_flags; u8 nr_args; u8 arg_size[MAX_BPF_FUNC_ARGS]; u8 arg_flags[MAX_BPF_FUNC_ARGS]; }; /* Restore arguments before returning from trampoline to let original function * continue executing. This flag is used for fentry progs when there are no * fexit progs. */ #define BPF_TRAMP_F_RESTORE_REGS BIT(0) /* Call original function after fentry progs, but before fexit progs. * Makes sense for fentry/fexit, normal calls and indirect calls. */ #define BPF_TRAMP_F_CALL_ORIG BIT(1) /* Skip current frame and return to parent. Makes sense for fentry/fexit * programs only. Should not be used with normal calls and indirect calls. */ #define BPF_TRAMP_F_SKIP_FRAME BIT(2) /* Store IP address of the caller on the trampoline stack, * so it's available for trampoline's programs. */ #define BPF_TRAMP_F_IP_ARG BIT(3) /* Return the return value of fentry prog. Only used by bpf_struct_ops. */ #define BPF_TRAMP_F_RET_FENTRY_RET BIT(4) /* Get original function from stack instead of from provided direct address. * Makes sense for trampolines with fexit or fmod_ret programs. */ #define BPF_TRAMP_F_ORIG_STACK BIT(5) /* This trampoline is on a function with another ftrace_ops with IPMODIFY, * e.g., a live patch. This flag is set and cleared by ftrace call backs, */ #define BPF_TRAMP_F_SHARE_IPMODIFY BIT(6) /* Indicate that current trampoline is in a tail call context. Then, it has to * cache and restore tail_call_cnt to avoid infinite tail call loop. */ #define BPF_TRAMP_F_TAIL_CALL_CTX BIT(7) /* * Indicate the trampoline should be suitable to receive indirect calls; * without this indirectly calling the generated code can result in #UD/#CP, * depending on the CFI options. * * Used by bpf_struct_ops. * * Incompatible with FENTRY usage, overloads @func_addr argument. */ #define BPF_TRAMP_F_INDIRECT BIT(8) /* Each call __bpf_prog_enter + call bpf_func + call __bpf_prog_exit is ~50 * bytes on x86. */ enum { #if defined(__s390x__) BPF_MAX_TRAMP_LINKS = 27, #else BPF_MAX_TRAMP_LINKS = 38, #endif }; struct bpf_tramp_links { struct bpf_tramp_link *links[BPF_MAX_TRAMP_LINKS]; int nr_links; }; struct bpf_tramp_run_ctx; /* Different use cases for BPF trampoline: * 1. replace nop at the function entry (kprobe equivalent) * flags = BPF_TRAMP_F_RESTORE_REGS * fentry = a set of programs to run before returning from trampoline * * 2. replace nop at the function entry (kprobe + kretprobe equivalent) * flags = BPF_TRAMP_F_CALL_ORIG | BPF_TRAMP_F_SKIP_FRAME * orig_call = fentry_ip + MCOUNT_INSN_SIZE * fentry = a set of program to run before calling original function * fexit = a set of program to run after original function * * 3. replace direct call instruction anywhere in the function body * or assign a function pointer for indirect call (like tcp_congestion_ops->cong_avoid) * With flags = 0 * fentry = a set of programs to run before returning from trampoline * With flags = BPF_TRAMP_F_CALL_ORIG * orig_call = original callback addr or direct function addr * fentry = a set of program to run before calling original function * fexit = a set of program to run after original function */ struct bpf_tramp_image; int arch_prepare_bpf_trampoline(struct bpf_tramp_image *im, void *image, void *image_end, const struct btf_func_model *m, u32 flags, struct bpf_tramp_links *tlinks, void *func_addr); void *arch_alloc_bpf_trampoline(unsigned int size); void arch_free_bpf_trampoline(void *image, unsigned int size); void arch_protect_bpf_trampoline(void *image, unsigned int size); void arch_unprotect_bpf_trampoline(void *image, unsigned int size); int arch_bpf_trampoline_size(const struct btf_func_model *m, u32 flags, struct bpf_tramp_links *tlinks, void *func_addr); u64 notrace __bpf_prog_enter_sleepable_recur(struct bpf_prog *prog, struct bpf_tramp_run_ctx *run_ctx); void notrace __bpf_prog_exit_sleepable_recur(struct bpf_prog *prog, u64 start, struct bpf_tramp_run_ctx *run_ctx); void notrace __bpf_tramp_enter(struct bpf_tramp_image *tr); void notrace __bpf_tramp_exit(struct bpf_tramp_image *tr); typedef u64 (*bpf_trampoline_enter_t)(struct bpf_prog *prog, struct bpf_tramp_run_ctx *run_ctx); typedef void (*bpf_trampoline_exit_t)(struct bpf_prog *prog, u64 start, struct bpf_tramp_run_ctx *run_ctx); bpf_trampoline_enter_t bpf_trampoline_enter(const struct bpf_prog *prog); bpf_trampoline_exit_t bpf_trampoline_exit(const struct bpf_prog *prog); struct bpf_ksym { unsigned long start; unsigned long end; char name[KSYM_NAME_LEN]; struct list_head lnode; struct latch_tree_node tnode; bool prog; }; enum bpf_tramp_prog_type { BPF_TRAMP_FENTRY, BPF_TRAMP_FEXIT, BPF_TRAMP_MODIFY_RETURN, BPF_TRAMP_MAX, BPF_TRAMP_REPLACE, /* more than MAX */ }; struct bpf_tramp_image { void *image; int size; struct bpf_ksym ksym; struct percpu_ref pcref; void *ip_after_call; void *ip_epilogue; union { struct rcu_head rcu; struct work_struct work; }; }; struct bpf_trampoline { /* hlist for trampoline_table */ struct hlist_node hlist; struct ftrace_ops *fops; /* serializes access to fields of this trampoline */ struct mutex mutex; refcount_t refcnt; u32 flags; u64 key; struct { struct btf_func_model model; void *addr; bool ftrace_managed; } func; /* if !NULL this is BPF_PROG_TYPE_EXT program that extends another BPF * program by replacing one of its functions. func.addr is the address * of the function it replaced. */ struct bpf_prog *extension_prog; /* list of BPF programs using this trampoline */ struct hlist_head progs_hlist[BPF_TRAMP_MAX]; /* Number of attached programs. A counter per kind. */ int progs_cnt[BPF_TRAMP_MAX]; /* Executable image of trampoline */ struct bpf_tramp_image *cur_image; struct module *mod; }; struct bpf_attach_target_info { struct btf_func_model fmodel; long tgt_addr; struct module *tgt_mod; const char *tgt_name; const struct btf_type *tgt_type; }; #define BPF_DISPATCHER_MAX 48 /* Fits in 2048B */ struct bpf_dispatcher_prog { struct bpf_prog *prog; refcount_t users; }; struct bpf_dispatcher { /* dispatcher mutex */ struct mutex mutex; void *func; struct bpf_dispatcher_prog progs[BPF_DISPATCHER_MAX]; int num_progs; void *image; void *rw_image; u32 image_off; struct bpf_ksym ksym; #ifdef CONFIG_HAVE_STATIC_CALL struct static_call_key *sc_key; void *sc_tramp; #endif }; #ifndef __bpfcall #define __bpfcall __nocfi #endif static __always_inline __bpfcall unsigned int bpf_dispatcher_nop_func( const void *ctx, const struct bpf_insn *insnsi, bpf_func_t bpf_func) { return bpf_func(ctx, insnsi); } /* the implementation of the opaque uapi struct bpf_dynptr */ struct bpf_dynptr_kern { void *data; /* Size represents the number of usable bytes of dynptr data. * If for example the offset is at 4 for a local dynptr whose data is * of type u64, the number of usable bytes is 4. * * The upper 8 bits are reserved. It is as follows: * Bits 0 - 23 = size * Bits 24 - 30 = dynptr type * Bit 31 = whether dynptr is read-only */ u32 size; u32 offset; } __aligned(8); enum bpf_dynptr_type { BPF_DYNPTR_TYPE_INVALID, /* Points to memory that is local to the bpf program */ BPF_DYNPTR_TYPE_LOCAL, /* Underlying data is a ringbuf record */ BPF_DYNPTR_TYPE_RINGBUF, /* Underlying data is a sk_buff */ BPF_DYNPTR_TYPE_SKB, /* Underlying data is a xdp_buff */ BPF_DYNPTR_TYPE_XDP, }; int bpf_dynptr_check_size(u32 size); u32 __bpf_dynptr_size(const struct bpf_dynptr_kern *ptr); const void *__bpf_dynptr_data(const struct bpf_dynptr_kern *ptr, u32 len); void *__bpf_dynptr_data_rw(const struct bpf_dynptr_kern *ptr, u32 len); #ifdef CONFIG_BPF_JIT int bpf_trampoline_link_prog(struct bpf_tramp_link *link, struct bpf_trampoline *tr, struct bpf_prog *tgt_prog); int bpf_trampoline_unlink_prog(struct bpf_tramp_link *link, struct bpf_trampoline *tr, struct bpf_prog *tgt_prog); struct bpf_trampoline *bpf_trampoline_get(u64 key, struct bpf_attach_target_info *tgt_info); void bpf_trampoline_put(struct bpf_trampoline *tr); int arch_prepare_bpf_dispatcher(void *image, void *buf, s64 *funcs, int num_funcs); /* * When the architecture supports STATIC_CALL replace the bpf_dispatcher_fn * indirection with a direct call to the bpf program. If the architecture does * not have STATIC_CALL, avoid a double-indirection. */ #ifdef CONFIG_HAVE_STATIC_CALL #define __BPF_DISPATCHER_SC_INIT(_name) \ .sc_key = &STATIC_CALL_KEY(_name), \ .sc_tramp = STATIC_CALL_TRAMP_ADDR(_name), #define __BPF_DISPATCHER_SC(name) \ DEFINE_STATIC_CALL(bpf_dispatcher_##name##_call, bpf_dispatcher_nop_func) #define __BPF_DISPATCHER_CALL(name) \ static_call(bpf_dispatcher_##name##_call)(ctx, insnsi, bpf_func) #define __BPF_DISPATCHER_UPDATE(_d, _new) \ __static_call_update((_d)->sc_key, (_d)->sc_tramp, (_new)) #else #define __BPF_DISPATCHER_SC_INIT(name) #define __BPF_DISPATCHER_SC(name) #define __BPF_DISPATCHER_CALL(name) bpf_func(ctx, insnsi) #define __BPF_DISPATCHER_UPDATE(_d, _new) #endif #define BPF_DISPATCHER_INIT(_name) { \ .mutex = __MUTEX_INITIALIZER(_name.mutex), \ .func = &_name##_func, \ .progs = {}, \ .num_progs = 0, \ .image = NULL, \ .image_off = 0, \ .ksym = { \ .name = #_name, \ .lnode = LIST_HEAD_INIT(_name.ksym.lnode), \ }, \ __BPF_DISPATCHER_SC_INIT(_name##_call) \ } #define DEFINE_BPF_DISPATCHER(name) \ __BPF_DISPATCHER_SC(name); \ noinline __bpfcall unsigned int bpf_dispatcher_##name##_func( \ const void *ctx, \ const struct bpf_insn *insnsi, \ bpf_func_t bpf_func) \ { \ return __BPF_DISPATCHER_CALL(name); \ } \ EXPORT_SYMBOL(bpf_dispatcher_##name##_func); \ struct bpf_dispatcher bpf_dispatcher_##name = \ BPF_DISPATCHER_INIT(bpf_dispatcher_##name); #define DECLARE_BPF_DISPATCHER(name) \ unsigned int bpf_dispatcher_##name##_func( \ const void *ctx, \ const struct bpf_insn *insnsi, \ bpf_func_t bpf_func); \ extern struct bpf_dispatcher bpf_dispatcher_##name; #define BPF_DISPATCHER_FUNC(name) bpf_dispatcher_##name##_func #define BPF_DISPATCHER_PTR(name) (&bpf_dispatcher_##name) void bpf_dispatcher_change_prog(struct bpf_dispatcher *d, struct bpf_prog *from, struct bpf_prog *to); /* Called only from JIT-enabled code, so there's no need for stubs. */ void bpf_image_ksym_add(void *data, unsigned int size, struct bpf_ksym *ksym); void bpf_image_ksym_del(struct bpf_ksym *ksym); void bpf_ksym_add(struct bpf_ksym *ksym); void bpf_ksym_del(struct bpf_ksym *ksym); int bpf_jit_charge_modmem(u32 size); void bpf_jit_uncharge_modmem(u32 size); bool bpf_prog_has_trampoline(const struct bpf_prog *prog); #else static inline int bpf_trampoline_link_prog(struct bpf_tramp_link *link, struct bpf_trampoline *tr, struct bpf_prog *tgt_prog) { return -ENOTSUPP; } static inline int bpf_trampoline_unlink_prog(struct bpf_tramp_link *link, struct bpf_trampoline *tr, struct bpf_prog *tgt_prog) { return -ENOTSUPP; } static inline struct bpf_trampoline *bpf_trampoline_get(u64 key, struct bpf_attach_target_info *tgt_info) { return NULL; } static inline void bpf_trampoline_put(struct bpf_trampoline *tr) {} #define DEFINE_BPF_DISPATCHER(name) #define DECLARE_BPF_DISPATCHER(name) #define BPF_DISPATCHER_FUNC(name) bpf_dispatcher_nop_func #define BPF_DISPATCHER_PTR(name) NULL static inline void bpf_dispatcher_change_prog(struct bpf_dispatcher *d, struct bpf_prog *from, struct bpf_prog *to) {} static inline bool is_bpf_image_address(unsigned long address) { return false; } static inline bool bpf_prog_has_trampoline(const struct bpf_prog *prog) { return false; } #endif struct bpf_func_info_aux { u16 linkage; bool unreliable; bool called : 1; bool verified : 1; }; enum bpf_jit_poke_reason { BPF_POKE_REASON_TAIL_CALL, }; /* Descriptor of pokes pointing /into/ the JITed image. */ struct bpf_jit_poke_descriptor { void *tailcall_target; void *tailcall_bypass; void *bypass_addr; void *aux; union { struct { struct bpf_map *map; u32 key; } tail_call; }; bool tailcall_target_stable; u8 adj_off; u16 reason; u32 insn_idx; }; /* reg_type info for ctx arguments */ struct bpf_ctx_arg_aux { u32 offset; enum bpf_reg_type reg_type; u32 btf_id; }; struct btf_mod_pair { struct btf *btf; struct module *module; }; struct bpf_kfunc_desc_tab; struct bpf_prog_aux { atomic64_t refcnt; u32 used_map_cnt; u32 used_btf_cnt; u32 max_ctx_offset; u32 max_pkt_offset; u32 max_tp_access; u32 stack_depth; u32 id; u32 func_cnt; /* used by non-func prog as the number of func progs */ u32 real_func_cnt; /* includes hidden progs, only used for JIT and freeing progs */ u32 func_idx; /* 0 for non-func prog, the index in func array for func prog */ u32 attach_btf_id; /* in-kernel BTF type id to attach to */ u32 ctx_arg_info_size; u32 max_rdonly_access; u32 max_rdwr_access; struct btf *attach_btf; const struct bpf_ctx_arg_aux *ctx_arg_info; struct mutex dst_mutex; /* protects dst_* pointers below, *after* prog becomes visible */ struct bpf_prog *dst_prog; struct bpf_trampoline *dst_trampoline; enum bpf_prog_type saved_dst_prog_type; enum bpf_attach_type saved_dst_attach_type; bool verifier_zext; /* Zero extensions has been inserted by verifier. */ bool dev_bound; /* Program is bound to the netdev. */ bool offload_requested; /* Program is bound and offloaded to the netdev. */ bool attach_btf_trace; /* true if attaching to BTF-enabled raw tp */ bool attach_tracing_prog; /* true if tracing another tracing program */ bool func_proto_unreliable; bool sleepable; bool tail_call_reachable; bool xdp_has_frags; bool exception_cb; bool exception_boundary; bool is_extended; /* true if extended by freplace program */ u64 prog_array_member_cnt; /* counts how many times as member of prog_array */ struct mutex ext_mutex; /* mutex for is_extended and prog_array_member_cnt */ /* BTF_KIND_FUNC_PROTO for valid attach_btf_id */ const struct btf_type *attach_func_proto; /* function name for valid attach_btf_id */ const char *attach_func_name; struct bpf_prog **func; void *jit_data; /* JIT specific data. arch dependent */ struct bpf_jit_poke_descriptor *poke_tab; struct bpf_kfunc_desc_tab *kfunc_tab; struct bpf_kfunc_btf_tab *kfunc_btf_tab; u32 size_poke_tab; #ifdef CONFIG_FINEIBT struct bpf_ksym ksym_prefix; #endif struct bpf_ksym ksym; const struct bpf_prog_ops *ops; struct bpf_map **used_maps; struct mutex used_maps_mutex; /* mutex for used_maps and used_map_cnt */ struct btf_mod_pair *used_btfs; struct bpf_prog *prog; struct user_struct *user; u64 load_time; /* ns since boottime */ u32 verified_insns; int cgroup_atype; /* enum cgroup_bpf_attach_type */ struct bpf_map *cgroup_storage[MAX_BPF_CGROUP_STORAGE_TYPE]; char name[BPF_OBJ_NAME_LEN]; u64 (*bpf_exception_cb)(u64 cookie, u64 sp, u64 bp, u64, u64); #ifdef CONFIG_SECURITY void *security; #endif struct bpf_prog_offload *offload; struct btf *btf; struct bpf_func_info *func_info; struct bpf_func_info_aux *func_info_aux; /* bpf_line_info loaded from userspace. linfo->insn_off * has the xlated insn offset. * Both the main and sub prog share the same linfo. * The subprog can access its first linfo by * using the linfo_idx. */ struct bpf_line_info *linfo; /* jited_linfo is the jited addr of the linfo. It has a * one to one mapping to linfo: * jited_linfo[i] is the jited addr for the linfo[i]->insn_off. * Both the main and sub prog share the same jited_linfo. * The subprog can access its first jited_linfo by * using the linfo_idx. */ void **jited_linfo; u32 func_info_cnt; u32 nr_linfo; /* subprog can use linfo_idx to access its first linfo and * jited_linfo. * main prog always has linfo_idx == 0 */ u32 linfo_idx; struct module *mod; u32 num_exentries; struct exception_table_entry *extable; union { struct work_struct work; struct rcu_head rcu; }; }; struct bpf_prog { u16 pages; /* Number of allocated pages */ u16 jited:1, /* Is our filter JIT'ed? */ jit_requested:1,/* archs need to JIT the prog */ gpl_compatible:1, /* Is filter GPL compatible? */ cb_access:1, /* Is control block accessed? */ dst_needed:1, /* Do we need dst entry? */ blinding_requested:1, /* needs constant blinding */ blinded:1, /* Was blinded */ is_func:1, /* program is a bpf function */ kprobe_override:1, /* Do we override a kprobe? */ has_callchain_buf:1, /* callchain buffer allocated? */ enforce_expected_attach_type:1, /* Enforce expected_attach_type checking at attach time */ call_get_stack:1, /* Do we call bpf_get_stack() or bpf_get_stackid() */ call_get_func_ip:1, /* Do we call get_func_ip() */ tstamp_type_access:1; /* Accessed __sk_buff->tstamp_type */ enum bpf_prog_type type; /* Type of BPF program */ enum bpf_attach_type expected_attach_type; /* For some prog types */ u32 len; /* Number of filter blocks */ u32 jited_len; /* Size of jited insns in bytes */ u8 tag[BPF_TAG_SIZE]; struct bpf_prog_stats __percpu *stats; int __percpu *active; unsigned int (*bpf_func)(const void *ctx, const struct bpf_insn *insn); struct bpf_prog_aux *aux; /* Auxiliary fields */ struct sock_fprog_kern *orig_prog; /* Original BPF program */ /* Instructions for interpreter */ union { DECLARE_FLEX_ARRAY(struct sock_filter, insns); DECLARE_FLEX_ARRAY(struct bpf_insn, insnsi); }; }; struct bpf_array_aux { /* Programs with direct jumps into programs part of this array. */ struct list_head poke_progs; struct bpf_map *map; struct mutex poke_mutex; struct work_struct work; }; struct bpf_link { atomic64_t refcnt; u32 id; enum bpf_link_type type; const struct bpf_link_ops *ops; struct bpf_prog *prog; /* rcu is used before freeing, work can be used to schedule that * RCU-based freeing before that, so they never overlap */ union { struct rcu_head rcu; struct work_struct work; }; }; struct bpf_link_ops { void (*release)(struct bpf_link *link); /* deallocate link resources callback, called without RCU grace period * waiting */ void (*dealloc)(struct bpf_link *link); /* deallocate link resources callback, called after RCU grace period; * if underlying BPF program is sleepable we go through tasks trace * RCU GP and then "classic" RCU GP */ void (*dealloc_deferred)(struct bpf_link *link); int (*detach)(struct bpf_link *link); int (*update_prog)(struct bpf_link *link, struct bpf_prog *new_prog, struct bpf_prog *old_prog); void (*show_fdinfo)(const struct bpf_link *link, struct seq_file *seq); int (*fill_link_info)(const struct bpf_link *link, struct bpf_link_info *info); int (*update_map)(struct bpf_link *link, struct bpf_map *new_map, struct bpf_map *old_map); }; struct bpf_tramp_link { struct bpf_link link; struct hlist_node tramp_hlist; u64 cookie; }; struct bpf_shim_tramp_link { struct bpf_tramp_link link; struct bpf_trampoline *trampoline; }; struct bpf_tracing_link { struct bpf_tramp_link link; enum bpf_attach_type attach_type; struct bpf_trampoline *trampoline; struct bpf_prog *tgt_prog; }; struct bpf_link_primer { struct bpf_link *link; struct file *file; int fd; u32 id; }; struct bpf_struct_ops_value; struct btf_member; #define BPF_STRUCT_OPS_MAX_NR_MEMBERS 64 /** * struct bpf_struct_ops - A structure of callbacks allowing a subsystem to * define a BPF_MAP_TYPE_STRUCT_OPS map type composed * of BPF_PROG_TYPE_STRUCT_OPS progs. * @verifier_ops: A structure of callbacks that are invoked by the verifier * when determining whether the struct_ops progs in the * struct_ops map are valid. * @init: A callback that is invoked a single time, and before any other * callback, to initialize the structure. A nonzero return value means * the subsystem could not be initialized. * @check_member: When defined, a callback invoked by the verifier to allow * the subsystem to determine if an entry in the struct_ops map * is valid. A nonzero return value means that the map is * invalid and should be rejected by the verifier. * @init_member: A callback that is invoked for each member of the struct_ops * map to allow the subsystem to initialize the member. A nonzero * value means the member could not be initialized. This callback * is exclusive with the @type, @type_id, @value_type, and * @value_id fields. * @reg: A callback that is invoked when the struct_ops map has been * initialized and is being attached to. Zero means the struct_ops map * has been successfully registered and is live. A nonzero return value * means the struct_ops map could not be registered. * @unreg: A callback that is invoked when the struct_ops map should be * unregistered. * @update: A callback that is invoked when the live struct_ops map is being * updated to contain new values. This callback is only invoked when * the struct_ops map is loaded with BPF_F_LINK. If not defined, the * it is assumed that the struct_ops map cannot be updated. * @validate: A callback that is invoked after all of the members have been * initialized. This callback should perform static checks on the * map, meaning that it should either fail or succeed * deterministically. A struct_ops map that has been validated may * not necessarily succeed in being registered if the call to @reg * fails. For example, a valid struct_ops map may be loaded, but * then fail to be registered due to there being another active * struct_ops map on the system in the subsystem already. For this * reason, if this callback is not defined, the check is skipped as * the struct_ops map will have final verification performed in * @reg. * @type: BTF type. * @value_type: Value type. * @name: The name of the struct bpf_struct_ops object. * @func_models: Func models * @type_id: BTF type id. * @value_id: BTF value id. */ struct bpf_struct_ops { const struct bpf_verifier_ops *verifier_ops; int (*init)(struct btf *btf); int (*check_member)(const struct btf_type *t, const struct btf_member *member, const struct bpf_prog *prog); int (*init_member)(const struct btf_type *t, const struct btf_member *member, void *kdata, const void *udata); int (*reg)(void *kdata); void (*unreg)(void *kdata); int (*update)(void *kdata, void *old_kdata); int (*validate)(void *kdata); const struct btf_type *type; const struct btf_type *value_type; const char *name; struct btf_func_model func_models[BPF_STRUCT_OPS_MAX_NR_MEMBERS]; u32 type_id; u32 value_id; void *cfi_stubs; }; #if defined(CONFIG_BPF_JIT) && defined(CONFIG_BPF_SYSCALL) #define BPF_MODULE_OWNER ((void *)((0xeB9FUL << 2) + POISON_POINTER_DELTA)) const struct bpf_struct_ops *bpf_struct_ops_find(u32 type_id); void bpf_struct_ops_init(struct btf *btf, struct bpf_verifier_log *log); bool bpf_struct_ops_get(const void *kdata); void bpf_struct_ops_put(const void *kdata); int bpf_struct_ops_map_sys_lookup_elem(struct bpf_map *map, void *key, void *value); int bpf_struct_ops_prepare_trampoline(struct bpf_tramp_links *tlinks, struct bpf_tramp_link *link, const struct btf_func_model *model, void *stub_func, void *image, void *image_end); static inline bool bpf_try_module_get(const void *data, struct module *owner) { if (owner == BPF_MODULE_OWNER) return bpf_struct_ops_get(data); else return try_module_get(owner); } static inline void bpf_module_put(const void *data, struct module *owner) { if (owner == BPF_MODULE_OWNER) bpf_struct_ops_put(data); else module_put(owner); } int bpf_struct_ops_link_create(union bpf_attr *attr); #ifdef CONFIG_NET /* Define it here to avoid the use of forward declaration */ struct bpf_dummy_ops_state { int val; }; struct bpf_dummy_ops { int (*test_1)(struct bpf_dummy_ops_state *cb); int (*test_2)(struct bpf_dummy_ops_state *cb, int a1, unsigned short a2, char a3, unsigned long a4); int (*test_sleepable)(struct bpf_dummy_ops_state *cb); }; int bpf_struct_ops_test_run(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr); #endif #else static inline const struct bpf_struct_ops *bpf_struct_ops_find(u32 type_id) { return NULL; } static inline void bpf_struct_ops_init(struct btf *btf, struct bpf_verifier_log *log) { } static inline bool bpf_try_module_get(const void *data, struct module *owner) { return try_module_get(owner); } static inline void bpf_module_put(const void *data, struct module *owner) { module_put(owner); } static inline int bpf_struct_ops_map_sys_lookup_elem(struct bpf_map *map, void *key, void *value) { return -EINVAL; } static inline int bpf_struct_ops_link_create(union bpf_attr *attr) { return -EOPNOTSUPP; } #endif #if defined(CONFIG_CGROUP_BPF) && defined(CONFIG_BPF_LSM) int bpf_trampoline_link_cgroup_shim(struct bpf_prog *prog, int cgroup_atype); void bpf_trampoline_unlink_cgroup_shim(struct bpf_prog *prog); #else static inline int bpf_trampoline_link_cgroup_shim(struct bpf_prog *prog, int cgroup_atype) { return -EOPNOTSUPP; } static inline void bpf_trampoline_unlink_cgroup_shim(struct bpf_prog *prog) { } #endif struct bpf_array { struct bpf_map map; u32 elem_size; u32 index_mask; struct bpf_array_aux *aux; union { DECLARE_FLEX_ARRAY(char, value) __aligned(8); DECLARE_FLEX_ARRAY(void *, ptrs) __aligned(8); DECLARE_FLEX_ARRAY(void __percpu *, pptrs) __aligned(8); }; }; #define BPF_COMPLEXITY_LIMIT_INSNS 1000000 /* yes. 1M insns */ #define MAX_TAIL_CALL_CNT 33 /* Maximum number of loops for bpf_loop and bpf_iter_num. * It's enum to expose it (and thus make it discoverable) through BTF. */ enum { BPF_MAX_LOOPS = 8 * 1024 * 1024, }; #define BPF_F_ACCESS_MASK (BPF_F_RDONLY | \ BPF_F_RDONLY_PROG | \ BPF_F_WRONLY | \ BPF_F_WRONLY_PROG) #define BPF_MAP_CAN_READ BIT(0) #define BPF_MAP_CAN_WRITE BIT(1) /* Maximum number of user-producer ring buffer samples that can be drained in * a call to bpf_user_ringbuf_drain(). */ #define BPF_MAX_USER_RINGBUF_SAMPLES (128 * 1024) static inline u32 bpf_map_flags_to_cap(struct bpf_map *map) { u32 access_flags = map->map_flags & (BPF_F_RDONLY_PROG | BPF_F_WRONLY_PROG); /* Combination of BPF_F_RDONLY_PROG | BPF_F_WRONLY_PROG is * not possible. */ if (access_flags & BPF_F_RDONLY_PROG) return BPF_MAP_CAN_READ; else if (access_flags & BPF_F_WRONLY_PROG) return BPF_MAP_CAN_WRITE; else return BPF_MAP_CAN_READ | BPF_MAP_CAN_WRITE; } static inline bool bpf_map_flags_access_ok(u32 access_flags) { return (access_flags & (BPF_F_RDONLY_PROG | BPF_F_WRONLY_PROG)) != (BPF_F_RDONLY_PROG | BPF_F_WRONLY_PROG); } static inline struct bpf_map_owner *bpf_map_owner_alloc(struct bpf_map *map) { return kzalloc(sizeof(*map->owner), GFP_ATOMIC); } static inline void bpf_map_owner_free(struct bpf_map *map) { kfree(map->owner); } struct bpf_event_entry { struct perf_event *event; struct file *perf_file; struct file *map_file; struct rcu_head rcu; }; static inline bool map_type_contains_progs(struct bpf_map *map) { return map->map_type == BPF_MAP_TYPE_PROG_ARRAY || map->map_type == BPF_MAP_TYPE_DEVMAP || map->map_type == BPF_MAP_TYPE_CPUMAP; } bool bpf_prog_map_compatible(struct bpf_map *map, const struct bpf_prog *fp); int bpf_prog_calc_tag(struct bpf_prog *fp); const struct bpf_func_proto *bpf_get_trace_printk_proto(void); const struct bpf_func_proto *bpf_get_trace_vprintk_proto(void); typedef unsigned long (*bpf_ctx_copy_t)(void *dst, const void *src, unsigned long off, unsigned long len); typedef u32 (*bpf_convert_ctx_access_t)(enum bpf_access_type type, const struct bpf_insn *src, struct bpf_insn *dst, struct bpf_prog *prog, u32 *target_size); u64 bpf_event_output(struct bpf_map *map, u64 flags, void *meta, u64 meta_size, void *ctx, u64 ctx_size, bpf_ctx_copy_t ctx_copy); /* an array of programs to be executed under rcu_lock. * * Typical usage: * ret = bpf_prog_run_array(rcu_dereference(&bpf_prog_array), ctx, bpf_prog_run); * * the structure returned by bpf_prog_array_alloc() should be populated * with program pointers and the last pointer must be NULL. * The user has to keep refcnt on the program and make sure the program * is removed from the array before bpf_prog_put(). * The 'struct bpf_prog_array *' should only be replaced with xchg() * since other cpus are walking the array of pointers in parallel. */ struct bpf_prog_array_item { struct bpf_prog *prog; union { struct bpf_cgroup_storage *cgroup_storage[MAX_BPF_CGROUP_STORAGE_TYPE]; u64 bpf_cookie; }; }; struct bpf_prog_array { struct rcu_head rcu; struct bpf_prog_array_item items[]; }; struct bpf_empty_prog_array { struct bpf_prog_array hdr; struct bpf_prog *null_prog; }; /* to avoid allocating empty bpf_prog_array for cgroups that * don't have bpf program attached use one global 'bpf_empty_prog_array' * It will not be modified the caller of bpf_prog_array_alloc() * (since caller requested prog_cnt == 0) * that pointer should be 'freed' by bpf_prog_array_free() */ extern struct bpf_empty_prog_array bpf_empty_prog_array; struct bpf_prog_array *bpf_prog_array_alloc(u32 prog_cnt, gfp_t flags); void bpf_prog_array_free(struct bpf_prog_array *progs); /* Use when traversal over the bpf_prog_array uses tasks_trace rcu */ void bpf_prog_array_free_sleepable(struct bpf_prog_array *progs); int bpf_prog_array_length(struct bpf_prog_array *progs); bool bpf_prog_array_is_empty(struct bpf_prog_array *array); int bpf_prog_array_copy_to_user(struct bpf_prog_array *progs, __u32 __user *prog_ids, u32 cnt); void bpf_prog_array_delete_safe(struct bpf_prog_array *progs, struct bpf_prog *old_prog); int bpf_prog_array_delete_safe_at(struct bpf_prog_array *array, int index); int bpf_prog_array_update_at(struct bpf_prog_array *array, int index, struct bpf_prog *prog); int bpf_prog_array_copy_info(struct bpf_prog_array *array, u32 *prog_ids, u32 request_cnt, u32 *prog_cnt); int bpf_prog_array_copy(struct bpf_prog_array *old_array, struct bpf_prog *exclude_prog, struct bpf_prog *include_prog, u64 bpf_cookie, struct bpf_prog_array **new_array); struct bpf_run_ctx {}; struct bpf_cg_run_ctx { struct bpf_run_ctx run_ctx; const struct bpf_prog_array_item *prog_item; int retval; }; struct bpf_trace_run_ctx { struct bpf_run_ctx run_ctx; u64 bpf_cookie; bool is_uprobe; }; struct bpf_tramp_run_ctx { struct bpf_run_ctx run_ctx; u64 bpf_cookie; struct bpf_run_ctx *saved_run_ctx; }; static inline struct bpf_run_ctx *bpf_set_run_ctx(struct bpf_run_ctx *new_ctx) { struct bpf_run_ctx *old_ctx = NULL; #ifdef CONFIG_BPF_SYSCALL old_ctx = current->bpf_ctx; current->bpf_ctx = new_ctx; #endif return old_ctx; } static inline void bpf_reset_run_ctx(struct bpf_run_ctx *old_ctx) { #ifdef CONFIG_BPF_SYSCALL current->bpf_ctx = old_ctx; #endif } /* BPF program asks to bypass CAP_NET_BIND_SERVICE in bind. */ #define BPF_RET_BIND_NO_CAP_NET_BIND_SERVICE (1 << 0) /* BPF program asks to set CN on the packet. */ #define BPF_RET_SET_CN (1 << 0) typedef u32 (*bpf_prog_run_fn)(const struct bpf_prog *prog, const void *ctx); static __always_inline u32 bpf_prog_run_array(const struct bpf_prog_array *array, const void *ctx, bpf_prog_run_fn run_prog) { const struct bpf_prog_array_item *item; const struct bpf_prog *prog; struct bpf_run_ctx *old_run_ctx; struct bpf_trace_run_ctx run_ctx; u32 ret = 1; RCU_LOCKDEP_WARN(!rcu_read_lock_held(), "no rcu lock held"); if (unlikely(!array)) return ret; run_ctx.is_uprobe = false; migrate_disable(); old_run_ctx = bpf_set_run_ctx(&run_ctx.run_ctx); item = &array->items[0]; while ((prog = READ_ONCE(item->prog))) { run_ctx.bpf_cookie = item->bpf_cookie; ret &= run_prog(prog, ctx); item++; } bpf_reset_run_ctx(old_run_ctx); migrate_enable(); return ret; } /* Notes on RCU design for bpf_prog_arrays containing sleepable programs: * * We use the tasks_trace rcu flavor read section to protect the bpf_prog_array * overall. As a result, we must use the bpf_prog_array_free_sleepable * in order to use the tasks_trace rcu grace period. * * When a non-sleepable program is inside the array, we take the rcu read * section and disable preemption for that program alone, so it can access * rcu-protected dynamically sized maps. */ static __always_inline u32 bpf_prog_run_array_uprobe(const struct bpf_prog_array *array, const void *ctx, bpf_prog_run_fn run_prog) { const struct bpf_prog_array_item *item; const struct bpf_prog *prog; struct bpf_run_ctx *old_run_ctx; struct bpf_trace_run_ctx run_ctx; u32 ret = 1; might_fault(); RCU_LOCKDEP_WARN(!rcu_read_lock_trace_held(), "no rcu lock held"); if (unlikely(!array)) return ret; migrate_disable(); run_ctx.is_uprobe = true; old_run_ctx = bpf_set_run_ctx(&run_ctx.run_ctx); item = &array->items[0]; while ((prog = READ_ONCE(item->prog))) { if (!prog->aux->sleepable) rcu_read_lock(); run_ctx.bpf_cookie = item->bpf_cookie; ret &= run_prog(prog, ctx); item++; if (!prog->aux->sleepable) rcu_read_unlock(); } bpf_reset_run_ctx(old_run_ctx); migrate_enable(); return ret; } #ifdef CONFIG_BPF_SYSCALL DECLARE_PER_CPU(int, bpf_prog_active); extern struct mutex bpf_stats_enabled_mutex; /* * Block execution of BPF programs attached to instrumentation (perf, * kprobes, tracepoints) to prevent deadlocks on map operations as any of * these events can happen inside a region which holds a map bucket lock * and can deadlock on it. */ static inline void bpf_disable_instrumentation(void) { migrate_disable(); this_cpu_inc(bpf_prog_active); } static inline void bpf_enable_instrumentation(void) { this_cpu_dec(bpf_prog_active); migrate_enable(); } extern const struct file_operations bpf_map_fops; extern const struct file_operations bpf_prog_fops; extern const struct file_operations bpf_iter_fops; #define BPF_PROG_TYPE(_id, _name, prog_ctx_type, kern_ctx_type) \ extern const struct bpf_prog_ops _name ## _prog_ops; \ extern const struct bpf_verifier_ops _name ## _verifier_ops; #define BPF_MAP_TYPE(_id, _ops) \ extern const struct bpf_map_ops _ops; #define BPF_LINK_TYPE(_id, _name) #include <linux/bpf_types.h> #undef BPF_PROG_TYPE #undef BPF_MAP_TYPE #undef BPF_LINK_TYPE extern const struct bpf_prog_ops bpf_offload_prog_ops; extern const struct bpf_verifier_ops tc_cls_act_analyzer_ops; extern const struct bpf_verifier_ops xdp_analyzer_ops; struct bpf_prog *bpf_prog_get(u32 ufd); struct bpf_prog *bpf_prog_get_type_dev(u32 ufd, enum bpf_prog_type type, bool attach_drv); void bpf_prog_add(struct bpf_prog *prog, int i); void bpf_prog_sub(struct bpf_prog *prog, int i); void bpf_prog_inc(struct bpf_prog *prog); struct bpf_prog * __must_check bpf_prog_inc_not_zero(struct bpf_prog *prog); void bpf_prog_put(struct bpf_prog *prog); void bpf_prog_free_id(struct bpf_prog *prog); void bpf_map_free_id(struct bpf_map *map); struct btf_field *btf_record_find(const struct btf_record *rec, u32 offset, u32 field_mask); void btf_record_free(struct btf_record *rec); void bpf_map_free_record(struct bpf_map *map); struct btf_record *btf_record_dup(const struct btf_record *rec); bool btf_record_equal(const struct btf_record *rec_a, const struct btf_record *rec_b); void bpf_obj_free_timer(const struct btf_record *rec, void *obj); void bpf_obj_free_fields(const struct btf_record *rec, void *obj); void __bpf_obj_drop_impl(void *p, const struct btf_record *rec, bool percpu); struct bpf_map *bpf_map_get(u32 ufd); struct bpf_map *bpf_map_get_with_uref(u32 ufd); struct bpf_map *__bpf_map_get(struct fd f); void bpf_map_inc(struct bpf_map *map); void bpf_map_inc_with_uref(struct bpf_map *map); struct bpf_map *__bpf_map_inc_not_zero(struct bpf_map *map, bool uref); struct bpf_map * __must_check bpf_map_inc_not_zero(struct bpf_map *map); void bpf_map_put_with_uref(struct bpf_map *map); void bpf_map_put(struct bpf_map *map); void *bpf_map_area_alloc(u64 size, int numa_node); void *bpf_map_area_mmapable_alloc(u64 size, int numa_node); void bpf_map_area_free(void *base); bool bpf_map_write_active(const struct bpf_map *map); void bpf_map_init_from_attr(struct bpf_map *map, union bpf_attr *attr); int generic_map_lookup_batch(struct bpf_map *map, const union bpf_attr *attr, union bpf_attr __user *uattr); int generic_map_update_batch(struct bpf_map *map, struct file *map_file, const union bpf_attr *attr, union bpf_attr __user *uattr); int generic_map_delete_batch(struct bpf_map *map, const union bpf_attr *attr, union bpf_attr __user *uattr); struct bpf_map *bpf_map_get_curr_or_next(u32 *id); struct bpf_prog *bpf_prog_get_curr_or_next(u32 *id); #ifdef CONFIG_MEMCG_KMEM void *bpf_map_kmalloc_node(const struct bpf_map *map, size_t size, gfp_t flags, int node); void *bpf_map_kzalloc(const struct bpf_map *map, size_t size, gfp_t flags); void *bpf_map_kvcalloc(struct bpf_map *map, size_t n, size_t size, gfp_t flags); void __percpu *bpf_map_alloc_percpu(const struct bpf_map *map, size_t size, size_t align, gfp_t flags); #else static inline void * bpf_map_kmalloc_node(const struct bpf_map *map, size_t size, gfp_t flags, int node) { return kmalloc_node(size, flags, node); } static inline void * bpf_map_kzalloc(const struct bpf_map *map, size_t size, gfp_t flags) { return kzalloc(size, flags); } static inline void * bpf_map_kvcalloc(struct bpf_map *map, size_t n, size_t size, gfp_t flags) { return kvcalloc(n, size, flags); } static inline void __percpu * bpf_map_alloc_percpu(const struct bpf_map *map, size_t size, size_t align, gfp_t flags) { return __alloc_percpu_gfp(size, align, flags); } #endif static inline int bpf_map_init_elem_count(struct bpf_map *map) { size_t size = sizeof(*map->elem_count), align = size; gfp_t flags = GFP_USER | __GFP_NOWARN; map->elem_count = bpf_map_alloc_percpu(map, size, align, flags); if (!map->elem_count) return -ENOMEM; return 0; } static inline void bpf_map_free_elem_count(struct bpf_map *map) { free_percpu(map->elem_count); } static inline void bpf_map_inc_elem_count(struct bpf_map *map) { this_cpu_inc(*map->elem_count); } static inline void bpf_map_dec_elem_count(struct bpf_map *map) { this_cpu_dec(*map->elem_count); } extern int sysctl_unprivileged_bpf_disabled; static inline bool bpf_allow_ptr_leaks(void) { return perfmon_capable(); } static inline bool bpf_allow_uninit_stack(void) { return perfmon_capable(); } static inline bool bpf_bypass_spec_v1(void) { return cpu_mitigations_off() || perfmon_capable(); } static inline bool bpf_bypass_spec_v4(void) { return cpu_mitigations_off() || perfmon_capable(); } int bpf_map_new_fd(struct bpf_map *map, int flags); int bpf_prog_new_fd(struct bpf_prog *prog); void bpf_link_init(struct bpf_link *link, enum bpf_link_type type, const struct bpf_link_ops *ops, struct bpf_prog *prog); int bpf_link_prime(struct bpf_link *link, struct bpf_link_primer *primer); int bpf_link_settle(struct bpf_link_primer *primer); void bpf_link_cleanup(struct bpf_link_primer *primer); void bpf_link_inc(struct bpf_link *link); struct bpf_link *bpf_link_inc_not_zero(struct bpf_link *link); void bpf_link_put(struct bpf_link *link); int bpf_link_new_fd(struct bpf_link *link); struct bpf_link *bpf_link_get_from_fd(u32 ufd); struct bpf_link *bpf_link_get_curr_or_next(u32 *id); int bpf_obj_pin_user(u32 ufd, int path_fd, const char __user *pathname); int bpf_obj_get_user(int path_fd, const char __user *pathname, int flags); #define BPF_ITER_FUNC_PREFIX "bpf_iter_" #define DEFINE_BPF_ITER_FUNC(target, args...) \ extern int bpf_iter_ ## target(args); \ int __init bpf_iter_ ## target(args) { return 0; } /* * The task type of iterators. * * For BPF task iterators, they can be parameterized with various * parameters to visit only some of tasks. * * BPF_TASK_ITER_ALL (default) * Iterate over resources of every task. * * BPF_TASK_ITER_TID * Iterate over resources of a task/tid. * * BPF_TASK_ITER_TGID * Iterate over resources of every task of a process / task group. */ enum bpf_iter_task_type { BPF_TASK_ITER_ALL = 0, BPF_TASK_ITER_TID, BPF_TASK_ITER_TGID, }; struct bpf_iter_aux_info { /* for map_elem iter */ struct bpf_map *map; /* for cgroup iter */ struct { struct cgroup *start; /* starting cgroup */ enum bpf_cgroup_iter_order order; } cgroup; struct { enum bpf_iter_task_type type; u32 pid; } task; }; typedef int (*bpf_iter_attach_target_t)(struct bpf_prog *prog, union bpf_iter_link_info *linfo, struct bpf_iter_aux_info *aux); typedef void (*bpf_iter_detach_target_t)(struct bpf_iter_aux_info *aux); typedef void (*bpf_iter_show_fdinfo_t) (const struct bpf_iter_aux_info *aux, struct seq_file *seq); typedef int (*bpf_iter_fill_link_info_t)(const struct bpf_iter_aux_info *aux, struct bpf_link_info *info); typedef const struct bpf_func_proto * (*bpf_iter_get_func_proto_t)(enum bpf_func_id func_id, const struct bpf_prog *prog); enum bpf_iter_feature { BPF_ITER_RESCHED = BIT(0), }; #define BPF_ITER_CTX_ARG_MAX 2 struct bpf_iter_reg { const char *target; bpf_iter_attach_target_t attach_target; bpf_iter_detach_target_t detach_target; bpf_iter_show_fdinfo_t show_fdinfo; bpf_iter_fill_link_info_t fill_link_info; bpf_iter_get_func_proto_t get_func_proto; u32 ctx_arg_info_size; u32 feature; struct bpf_ctx_arg_aux ctx_arg_info[BPF_ITER_CTX_ARG_MAX]; const struct bpf_iter_seq_info *seq_info; }; struct bpf_iter_meta { __bpf_md_ptr(struct seq_file *, seq); u64 session_id; u64 seq_num; }; struct bpf_iter__bpf_map_elem { __bpf_md_ptr(struct bpf_iter_meta *, meta); __bpf_md_ptr(struct bpf_map *, map); __bpf_md_ptr(void *, key); __bpf_md_ptr(void *, value); }; int bpf_iter_reg_target(const struct bpf_iter_reg *reg_info); void bpf_iter_unreg_target(const struct bpf_iter_reg *reg_info); bool bpf_iter_prog_supported(struct bpf_prog *prog); const struct bpf_func_proto * bpf_iter_get_func_proto(enum bpf_func_id func_id, const struct bpf_prog *prog); int bpf_iter_link_attach(const union bpf_attr *attr, bpfptr_t uattr, struct bpf_prog *prog); int bpf_iter_new_fd(struct bpf_link *link); bool bpf_link_is_iter(struct bpf_link *link); struct bpf_prog *bpf_iter_get_info(struct bpf_iter_meta *meta, bool in_stop); int bpf_iter_run_prog(struct bpf_prog *prog, void *ctx); void bpf_iter_map_show_fdinfo(const struct bpf_iter_aux_info *aux, struct seq_file *seq); int bpf_iter_map_fill_link_info(const struct bpf_iter_aux_info *aux, struct bpf_link_info *info); int map_set_for_each_callback_args(struct bpf_verifier_env *env, struct bpf_func_state *caller, struct bpf_func_state *callee); int bpf_percpu_hash_copy(struct bpf_map *map, void *key, void *value); int bpf_percpu_array_copy(struct bpf_map *map, void *key, void *value); int bpf_percpu_hash_update(struct bpf_map *map, void *key, void *value, u64 flags); int bpf_percpu_array_update(struct bpf_map *map, void *key, void *value, u64 flags); int bpf_stackmap_copy(struct bpf_map *map, void *key, void *value); int bpf_fd_array_map_update_elem(struct bpf_map *map, struct file *map_file, void *key, void *value, u64 map_flags); int bpf_fd_array_map_lookup_elem(struct bpf_map *map, void *key, u32 *value); int bpf_fd_htab_map_update_elem(struct bpf_map *map, struct file *map_file, void *key, void *value, u64 map_flags); int bpf_fd_htab_map_lookup_elem(struct bpf_map *map, void *key, u32 *value); int bpf_get_file_flag(int flags); int bpf_check_uarg_tail_zero(bpfptr_t uaddr, size_t expected_size, size_t actual_size); /* verify correctness of eBPF program */ int bpf_check(struct bpf_prog **fp, union bpf_attr *attr, bpfptr_t uattr, u32 uattr_size); #ifndef CONFIG_BPF_JIT_ALWAYS_ON void bpf_patch_call_args(struct bpf_insn *insn, u32 stack_depth); #endif struct btf *bpf_get_btf_vmlinux(void); /* Map specifics */ struct xdp_frame; struct sk_buff; struct bpf_dtab_netdev; struct bpf_cpu_map_entry; void __dev_flush(void); int dev_xdp_enqueue(struct net_device *dev, struct xdp_frame *xdpf, struct net_device *dev_rx); int dev_map_enqueue(struct bpf_dtab_netdev *dst, struct xdp_frame *xdpf, struct net_device *dev_rx); int dev_map_enqueue_multi(struct xdp_frame *xdpf, struct net_device *dev_rx, struct bpf_map *map, bool exclude_ingress); int dev_map_generic_redirect(struct bpf_dtab_netdev *dst, struct sk_buff *skb, struct bpf_prog *xdp_prog); int dev_map_redirect_multi(struct net_device *dev, struct sk_buff *skb, struct bpf_prog *xdp_prog, struct bpf_map *map, bool exclude_ingress); void __cpu_map_flush(void); int cpu_map_enqueue(struct bpf_cpu_map_entry *rcpu, struct xdp_frame *xdpf, struct net_device *dev_rx); int cpu_map_generic_redirect(struct bpf_cpu_map_entry *rcpu, struct sk_buff *skb); /* Return map's numa specified by userspace */ static inline int bpf_map_attr_numa_node(const union bpf_attr *attr) { return (attr->map_flags & BPF_F_NUMA_NODE) ? attr->numa_node : NUMA_NO_NODE; } struct bpf_prog *bpf_prog_get_type_path(const char *name, enum bpf_prog_type type); int array_map_alloc_check(union bpf_attr *attr); int bpf_prog_test_run_xdp(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr); int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr); int bpf_prog_test_run_tracing(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr); int bpf_prog_test_run_flow_dissector(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr); int bpf_prog_test_run_raw_tp(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr); int bpf_prog_test_run_sk_lookup(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr); int bpf_prog_test_run_nf(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr); bool btf_ctx_access(int off, int size, enum bpf_access_type type, const struct bpf_prog *prog, struct bpf_insn_access_aux *info); static inline bool bpf_tracing_ctx_access(int off, int size, enum bpf_access_type type) { if (off < 0 || off >= sizeof(__u64) * MAX_BPF_FUNC_ARGS) return false; if (type != BPF_READ) return false; if (off % size != 0) return false; return true; } static inline bool bpf_tracing_btf_ctx_access(int off, int size, enum bpf_access_type type, const struct bpf_prog *prog, struct bpf_insn_access_aux *info) { if (!bpf_tracing_ctx_access(off, size, type)) return false; return btf_ctx_access(off, size, type, prog, info); } int btf_struct_access(struct bpf_verifier_log *log, const struct bpf_reg_state *reg, int off, int size, enum bpf_access_type atype, u32 *next_btf_id, enum bpf_type_flag *flag, const char **field_name); bool btf_struct_ids_match(struct bpf_verifier_log *log, const struct btf *btf, u32 id, int off, const struct btf *need_btf, u32 need_type_id, bool strict); int btf_distill_func_proto(struct bpf_verifier_log *log, struct btf *btf, const struct btf_type *func_proto, const char *func_name, struct btf_func_model *m); struct bpf_reg_state; int btf_prepare_func_args(struct bpf_verifier_env *env, int subprog); int btf_check_type_match(struct bpf_verifier_log *log, const struct bpf_prog *prog, struct btf *btf, const struct btf_type *t); const char *btf_find_decl_tag_value(const struct btf *btf, const struct btf_type *pt, int comp_idx, const char *tag_key); struct bpf_prog *bpf_prog_by_id(u32 id); struct bpf_link *bpf_link_by_id(u32 id); const struct bpf_func_proto *bpf_base_func_proto(enum bpf_func_id func_id); void bpf_task_storage_free(struct task_struct *task); void bpf_cgrp_storage_free(struct cgroup *cgroup); bool bpf_prog_has_kfunc_call(const struct bpf_prog *prog); const struct btf_func_model * bpf_jit_find_kfunc_model(const struct bpf_prog *prog, const struct bpf_insn *insn); int bpf_get_kfunc_addr(const struct bpf_prog *prog, u32 func_id, u16 btf_fd_idx, u8 **func_addr); struct bpf_core_ctx { struct bpf_verifier_log *log; const struct btf *btf; }; bool btf_nested_type_is_trusted(struct bpf_verifier_log *log, const struct bpf_reg_state *reg, const char *field_name, u32 btf_id, const char *suffix); bool btf_type_ids_nocast_alias(struct bpf_verifier_log *log, const struct btf *reg_btf, u32 reg_id, const struct btf *arg_btf, u32 arg_id); int bpf_core_apply(struct bpf_core_ctx *ctx, const struct bpf_core_relo *relo, int relo_idx, void *insn); static inline bool unprivileged_ebpf_enabled(void) { return !sysctl_unprivileged_bpf_disabled; } /* Not all bpf prog type has the bpf_ctx. * For the bpf prog type that has initialized the bpf_ctx, * this function can be used to decide if a kernel function * is called by a bpf program. */ static inline bool has_current_bpf_ctx(void) { return !!current->bpf_ctx; } void notrace bpf_prog_inc_misses_counter(struct bpf_prog *prog); void bpf_dynptr_init(struct bpf_dynptr_kern *ptr, void *data, enum bpf_dynptr_type type, u32 offset, u32 size); void bpf_dynptr_set_null(struct bpf_dynptr_kern *ptr); void bpf_dynptr_set_rdonly(struct bpf_dynptr_kern *ptr); bool dev_check_flush(void); bool cpu_map_check_flush(void); #else /* !CONFIG_BPF_SYSCALL */ static inline struct bpf_prog *bpf_prog_get(u32 ufd) { return ERR_PTR(-EOPNOTSUPP); } static inline struct bpf_prog *bpf_prog_get_type_dev(u32 ufd, enum bpf_prog_type type, bool attach_drv) { return ERR_PTR(-EOPNOTSUPP); } static inline void bpf_prog_add(struct bpf_prog *prog, int i) { } static inline void bpf_prog_sub(struct bpf_prog *prog, int i) { } static inline void bpf_prog_put(struct bpf_prog *prog) { } static inline void bpf_prog_inc(struct bpf_prog *prog) { } static inline struct bpf_prog *__must_check bpf_prog_inc_not_zero(struct bpf_prog *prog) { return ERR_PTR(-EOPNOTSUPP); } static inline void bpf_link_init(struct bpf_link *link, enum bpf_link_type type, const struct bpf_link_ops *ops, struct bpf_prog *prog) { } static inline int bpf_link_prime(struct bpf_link *link, struct bpf_link_primer *primer) { return -EOPNOTSUPP; } static inline int bpf_link_settle(struct bpf_link_primer *primer) { return -EOPNOTSUPP; } static inline void bpf_link_cleanup(struct bpf_link_primer *primer) { } static inline void bpf_link_inc(struct bpf_link *link) { } static inline struct bpf_link *bpf_link_inc_not_zero(struct bpf_link *link) { return NULL; } static inline void bpf_link_put(struct bpf_link *link) { } static inline int bpf_obj_get_user(const char __user *pathname, int flags) { return -EOPNOTSUPP; } static inline void __dev_flush(void) { } struct xdp_frame; struct bpf_dtab_netdev; struct bpf_cpu_map_entry; static inline int dev_xdp_enqueue(struct net_device *dev, struct xdp_frame *xdpf, struct net_device *dev_rx) { return 0; } static inline int dev_map_enqueue(struct bpf_dtab_netdev *dst, struct xdp_frame *xdpf, struct net_device *dev_rx) { return 0; } static inline int dev_map_enqueue_multi(struct xdp_frame *xdpf, struct net_device *dev_rx, struct bpf_map *map, bool exclude_ingress) { return 0; } struct sk_buff; static inline int dev_map_generic_redirect(struct bpf_dtab_netdev *dst, struct sk_buff *skb, struct bpf_prog *xdp_prog) { return 0; } static inline int dev_map_redirect_multi(struct net_device *dev, struct sk_buff *skb, struct bpf_prog *xdp_prog, struct bpf_map *map, bool exclude_ingress) { return 0; } static inline void __cpu_map_flush(void) { } static inline int cpu_map_enqueue(struct bpf_cpu_map_entry *rcpu, struct xdp_frame *xdpf, struct net_device *dev_rx) { return 0; } static inline int cpu_map_generic_redirect(struct bpf_cpu_map_entry *rcpu, struct sk_buff *skb) { return -EOPNOTSUPP; } static inline struct bpf_prog *bpf_prog_get_type_path(const char *name, enum bpf_prog_type type) { return ERR_PTR(-EOPNOTSUPP); } static inline int bpf_prog_test_run_xdp(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr) { return -ENOTSUPP; } static inline int bpf_prog_test_run_skb(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr) { return -ENOTSUPP; } static inline int bpf_prog_test_run_tracing(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr) { return -ENOTSUPP; } static inline int bpf_prog_test_run_flow_dissector(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr) { return -ENOTSUPP; } static inline int bpf_prog_test_run_sk_lookup(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr) { return -ENOTSUPP; } static inline void bpf_map_put(struct bpf_map *map) { } static inline struct bpf_prog *bpf_prog_by_id(u32 id) { return ERR_PTR(-ENOTSUPP); } static inline int btf_struct_access(struct bpf_verifier_log *log, const struct bpf_reg_state *reg, int off, int size, enum bpf_access_type atype, u32 *next_btf_id, enum bpf_type_flag *flag, const char **field_name) { return -EACCES; } static inline const struct bpf_func_proto * bpf_base_func_proto(enum bpf_func_id func_id) { return NULL; } static inline void bpf_task_storage_free(struct task_struct *task) { } static inline bool bpf_prog_has_kfunc_call(const struct bpf_prog *prog) { return false; } static inline const struct btf_func_model * bpf_jit_find_kfunc_model(const struct bpf_prog *prog, const struct bpf_insn *insn) { return NULL; } static inline int bpf_get_kfunc_addr(const struct bpf_prog *prog, u32 func_id, u16 btf_fd_idx, u8 **func_addr) { return -ENOTSUPP; } static inline bool unprivileged_ebpf_enabled(void) { return false; } static inline bool has_current_bpf_ctx(void) { return false; } static inline void bpf_prog_inc_misses_counter(struct bpf_prog *prog) { } static inline void bpf_cgrp_storage_free(struct cgroup *cgroup) { } static inline void bpf_dynptr_init(struct bpf_dynptr_kern *ptr, void *data, enum bpf_dynptr_type type, u32 offset, u32 size) { } static inline void bpf_dynptr_set_null(struct bpf_dynptr_kern *ptr) { } static inline void bpf_dynptr_set_rdonly(struct bpf_dynptr_kern *ptr) { } #endif /* CONFIG_BPF_SYSCALL */ static __always_inline int bpf_probe_read_kernel_common(void *dst, u32 size, const void *unsafe_ptr) { int ret = -EFAULT; if (IS_ENABLED(CONFIG_BPF_EVENTS)) ret = copy_from_kernel_nofault(dst, unsafe_ptr, size); if (unlikely(ret < 0)) memset(dst, 0, size); return ret; } void __bpf_free_used_btfs(struct bpf_prog_aux *aux, struct btf_mod_pair *used_btfs, u32 len); static inline struct bpf_prog *bpf_prog_get_type(u32 ufd, enum bpf_prog_type type) { return bpf_prog_get_type_dev(ufd, type, false); } void __bpf_free_used_maps(struct bpf_prog_aux *aux, struct bpf_map **used_maps, u32 len); bool bpf_prog_get_ok(struct bpf_prog *, enum bpf_prog_type *, bool); int bpf_prog_offload_compile(struct bpf_prog *prog); void bpf_prog_dev_bound_destroy(struct bpf_prog *prog); int bpf_prog_offload_info_fill(struct bpf_prog_info *info, struct bpf_prog *prog); int bpf_map_offload_info_fill(struct bpf_map_info *info, struct bpf_map *map); int bpf_map_offload_lookup_elem(struct bpf_map *map, void *key, void *value); int bpf_map_offload_update_elem(struct bpf_map *map, void *key, void *value, u64 flags); int bpf_map_offload_delete_elem(struct bpf_map *map, void *key); int bpf_map_offload_get_next_key(struct bpf_map *map, void *key, void *next_key); bool bpf_offload_prog_map_match(struct bpf_prog *prog, struct bpf_map *map); struct bpf_offload_dev * bpf_offload_dev_create(const struct bpf_prog_offload_ops *ops, void *priv); void bpf_offload_dev_destroy(struct bpf_offload_dev *offdev); void *bpf_offload_dev_priv(struct bpf_offload_dev *offdev); int bpf_offload_dev_netdev_register(struct bpf_offload_dev *offdev, struct net_device *netdev); void bpf_offload_dev_netdev_unregister(struct bpf_offload_dev *offdev, struct net_device *netdev); bool bpf_offload_dev_match(struct bpf_prog *prog, struct net_device *netdev); void unpriv_ebpf_notify(int new_state); #if defined(CONFIG_NET) && defined(CONFIG_BPF_SYSCALL) int bpf_dev_bound_kfunc_check(struct bpf_verifier_log *log, struct bpf_prog_aux *prog_aux); void *bpf_dev_bound_resolve_kfunc(struct bpf_prog *prog, u32 func_id); int bpf_prog_dev_bound_init(struct bpf_prog *prog, union bpf_attr *attr); int bpf_prog_dev_bound_inherit(struct bpf_prog *new_prog, struct bpf_prog *old_prog); void bpf_dev_bound_netdev_unregister(struct net_device *dev); static inline bool bpf_prog_is_dev_bound(const struct bpf_prog_aux *aux) { return aux->dev_bound; } static inline bool bpf_prog_is_offloaded(const struct bpf_prog_aux *aux) { return aux->offload_requested; } bool bpf_prog_dev_bound_match(const struct bpf_prog *lhs, const struct bpf_prog *rhs); static inline bool bpf_map_is_offloaded(struct bpf_map *map) { return unlikely(map->ops == &bpf_map_offload_ops); } struct bpf_map *bpf_map_offload_map_alloc(union bpf_attr *attr); void bpf_map_offload_map_free(struct bpf_map *map); u64 bpf_map_offload_map_mem_usage(const struct bpf_map *map); int bpf_prog_test_run_syscall(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr); int sock_map_get_from_fd(const union bpf_attr *attr, struct bpf_prog *prog); int sock_map_prog_detach(const union bpf_attr *attr, enum bpf_prog_type ptype); int sock_map_update_elem_sys(struct bpf_map *map, void *key, void *value, u64 flags); int sock_map_bpf_prog_query(const union bpf_attr *attr, union bpf_attr __user *uattr); void sock_map_unhash(struct sock *sk); void sock_map_destroy(struct sock *sk); void sock_map_close(struct sock *sk, long timeout); #else static inline int bpf_dev_bound_kfunc_check(struct bpf_verifier_log *log, struct bpf_prog_aux *prog_aux) { return -EOPNOTSUPP; } static inline void *bpf_dev_bound_resolve_kfunc(struct bpf_prog *prog, u32 func_id) { return NULL; } static inline int bpf_prog_dev_bound_init(struct bpf_prog *prog, union bpf_attr *attr) { return -EOPNOTSUPP; } static inline int bpf_prog_dev_bound_inherit(struct bpf_prog *new_prog, struct bpf_prog *old_prog) { return -EOPNOTSUPP; } static inline void bpf_dev_bound_netdev_unregister(struct net_device *dev) { } static inline bool bpf_prog_is_dev_bound(const struct bpf_prog_aux *aux) { return false; } static inline bool bpf_prog_is_offloaded(struct bpf_prog_aux *aux) { return false; } static inline bool bpf_prog_dev_bound_match(const struct bpf_prog *lhs, const struct bpf_prog *rhs) { return false; } static inline bool bpf_map_is_offloaded(struct bpf_map *map) { return false; } static inline struct bpf_map *bpf_map_offload_map_alloc(union bpf_attr *attr) { return ERR_PTR(-EOPNOTSUPP); } static inline void bpf_map_offload_map_free(struct bpf_map *map) { } static inline u64 bpf_map_offload_map_mem_usage(const struct bpf_map *map) { return 0; } static inline int bpf_prog_test_run_syscall(struct bpf_prog *prog, const union bpf_attr *kattr, union bpf_attr __user *uattr) { return -ENOTSUPP; } #ifdef CONFIG_BPF_SYSCALL static inline int sock_map_get_from_fd(const union bpf_attr *attr, struct bpf_prog *prog) { return -EINVAL; } static inline int sock_map_prog_detach(const union bpf_attr *attr, enum bpf_prog_type ptype) { return -EOPNOTSUPP; } static inline int sock_map_update_elem_sys(struct bpf_map *map, void *key, void *value, u64 flags) { return -EOPNOTSUPP; } static inline int sock_map_bpf_prog_query(const union bpf_attr *attr, union bpf_attr __user *uattr) { return -EINVAL; } #endif /* CONFIG_BPF_SYSCALL */ #endif /* CONFIG_NET && CONFIG_BPF_SYSCALL */ static __always_inline void bpf_prog_inc_misses_counters(const struct bpf_prog_array *array) { const struct bpf_prog_array_item *item; struct bpf_prog *prog; if (unlikely(!array)) return; item = &array->items[0]; while ((prog = READ_ONCE(item->prog))) { bpf_prog_inc_misses_counter(prog); item++; } } #if defined(CONFIG_INET) && defined(CONFIG_BPF_SYSCALL) void bpf_sk_reuseport_detach(struct sock *sk); int bpf_fd_reuseport_array_lookup_elem(struct bpf_map *map, void *key, void *value); int bpf_fd_reuseport_array_update_elem(struct bpf_map *map, void *key, void *value, u64 map_flags); #else static inline void bpf_sk_reuseport_detach(struct sock *sk) { } #ifdef CONFIG_BPF_SYSCALL static inline int bpf_fd_reuseport_array_lookup_elem(struct bpf_map *map, void *key, void *value) { return -EOPNOTSUPP; } static inline int bpf_fd_reuseport_array_update_elem(struct bpf_map *map, void *key, void *value, u64 map_flags) { return -EOPNOTSUPP; } #endif /* CONFIG_BPF_SYSCALL */ #endif /* defined(CONFIG_INET) && defined(CONFIG_BPF_SYSCALL) */ /* verifier prototypes for helper functions called from eBPF programs */ extern const struct bpf_func_proto bpf_map_lookup_elem_proto; extern const struct bpf_func_proto bpf_map_update_elem_proto; extern const struct bpf_func_proto bpf_map_delete_elem_proto; extern const struct bpf_func_proto bpf_map_push_elem_proto; extern const struct bpf_func_proto bpf_map_pop_elem_proto; extern const struct bpf_func_proto bpf_map_peek_elem_proto; extern const struct bpf_func_proto bpf_map_lookup_percpu_elem_proto; extern const struct bpf_func_proto bpf_get_prandom_u32_proto; extern const struct bpf_func_proto bpf_get_smp_processor_id_proto; extern const struct bpf_func_proto bpf_get_numa_node_id_proto; extern const struct bpf_func_proto bpf_tail_call_proto; extern const struct bpf_func_proto bpf_ktime_get_ns_proto; extern const struct bpf_func_proto bpf_ktime_get_boot_ns_proto; extern const struct bpf_func_proto bpf_ktime_get_tai_ns_proto; extern const struct bpf_func_proto bpf_get_current_pid_tgid_proto; extern const struct bpf_func_proto bpf_get_current_uid_gid_proto; extern const struct bpf_func_proto bpf_get_current_comm_proto; extern const struct bpf_func_proto bpf_get_stackid_proto; extern const struct bpf_func_proto bpf_get_stack_proto; extern const struct bpf_func_proto bpf_get_task_stack_proto; extern const struct bpf_func_proto bpf_get_stackid_proto_pe; extern const struct bpf_func_proto bpf_get_stack_proto_pe; extern const struct bpf_func_proto bpf_sock_map_update_proto; extern const struct bpf_func_proto bpf_sock_hash_update_proto; extern const struct bpf_func_proto bpf_get_current_cgroup_id_proto; extern const struct bpf_func_proto bpf_get_current_ancestor_cgroup_id_proto; extern const struct bpf_func_proto bpf_get_cgroup_classid_curr_proto; extern const struct bpf_func_proto bpf_msg_redirect_hash_proto; extern const struct bpf_func_proto bpf_msg_redirect_map_proto; extern const struct bpf_func_proto bpf_sk_redirect_hash_proto; extern const struct bpf_func_proto bpf_sk_redirect_map_proto; extern const struct bpf_func_proto bpf_spin_lock_proto; extern const struct bpf_func_proto bpf_spin_unlock_proto; extern const struct bpf_func_proto bpf_get_local_storage_proto; extern const struct bpf_func_proto bpf_strtol_proto; extern const struct bpf_func_proto bpf_strtoul_proto; extern const struct bpf_func_proto bpf_tcp_sock_proto; extern const struct bpf_func_proto bpf_jiffies64_proto; extern const struct bpf_func_proto bpf_get_ns_current_pid_tgid_proto; extern const struct bpf_func_proto bpf_event_output_data_proto; extern const struct bpf_func_proto bpf_ringbuf_output_proto; extern const struct bpf_func_proto bpf_ringbuf_reserve_proto; extern const struct bpf_func_proto bpf_ringbuf_submit_proto; extern const struct bpf_func_proto bpf_ringbuf_discard_proto; extern const struct bpf_func_proto bpf_ringbuf_query_proto; extern const struct bpf_func_proto bpf_ringbuf_reserve_dynptr_proto; extern const struct bpf_func_proto bpf_ringbuf_submit_dynptr_proto; extern const struct bpf_func_proto bpf_ringbuf_discard_dynptr_proto; extern const struct bpf_func_proto bpf_skc_to_tcp6_sock_proto; extern const struct bpf_func_proto bpf_skc_to_tcp_sock_proto; extern const struct bpf_func_proto bpf_skc_to_tcp_timewait_sock_proto; extern const struct bpf_func_proto bpf_skc_to_tcp_request_sock_proto; extern const struct bpf_func_proto bpf_skc_to_udp6_sock_proto; extern const struct bpf_func_proto bpf_skc_to_unix_sock_proto; extern const struct bpf_func_proto bpf_skc_to_mptcp_sock_proto; extern const struct bpf_func_proto bpf_copy_from_user_proto; extern const struct bpf_func_proto bpf_snprintf_btf_proto; extern const struct bpf_func_proto bpf_snprintf_proto; extern const struct bpf_func_proto bpf_per_cpu_ptr_proto; extern const struct bpf_func_proto bpf_this_cpu_ptr_proto; extern const struct bpf_func_proto bpf_ktime_get_coarse_ns_proto; extern const struct bpf_func_proto bpf_sock_from_file_proto; extern const struct bpf_func_proto bpf_get_socket_ptr_cookie_proto; extern const struct bpf_func_proto bpf_task_storage_get_recur_proto; extern const struct bpf_func_proto bpf_task_storage_get_proto; extern const struct bpf_func_proto bpf_task_storage_delete_recur_proto; extern const struct bpf_func_proto bpf_task_storage_delete_proto; extern const struct bpf_func_proto bpf_for_each_map_elem_proto; extern const struct bpf_func_proto bpf_btf_find_by_name_kind_proto; extern const struct bpf_func_proto bpf_sk_setsockopt_proto; extern const struct bpf_func_proto bpf_sk_getsockopt_proto; extern const struct bpf_func_proto bpf_unlocked_sk_setsockopt_proto; extern const struct bpf_func_proto bpf_unlocked_sk_getsockopt_proto; extern const struct bpf_func_proto bpf_find_vma_proto; extern const struct bpf_func_proto bpf_loop_proto; extern const struct bpf_func_proto bpf_copy_from_user_task_proto; extern const struct bpf_func_proto bpf_set_retval_proto; extern const struct bpf_func_proto bpf_get_retval_proto; extern const struct bpf_func_proto bpf_user_ringbuf_drain_proto; extern const struct bpf_func_proto bpf_cgrp_storage_get_proto; extern const struct bpf_func_proto bpf_cgrp_storage_delete_proto; const struct bpf_func_proto *tracing_prog_func_proto( enum bpf_func_id func_id, const struct bpf_prog *prog); /* Shared helpers among cBPF and eBPF. */ void bpf_user_rnd_init_once(void); u64 bpf_user_rnd_u32(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5); u64 bpf_get_raw_cpu_id(u64 r1, u64 r2, u64 r3, u64 r4, u64 r5); #if defined(CONFIG_NET) bool bpf_sock_common_is_valid_access(int off, int size, enum bpf_access_type type, struct bpf_insn_access_aux *info); bool bpf_sock_is_valid_access(int off, int size, enum bpf_access_type type, struct bpf_insn_access_aux *info); u32 bpf_sock_convert_ctx_access(enum bpf_access_type type, const struct bpf_insn *si, struct bpf_insn *insn_buf, struct bpf_prog *prog, u32 *target_size); int bpf_dynptr_from_skb_rdonly(struct sk_buff *skb, u64 flags, struct bpf_dynptr_kern *ptr); #else static inline bool bpf_sock_common_is_valid_access(int off, int size, enum bpf_access_type type, struct bpf_insn_access_aux *info) { return false; } static inline bool bpf_sock_is_valid_access(int off, int size, enum bpf_access_type type, struct bpf_insn_access_aux *info) { return false; } static inline u32 bpf_sock_convert_ctx_access(enum bpf_access_type type, const struct bpf_insn *si, struct bpf_insn *insn_buf, struct bpf_prog *prog, u32 *target_size) { return 0; } static inline int bpf_dynptr_from_skb_rdonly(struct sk_buff *skb, u64 flags, struct bpf_dynptr_kern *ptr) { return -EOPNOTSUPP; } #endif #ifdef CONFIG_INET struct sk_reuseport_kern { struct sk_buff *skb; struct sock *sk; struct sock *selected_sk; struct sock *migrating_sk; void *data_end; u32 hash; u32 reuseport_id; bool bind_inany; }; bool bpf_tcp_sock_is_valid_access(int off, int size, enum bpf_access_type type, struct bpf_insn_access_aux *info); u32 bpf_tcp_sock_convert_ctx_access(enum bpf_access_type type, const struct bpf_insn *si, struct bpf_insn *insn_buf, struct bpf_prog *prog, u32 *target_size); bool bpf_xdp_sock_is_valid_access(int off, int size, enum bpf_access_type type, struct bpf_insn_access_aux *info); u32 bpf_xdp_sock_convert_ctx_access(enum bpf_access_type type, const struct bpf_insn *si, struct bpf_insn *insn_buf, struct bpf_prog *prog, u32 *target_size); #else static inline bool bpf_tcp_sock_is_valid_access(int off, int size, enum bpf_access_type type, struct bpf_insn_access_aux *info) { return false; } static inline u32 bpf_tcp_sock_convert_ctx_access(enum bpf_access_type type, const struct bpf_insn *si, struct bpf_insn *insn_buf, struct bpf_prog *prog, u32 *target_size) { return 0; } static inline bool bpf_xdp_sock_is_valid_access(int off, int size, enum bpf_access_type type, struct bpf_insn_access_aux *info) { return false; } static inline u32 bpf_xdp_sock_convert_ctx_access(enum bpf_access_type type, const struct bpf_insn *si, struct bpf_insn *insn_buf, struct bpf_prog *prog, u32 *target_size) { return 0; } #endif /* CONFIG_INET */ enum bpf_text_poke_type { BPF_MOD_CALL, BPF_MOD_JUMP, }; int bpf_arch_text_poke(void *ip, enum bpf_text_poke_type t, void *addr1, void *addr2); void bpf_arch_poke_desc_update(struct bpf_jit_poke_descriptor *poke, struct bpf_prog *new, struct bpf_prog *old); void *bpf_arch_text_copy(void *dst, void *src, size_t len); int bpf_arch_text_invalidate(void *dst, size_t len); struct btf_id_set; bool btf_id_set_contains(const struct btf_id_set *set, u32 id); #define MAX_BPRINTF_VARARGS 12 #define MAX_BPRINTF_BUF 1024 struct bpf_bprintf_data { u32 *bin_args; char *buf; bool get_bin_args; bool get_buf; }; int bpf_bprintf_prepare(char *fmt, u32 fmt_size, const u64 *raw_args, u32 num_args, struct bpf_bprintf_data *data); void bpf_bprintf_cleanup(struct bpf_bprintf_data *data); #ifdef CONFIG_BPF_LSM void bpf_cgroup_atype_get(u32 attach_btf_id, int cgroup_atype); void bpf_cgroup_atype_put(int cgroup_atype); #else static inline void bpf_cgroup_atype_get(u32 attach_btf_id, int cgroup_atype) {} static inline void bpf_cgroup_atype_put(int cgroup_atype) {} #endif /* CONFIG_BPF_LSM */ struct key; #ifdef CONFIG_KEYS struct bpf_key { struct key *key; bool has_ref; }; #endif /* CONFIG_KEYS */ static inline bool type_is_alloc(u32 type) { return type & MEM_ALLOC; } static inline gfp_t bpf_memcg_flags(gfp_t flags) { if (memcg_bpf_enabled()) return flags | __GFP_ACCOUNT; return flags; } static inline bool bpf_is_subprog(const struct bpf_prog *prog) { return prog->aux->func_idx != 0; } #endif /* _LINUX_BPF_H */