Bug 458132

Summary: Missing symbol in link from static IPv6, loadable Crypto API
Product: Red Hat Enterprise Linux 5 Reporter: Steve Snyder <swsnyder>
Component: kernelAssignee: Neil Horman <nhorman>
Status: CLOSED UPSTREAM QA Contact: Martin Jenner <mjenner>
Severity: medium Docs Contact:
Priority: medium    
Version: 5.2CC: dzickus, herbert.xu, nhorman
Target Milestone: rc   
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2008-12-08 15:52:03 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description Steve Snyder 2008-08-06 16:12:42 UTC
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):

2.6.18-92.1.10.el5.i686

How reproducible:

Always.

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
  
Actual results:

  GEN     .version
  CHK     include/linux/compile.h
  UPD     include/linux/compile.h
  CC      init/version.o
  LD      init/built-in.o
  LD      .tmp_vmlinux1
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

Expected results:

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.

Additional info:

[boilerplate_disclaimer]
Yes, I am all too aware that Red Hat doesn't support user-configured kernels.
[/boilerplate_disclaimer]

That said, I think you will want to know about a hidden dependency between device drivers.

FYI.

Comment 1 Neil Horman 2008-12-08 15:52:03 UTC
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!