Red Hat Bugzilla – Bug 458132
Missing symbol in link from static IPv6, loadable Crypto API
Last modified: 2008-12-08 10:52:03 EST
Description of problem:
The kernel build system allows CONFIG_IPV6=y, which selects CONFIG_XFRM_NALGO=y, which is dependent upon CONFIG_CRYPTO_API. Ufortunately, CONFIG_CRYPTO_API can be independently configured as a loadable module, and is by Red Hat default. The result is a kernel link failure due to the missing symbol crypto_has_alg().
Version-Release number of selected component (if applicable):
Steps to Reproduce:
1. Unpack the 2.6.18-92.1.10.el5 source RPM, prep as usual
2. Opt (I used "make menuconfig") to build the IPv6 driver into the static kernel image
3. Build the kernel
net/built-in.o: In function `xfrm_find_algo':
/usr/src/linux-2.6.18-92.1.10.el5.sws/net/xfrm/xfrm_nalgo.c:450: undefined reference to `crypto_has_alg'
make: *** [.tmp_vmlinux1] Error 1
The kernel configuration system should force a dependant driver to build statically when another driver that depends on it is statically built. Or disallow a static build if a dependant module is built for dynamic loading. Either way, the symbols of all statically-built device drivers must reconcile at link time.
Yes, I am all too aware that Red Hat doesn't support user-configured kernels.
That said, I think you will want to know about a hidden dependency between device drivers.
Ok, I've looked at this, and upstream has resolved this by not making XFRM_NALGO selected by enabling IPV6. As a result the user is completely responsible for ensuring that all symbols required by the monolitic kernel are appropriately configured. While we appreciate the heads up on this, since we don't support recompiled kernels, and since you clearly know enough to configure a kernel and resolve this symbol discrepancy by by setting CONFIG_CRYPTO_API=y, the best thing to do here is probably to simply close this bug so others can find this info if they need it. I appreciate the report though. Thanks!