Files
linux/include/linux
Alexei Starovoitov d2ba09c17a net: add skeleton of bpfilter kernel module
bpfilter.ko consists of bpfilter_kern.c (normal kernel module code)
and user mode helper code that is embedded into bpfilter.ko

The steps to build bpfilter.ko are the following:
- main.c is compiled by HOSTCC into the bpfilter_umh elf executable file
- with quite a bit of objcopy and Makefile magic the bpfilter_umh elf file
  is converted into bpfilter_umh.o object file
  with _binary_net_bpfilter_bpfilter_umh_start and _end symbols
  Example:
  $ nm ./bld_x64/net/bpfilter/bpfilter_umh.o
  0000000000004cf8 T _binary_net_bpfilter_bpfilter_umh_end
  0000000000004cf8 A _binary_net_bpfilter_bpfilter_umh_size
  0000000000000000 T _binary_net_bpfilter_bpfilter_umh_start
- bpfilter_umh.o and bpfilter_kern.o are linked together into bpfilter.ko

bpfilter_kern.c is a normal kernel module code that calls
the fork_usermode_blob() helper to execute part of its own data
as a user mode process.

Notice that _binary_net_bpfilter_bpfilter_umh_start - end
is placed into .init.rodata section, so it's freed as soon as __init
function of bpfilter.ko is finished.
As part of __init the bpfilter.ko does first request/reply action
via two unix pipe provided by fork_usermode_blob() helper to
make sure that umh is healthy. If not it will kill it via pid.

Later bpfilter_process_sockopt() will be called from bpfilter hooks
in get/setsockopt() to pass iptable commands into umh via bpfilter.ko

If admin does 'rmmod bpfilter' the __exit code bpfilter.ko will
kill umh as well.

Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
2018-05-23 13:23:40 -04:00
..
2018-02-20 11:34:54 +00:00
2018-04-20 17:18:35 -07:00
2018-03-16 10:56:13 +01:00
2018-05-15 20:41:03 +02:00
2018-03-31 02:16:26 +02:00
2018-05-15 20:41:03 +02:00
2018-05-09 17:25:13 +02:00
2018-03-16 15:45:51 -07:00
2018-03-16 10:55:47 +01:00
2018-03-26 15:09:38 +02:00
2018-03-26 15:56:44 +02:00
2018-04-26 09:02:01 -06:00
2018-02-22 21:13:03 +01:00
2018-03-26 08:53:43 -06:00
2018-01-17 11:30:16 +00:00
2018-04-11 10:28:35 -07:00
2018-04-11 10:28:38 -07:00
2018-03-13 13:29:10 -07:00
2018-04-12 09:41:19 -07:00
2018-04-11 10:28:32 -07:00
2018-03-26 13:14:43 -04:00
2018-03-26 13:14:43 -04:00
2018-03-26 13:14:43 -04:00
2018-01-28 22:17:24 -05:00
2018-01-17 15:25:50 +01:00
2018-04-11 10:28:39 -07:00
2018-01-31 17:18:37 -08:00
2018-01-19 16:50:53 -08:00
2018-04-28 16:48:04 -04:00
2018-05-11 17:28:45 -07:00
2018-05-11 17:28:45 -07:00
2018-02-20 16:12:26 -08:00
2018-03-17 14:20:55 +01:00
2018-03-01 08:33:05 -07:00
2018-04-05 21:36:24 -07:00
2018-04-05 21:36:27 -07:00
2018-05-03 15:55:23 -07:00
2018-01-18 11:56:49 +01:00
2018-01-15 12:07:46 -08:00
2018-02-06 18:32:47 -08:00
2018-05-18 11:40:27 -04:00
2018-02-20 16:10:25 -08:00
2018-04-26 15:08:04 -04:00
2018-02-06 18:32:44 -08:00