[Bug 2077929] Re: Failed to insert openafs module on ARM platform: Exec format error
Mauricio Faria de Oliveira
2077929 at bugs.launchpad.net
Thu Sep 5 13:00:48 UTC 2024
Andreas, good point; thanks for raising it. I have updated the test plan
accordingly.
** Description changed:
[Impact]
The openafs module cannot be installed on the ARM platform, resulting in the following error:
- insmod /lib/modules/6.5.0-1025-gcp/updates/dkms/openafs.ko
+ insmod /lib/modules/6.5.0-1025-gcp/updates/dkms/openafs.ko
modprobe: ERROR: could not insert 'openafs': Exec format error
[Fix]
There is an upstream commit that addresses this issue:
commit 2f260825b96b76556aba82fc364c841357a23a7d
Author: Cheyenne Wills <cwills at sinenomine.net>
Date: Thu Mar 28 12:51:46 2024 -0400
- Linux: Remove weak attribute for key_type_keyring
+ 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-updated-20080310' (b7fb842b1c)
- as a way to detect if the symbol was exported by the Linux kernel. A
- later commit: 'linux-keyring-export-check-20090701' (4ca66112c2)
- introduced an autoconf test that eliminated the need for using the weak
- attribute, but the commit did not remove the attribute.
+ 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-updated-20080310' (b7fb842b1c)
+ as a way to detect if the symbol was exported by the Linux kernel. A
+ later commit: 'linux-keyring-export-check-20090701' (4ca66112c2)
+ 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_type_keyring. Further investigation showed that this problem could
- occur with gcc-12 on a ARM64 system (see below for additional
- information).
+ 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_type_keyring. Further investigation showed that this problem could
+ 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_type_keyring. When this symbol is exported by the Linux kernel, the
- loader would resolve the address and __key_type_keyring would contain
- the address. If the key_type_keyring symbol was not exported,
- __key_type_keyring would be set to NULL (due to the weak attribute
- associated with key_type_keyring).
+ The code in osi_groups.c uses a pointer, __key_type_keyring, to the
+ key_type_keyring. When this symbol is exported by the Linux kernel, the
+ loader would resolve the address and __key_type_keyring would contain
+ the address. If the key_type_keyring symbol was not exported,
+ __key_type_keyring would be set to NULL (due to the weak attribute
+ 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_KEY_TYPE_KEYRING is defined). When the symbol
- isn't exported (pre Linux 2.6.22), just set the pointer,
- __key_type_keyring to NULL.
+ Remove the weak attribute for key_type_keyring when the configure
+ test, introduced in the 4ca66112c2 commit, determines that the symbol
+ is exported (EXPORTED_KEY_TYPE_KEYRING is defined). When the symbol
+ isn't exported (pre Linux 2.6.22), just set the pointer,
+ __key_type_keyring to NULL.
- NOTE:
+ NOTE:
- The load error was reported on the openafs IRC channel by "clarkb"
+ 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
+ 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://github.com/NixOS/nixpkgs/issues/284501
+ https://github.com/NixOS/nixpkgs/issues/284501
- 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.
+ 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]
+
+ For _both_ arm64 and amd64,
+ And _both_ -generic and -cloud kernels
+ (to verify the improvement and no regressions):
+
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-keyring-export-check-20090701) introduced an autoconf test that made the weak attribute unnecessary, but the attribute was not removed at that time.
If the patch causes a regression, it might prevent the openafs module from being installed successfully.
--
You received this bug notification because you are a member of Ubuntu
Sponsors, which is subscribed to the bug report.
https://bugs.launchpad.net/bugs/2077929
Title:
Failed to insert openafs module on ARM platform: Exec format error
Status in openafs package in Ubuntu:
Fix Released
Status in openafs source package in Focal:
Won't Fix
Status in openafs source package in Jammy:
In Progress
Status in openafs source package in Noble:
In Progress
Status in openafs source package in Oracular:
Fix Released
Bug description:
[Impact]
The openafs module cannot be installed on the ARM platform, resulting in the following error:
insmod /lib/modules/6.5.0-1025-gcp/updates/dkms/openafs.ko
modprobe: ERROR: could not insert 'openafs': Exec format error
[Fix]
There is an upstream commit that addresses this issue:
commit 2f260825b96b76556aba82fc364c841357a23a7d
Author: Cheyenne Wills <cwills at sinenomine.net>
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-updated-20080310' (b7fb842b1c)
as a way to detect if the symbol was exported by the Linux kernel. A
later commit: 'linux-keyring-export-check-20090701' (4ca66112c2)
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_type_keyring. Further investigation showed that this problem could
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_type_keyring. When this symbol is exported by the Linux kernel, the
loader would resolve the address and __key_type_keyring would contain
the address. If the key_type_keyring symbol was not exported,
__key_type_keyring would be set to NULL (due to the weak attribute
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_KEY_TYPE_KEYRING is defined). When the symbol
isn't exported (pre Linux 2.6.22), just set the pointer,
__key_type_keyring to NULL.
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://github.com/NixOS/nixpkgs/issues/284501
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]
For _both_ arm64 and amd64,
And _both_ -generic and -cloud kernels
(to verify the improvement and no regressions):
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-keyring-export-check-20090701) introduced an autoconf test that made the weak attribute unnecessary, but the attribute was not removed at that time.
If the patch causes a regression, it might prevent the openafs module from being installed successfully.
To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/openafs/+bug/2077929/+subscriptions
More information about the Ubuntu-sponsors
mailing list