Um 16:02 Uhr am 19.10.20 schrieb Axel Beckert:

>> Next step would be to strace the dkms build process and compare the
>> output to find out what files are referenced to find the offending
>> header files.
> 
> Good idea, thanks!

The more I look at this, the more ?!?! appear above my head.

I am currently comparing one working system and one failing system.

On both I did the following:

# cd /var/lib/dkms/ipt-netflow/2.5.1/source

# ./configure --kver=5.9.0-1-amd64 --kdir=/lib/modules/5.9.0-1-amd64/build

This resulted in the following *identical* output:

--------------8<-------------

Module version: 2.5.1
Kernel version: 5.9.0-1-amd64 (requested)
Kernel sources: /lib/modules/5.9.0-1-amd64/build (requested)
! Warning: requested kernel version (5.9.0-1-amd64) and requested version of 
kernel source (5.9.1) doesn't match!
!   You may try to specify only kernel source tree with 
--kdir=/lib/modules/5.9.0-1-amd64/build
!   and configure will pick up version properly.
! Assuming you want to build for 5.9.1
Checking for presence of include/linux/netfilter.h... No
Checking for presence of include/linux/llist.h... No
Checking for presence of include/linux/grsecurity.h... No
Iptables binary version: 1.8.5 (legacy) (detected from /usr/sbin/iptables)
pkg-config for version 1.8.5 (legacy) exists: No (reported: 1.8.5)
Check for working gcc: Yes (gcc)
Checking for presence of xtables.h... Yes
Searching for iptables-1.8.5 (legacy) sources..
! Can not find iptables source directory, you may try setting it with --ipt-src=
! This is not fatal error, yet. Will be just using default include dir.
Iptables include flags: none (default)
Iptables module path: /usr/lib/debug/.dwz/x86_64-linux-gnu/iptables.debug (from 
binary)
Searching for net-snmp-config... No.
Searching for net-snmp agent... No.
 Assuming you don't want net-snmp agent support.
 Otherwise do:  apt-get install snmpd libsnmp-dev
Checking for DKMS... Yes.
! You are already have module installed via DKMS
!   it will be uninstalled on 'make install' and
!   current version of module installed afterwards.
! Use --disable-dkms option if don't want this.
Creating Makefile.. done.

  If you need some options enabled run ./configure --help
  Now run: make all install

--------------8<-------------

Then I ran  ./gen_compat_def which is used to generate compat_def.h where the 
problem stem from.
And here the output differs:

Broken System:

----------8<------------
// Autogenerated for /lib/modules/5.9.0-1-amd64/build

Test symbol xt_family linux/netfilter_ipv4/ip_tables.h
// xt_family is declared in <linux/netfilter_ipv4/ip_tables.h>
#define HAVE_XT_FAMILY

Test struct timeval linux/ktime.h
// struct timeval is declared in <linux/ktime.h>
#define HAVE_TIMEVAL

Test struct proc_ops linux/proc_fs.h
// struct proc_ops is declared in <linux/proc_fs.h>
#define HAVE_PROC_OPS

Test symbol synchronize_sched linux/rcupdate.h
// synchronize_sched is declared in <linux/rcupdate.h>
#define HAVE_SYNCHRONIZE_SCHED

// End of compat_def.h
----------8<------------

Working System with undef'ed HAVE_TIMEVAL and HAVE_SYNCHRONIZE_SCHED:

----------8<------------
// Autogenerated for /lib/modules/5.9.0-1-amd64/build

Test symbol xt_family linux/netfilter_ipv4/ip_tables.h
// xt_family is declared in <linux/netfilter_ipv4/ip_tables.h>
#define HAVE_XT_FAMILY

Test struct timeval linux/ktime.h
#undef HAVE_TIMEVAL
// struct timeval is undeclared in <linux/ktime.h>. Compile:
//   #include <linux/module.h>
//   #include <linux/ktime.h>
//   MODULE_LICENSE("GPL");
//   struct timeval test;
// Output:
//   make -s -C /lib/modules/5.9.0-1-amd64/build 
M=/var/lib/dkms/ipt-netflow/2.5.1/source/cc-test-build modules
//   /var/lib/dkms/ipt-netflow/2.5.1/source/cc-test-build/test.c:4:16: error: 
storage size of 'test' isn't known
//       4 | struct timeval test;
//         |                ^~~~
//   make[2]: *** 
[/usr/src/linux-headers-5.9.0-1-common/scripts/Makefile.build:288: 
/var/lib/dkms/ipt-netflow/2.5.1/source/cc-test-build/test.o] Error 1
//   make[1]: *** [/usr/src/linux-headers-5.9.0-1-common/Makefile:1796: 
/var/lib/dkms/ipt-netflow/2.5.1/source/cc-test-build] Error 2
//   make: *** [/usr/src/linux-headers-5.9.0-1-common/Makefile:185: __sub-make] 
Error 2

Test struct proc_ops linux/proc_fs.h
// struct proc_ops is declared in <linux/proc_fs.h>
#define HAVE_PROC_OPS

Test symbol synchronize_sched linux/rcupdate.h
#undef HAVE_SYNCHRONIZE_SCHED
// synchronize_sched is undeclared in <linux/rcupdate.h>. Compile:
//   #include <linux/module.h>
//   #include <linux/rcupdate.h>
//   MODULE_LICENSE("GPL");
//   void *test = synchronize_sched;
// Output:
//   make -s -C /lib/modules/5.9.0-1-amd64/build 
M=/var/lib/dkms/ipt-netflow/2.5.1/source/cc-test-build modules
//   /var/lib/dkms/ipt-netflow/2.5.1/source/cc-test-build/test.c:4:14: error: 
'synchronize_sched' undeclared here (not in a function); did you mean 
'synchronize_srcu'?
//       4 | void *test = synchronize_sched;
//         |              ^~~~~~~~~~~~~~~~~
//         |              synchronize_srcu
//   make[2]: *** 
[/usr/src/linux-headers-5.9.0-1-common/scripts/Makefile.build:288: 
/var/lib/dkms/ipt-netflow/2.5.1/source/cc-test-build/test.o] Error 1
//   make[1]: *** [/usr/src/linux-headers-5.9.0-1-common/Makefile:1796: 
/var/lib/dkms/ipt-netflow/2.5.1/source/cc-test-build] Error 2
//   make: *** [/usr/src/linux-headers-5.9.0-1-common/Makefile:185: __sub-make] 
Error 2

// End of compat_def.h
----------8<------------

What?! 

I tested with debsums -c and even reinstalled
linux-headers-5.9.0-1-common, comparing the before and after, nothing
broken, nothing missing.

I then removed the "rm $WD" from gen_compat_def to keep the test directory
to do some building on my own and strace'ing the difference, in this case
for the last test for synchronize_sched:

Broken:
----------8<------------
# strace -f -o /tmp/skuld.make.trace make -s -C 
/lib/modules/5.9.0-1-amd64/build 
M=/var/lib/dkms/ipt-netflow/2.5.1/source/cc-test-build modules
[no output]
----------8<------------

Working:
----------8<------------
# strace -f -o /tmp/hild.make.trace make -s -C /lib/modules/5.9.0-1-amd64/build 
M=/var/lib/dkms/ipt-netflow/2.5.1/source/cc-test-build modules
/var/lib/dkms/ipt-netflow/2.5.1/source/cc-test-build/test.c:4:14: error: 
'synchronize_sched' undeclared here (not in a function); did you mean 
'synchronize_srcu'?
    4 | void *test = synchronize_sched;
      |              ^~~~~~~~~~~~~~~~~
      |              synchronize_srcu
make[2]: *** [/usr/src/linux-headers-5.9.0-1-common/scripts/Makefile.build:288: 
/var/lib/dkms/ipt-netflow/2.5.1/source/cc-test-build/test.o] Error 1
make[1]: *** [/usr/src/linux-headers-5.9.0-1-common/Makefile:1796: 
/var/lib/dkms/ipt-netflow/2.5.1/source/cc-test-build] Error 2
make: *** [/usr/src/linux-headers-5.9.0-1-common/Makefile:185: __sub-make] 
Error 2
----------8<------------

There has to be something strange going on, because the strace from the
working system is 4654442 bytes whereas the failing one has 6066615 bytes.

I am comparing them right now but have not made heads or tails out of
them. If you want in on the "fun", I can send both of them to you
privately.

Grüße,
Sven.

Reply via email to