Failed to insert openafs module on ARM platform: Exec format error
Affects | Status | Importance | Assigned to | Milestone | ||
---|---|---|---|---|---|---|
openafs (Ubuntu) | Status tracked in Oracular | |||||
Focal |
In Progress
|
Undecided
|
Chengen Du | |||
Jammy |
In Progress
|
Undecided
|
Chengen Du | |||
Noble |
In Progress
|
Undecided
|
Chengen Du | |||
Oracular |
In Progress
|
Undecided
|
Chengen Du |
Bug Description
[Impact]
The openafs module cannot be installed on the ARM platform, resulting in the following error:
insmod /lib/modules/
modprobe: ERROR: could not insert 'openafs': Exec format error
[Fix]
There is an upstream commit that addresses this issue:
commit 2f260825b96b765
Author: Cheyenne Wills <email address hidden>
Date: Thu Mar 28 12:51:46 2024 -0400
Linux: Remove weak attribute for key_type_keyring
The reference to the Linux symbol key_type_keyring uses a weak
attribute to assist in determining if the symbol is exported. This
method was introduced in commit: 'keyring-
as a way to detect if the symbol was exported by the Linux kernel. A
later commit: 'linux-
introduced an autoconf test that eliminated the need for using the weak
attribute, but the commit did not remove the attribute.
On a Debian-12 system on ARM64 the use of the weak attribute in this
case causes an error when loading the kernel module:
"ERROR: could not insert 'openafs': Exec format error".
The error is due to the Linux module loader not supporting the
relocation entry type in the openafs kernel module for the
key_
occur with gcc-12 on a ARM64 system (see below for additional
information).
The code in osi_groups.c uses a pointer, __key_type_keyring, to the
key_
loader would resolve the address and __key_type_keyring would contain
the address. If the key_type_keyring symbol was not exported,
__key_
associated with key_type_keyring).
Remove the weak attribute for key_type_keyring when the configure
test, introduced in the 4ca66112c2 commit, determines that the symbol
is exported (EXPORTED_
isn't exported (pre Linux 2.6.22), just set the pointer,
__key_
NOTE:
The load error was reported on the openafs IRC channel by "clarkb"
The problem of loading the openafs kernel module was also observed
on a NixOS system as well, and is described in the NixOS ticket
https:/
A Debian-11 system did not have a problem loading the openafs kernel
module. Investigation of the differences between Debian-11 and Debian-12
showed that the problem is due to a series of fixes in the toolchain
(in particular gcc-12) to address 'Cortex-A53 erratum #843419', which
deals with how the ARM64 ADRP instruction is used. With gcc-12, the
code generated uses a R_AARCH64_ADR_GOT for this particular case (which
isn't supported by the Linux kernel module loader). Gcc-11 created a
R_AARCH64_ABS64 relocation entry type for the symbol.
[Test Plan]
1. Install the OpenAFS client using the command `sudo apt install openafs-client`.
2. Load the kernel module by running `sudo modprobe --verbose openafs`.
3. Confirm that the module loads successfully without any errors.
[Where problems could occur]
The patch removed the weak attribute from key_type_keyring.
Previously, commit #4ca66112c2 (linux-
If the patch causes a regression, it might prevent the openafs module from being installed successfully.
Debdiff for Focal