Failed to insert openafs module on ARM platform: Exec format error

Bug #2077929 reported by Chengen Du
10
This bug affects 1 person
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/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 <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-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]
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.

Revision history for this message
Chengen Du (chengendu) wrote :

Debdiff for Focal

Changed in openafs (Ubuntu Focal):
assignee: nobody → Chengen Du (chengendu)
Changed in openafs (Ubuntu Jammy):
assignee: nobody → Chengen Du (chengendu)
Changed in openafs (Ubuntu Noble):
assignee: nobody → Chengen Du (chengendu)
Changed in openafs (Ubuntu Oracular):
assignee: nobody → Chengen Du (chengendu)
Revision history for this message
Chengen Du (chengendu) wrote :

Debdiff for Jammy

Revision history for this message
Chengen Du (chengendu) wrote :

Debdiff for Noble

Revision history for this message
Chengen Du (chengendu) wrote :

Debdiff for Oracular

Changed in openafs (Ubuntu Focal):
status: New → In Progress
Changed in openafs (Ubuntu Jammy):
status: New → In Progress
Changed in openafs (Ubuntu Noble):
status: New → In Progress
Changed in openafs (Ubuntu Oracular):
status: New → In Progress
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.