linux-libc-dev and libc6-dev do not agree who owns fsconfig_command

Bug #1985956 reported by Christian Ehrhardt 
12
This bug affects 1 person
Affects Status Importance Assigned to Milestone
glibc (Ubuntu)
Fix Released
Undecided
Unassigned
libvirt (Ubuntu)
New
Undecided
Unassigned
linux (Ubuntu)
Confirmed
Undecided
Unassigned

Bug Description

Right now in kinetic-proposed builds are failing due to both sets of headers defining fsconfig_command.

(kinetic-amd64)root@Keschdeichel:/build/libvirt-LTnG76/libvirt-8.6.0/debian/build# apt-cache policy libc6-dev linux-libc-dev
libc6-dev:
  Installed: 2.36-0ubuntu1
  Candidate: 2.36-0ubuntu1
  Version table:
 *** 2.36-0ubuntu1 500
        500 http://archive.ubuntu.com/ubuntu kinetic-proposed/main amd64 Packages
        100 /var/lib/dpkg/status
     2.35-0ubuntu3 500
        500 http://archive.ubuntu.com/ubuntu kinetic/main amd64 Packages
linux-libc-dev:
  Installed: 5.19.0-15.15
  Candidate: 5.19.0-15.15
  Version table:
 *** 5.19.0-15.15 500
        500 http://archive.ubuntu.com/ubuntu kinetic-proposed/main amd64 Packages
        100 /var/lib/dpkg/status
     5.15.0-27.28 500
        500 http://archive.ubuntu.com/ubuntu kinetic/main amd64 Packages

Actually also with "just the kernel" from proposed this happens as in the past only:
  linux-libc-dev:amd64: /usr/include/linux/mount.h
included that struct.

File ownership
$ dpkg -S /usr/include/x86_64-linux-gnu/sys/mount.h /usr/include/linux/mount.h
libc6-dev:amd64: /usr/include/x86_64-linux-gnu/sys/mount.h
linux-libc-dev:amd64: /usr/include/linux/mount.h

Example error from building libvirt:
In file included from /usr/include/linux/fs.h:19,
                 from ../../src/util/virfile.c:74:
/usr/include/linux/mount.h:95:6: error: redeclaration of 'enum fsconfig_command'
   95 | enum fsconfig_command {
      | ^~~~~~~~~~~~~~~~
In file included from ../../src/util/virfile.c:46:
/usr/include/x86_64-linux-gnu/sys/mount.h:189:6: note: originally defined here
  189 | enum fsconfig_command
      | ^~~~~~~~~~~~~~~~

Repro-test:
$ cat test.c
# include <sys/mount.h>
# include <linux/fs.h>

#include <stdio.h>

int main() {
   printf("Hello %d", FSCONFIG_SET_FLAG);
   return 0;
}

gcc test.c -o /dev/null
In file included from /usr/include/linux/fs.h:19,
                 from test.c:2:
/usr/include/linux/mount.h:95:6: error: redeclaration of 'enum fsconfig_command'
   95 | enum fsconfig_command {
      | ^~~~~~~~~~~~~~~~
In file included from test.c:1:
/usr/include/x86_64-linux-gnu/sys/mount.h:189:6: note: originally defined here
  189 | enum fsconfig_command
      | ^~~~~~~~~~~~~~~~
/usr/include/linux/mount.h:96:9: error: redeclaration of enumerator 'FSCONFIG_SET_FLAG'
   96 | FSCONFIG_SET_FLAG = 0, /* Set parameter, supplying no value */
      | ^~~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/sys/mount.h:191:3: note: previous definition of 'FSCONFIG_SET_FLAG' with type 'enum fsconfig_command'
  191 | FSCONFIG_SET_FLAG = 0, /* Set parameter, supplying no value */
      | ^~~~~~~~~~~~~~~~~
/usr/include/linux/mount.h:97:9: error: redeclaration of enumerator 'FSCONFIG_SET_STRING'
   97 | FSCONFIG_SET_STRING = 1, /* Set parameter, supplying a string value */
      | ^~~~~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/sys/mount.h:193:3: note: previous definition of 'FSCONFIG_SET_STRING' with type 'enum fsconfig_command'
  193 | FSCONFIG_SET_STRING = 1, /* Set parameter, supplying a string value */
      | ^~~~~~~~~~~~~~~~~~~
/usr/include/linux/mount.h:98:9: error: redeclaration of enumerator 'FSCONFIG_SET_BINARY'
   98 | FSCONFIG_SET_BINARY = 2, /* Set parameter, supplying a binary blob value */
      | ^~~~~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/sys/mount.h:195:3: note: previous definition of 'FSCONFIG_SET_BINARY' with type 'enum fsconfig_command'
  195 | FSCONFIG_SET_BINARY = 2, /* Set parameter, supplying a binary blob value */
      | ^~~~~~~~~~~~~~~~~~~
/usr/include/linux/mount.h:99:9: error: redeclaration of enumerator 'FSCONFIG_SET_PATH'
   99 | FSCONFIG_SET_PATH = 3, /* Set parameter, supplying an object by path */
      | ^~~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/sys/mount.h:197:3: note: previous definition of 'FSCONFIG_SET_PATH' with type 'enum fsconfig_command'
  197 | FSCONFIG_SET_PATH = 3, /* Set parameter, supplying an object by path */
      | ^~~~~~~~~~~~~~~~~
/usr/include/linux/mount.h:100:9: error: redeclaration of enumerator 'FSCONFIG_SET_PATH_EMPTY'
  100 | FSCONFIG_SET_PATH_EMPTY = 4, /* Set parameter, supplying an object by (empty) path */
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/sys/mount.h:199:3: note: previous definition of 'FSCONFIG_SET_PATH_EMPTY' with type 'enum fsconfig_command'
  199 | FSCONFIG_SET_PATH_EMPTY = 4, /* Set parameter, supplying an object by (empty) path */
      | ^~~~~~~~~~~~~~~~~~~~~~~
/usr/include/linux/mount.h:101:9: error: redeclaration of enumerator 'FSCONFIG_SET_FD'
  101 | FSCONFIG_SET_FD = 5, /* Set parameter, supplying an object by fd */
      | ^~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/sys/mount.h:201:3: note: previous definition of 'FSCONFIG_SET_FD' with type 'enum fsconfig_command'
  201 | FSCONFIG_SET_FD = 5, /* Set parameter, supplying an object by fd */
      | ^~~~~~~~~~~~~~~
/usr/include/linux/mount.h:102:9: error: redeclaration of enumerator 'FSCONFIG_CMD_CREATE'
  102 | FSCONFIG_CMD_CREATE = 6, /* Invoke superblock creation */
      | ^~~~~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/sys/mount.h:203:3: note: previous definition of 'FSCONFIG_CMD_CREATE' with type 'enum fsconfig_command'
  203 | FSCONFIG_CMD_CREATE = 6, /* Invoke superblock creation */
      | ^~~~~~~~~~~~~~~~~~~
/usr/include/linux/mount.h:103:9: error: redeclaration of enumerator 'FSCONFIG_CMD_RECONFIGURE'
  103 | FSCONFIG_CMD_RECONFIGURE = 7, /* Invoke superblock reconfiguration */
      | ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/x86_64-linux-gnu/sys/mount.h:205:3: note: previous definition of 'FSCONFIG_CMD_RECONFIGURE' with type 'enum fsconfig_command'
  205 | FSCONFIG_CMD_RECONFIGURE = 7, /* Invoke superblock reconfiguration */
      | ^~~~~~~~~~~~~~~~~~~~~~~~
/usr/include/linux/mount.h:129:8: error: redefinition of 'struct mount_attr'
  129 | struct mount_attr {
      | ^~~~~~~~~~
/usr/include/x86_64-linux-gnu/sys/mount.h:161:8: note: originally defined here
  161 | struct mount_attr
      | ^~~~~~~~~~

Revision history for this message
Christian Ehrhardt  (paelzer) wrote :

And something on arm64 already forces this, despite only being in -proposed.
For example if someone tries
  linux-libc-dev (<5.19.0-1),
to avoid this FTBFS for now that works on all other architectures (right now), but on arm64 gives me:
  Missing build dependencies: linux-libc-dev (<= 5.19.0-1)

So while both still exist:
 linux-libc-dev | 5.15.0-27.28 | kinetic | amd64, arm64, armhf, i386, ppc64el, riscv64, s390x
 linux-libc-dev | 5.19.0-15.15 | kinetic-proposed | amd64, arm64, armhf, i386, ppc64el, riscv64, s390x
Probably some other dependency makes this non-avoidable for now.

Revision history for this message
Ubuntu Kernel Bot (ubuntu-kernel-bot) wrote : Missing required logs.

This bug is missing log files that will aid in diagnosing the problem. While running an Ubuntu kernel (not a mainline or third-party kernel) please enter the following command in a terminal window:

apport-collect 1985956

and then change the status of the bug to 'Confirmed'.

If, due to the nature of the issue you have encountered, you are unable to run this command, please add a comment stating that fact and change the bug status to 'Confirmed'.

This change has been made by an automated script, maintained by the Ubuntu Kernel Team.

Changed in linux (Ubuntu):
status: New → Incomplete
Revision history for this message
Michael Hudson-Doyle (mwhudson) wrote :
Revision history for this message
Christian Ehrhardt  (paelzer) wrote :

Since this happens on build and not on a target system, I'll mark it confirmed without providing the data that the Kernel bot asks for.

Changed in linux (Ubuntu):
status: Incomplete → Confirmed
tags: added: update-excuse
Revision history for this message
Christian Ehrhardt  (paelzer) wrote :

FYI: Adding libvirt here and marking it as update-excuse, so that the to-be-expected FTBFS can be understood.

Once fixed in either package I can hit rebuild and move on through migration.
It built fine on a PPA overriding this problem in an ugly way and otherwise than this build issue here works fine through all tests.

Revision history for this message
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package glibc - 2.36-0ubuntu2

---------------
glibc (2.36-0ubuntu2) kinetic; urgency=medium

  * Add patches to fix build with GCC 12:
    - d/patches/0001-Avoid-undefined-behaviour-in-ibm128-implementation-o.patch
    - d/patches/0001-Ensure-calculations-happen-with-desired-rounding-mod.patch
    - d/patches/0001-Fix-BZ-29463-in-the-ibm128-implementation-of-y1l-too.patch
  * Switch back to building with the default GCC (i.e. 12)
  * Add patches to fix incompatibility between kernel and glibc mount.h
    headers (LP: #1985956):
    - d/patches/0001-glibcextract.py-Add-compile_c_snippet.patch
    - d/patches/0003-linux-Mimic-kernel-defition-for-BLOCK_SIZE.patch
    - d/patches/0004-linux-Use-compile_c_snippet-to-check-linux-mount.h-a.patch
    - d/patches/0005-linux-Fix-sys-mount.h-usage-with-kernel-headers.patch
    - d/patches/0006-Linux-Fix-enum-fsconfig_command-detection-in-sys-mou.patch
  * Add patch to restore DT_HASH tag/SHT_HASH section (see
    https://sourceware.org/bugzilla/show_bug.cgi?id=29456):
    - d/patches/restore-libc-DT_HASH.patch
  * Add nss/tst-reload2 to xfails as it fails in autopkgtests in check_prof
    run.

 -- Michael Hudson-Doyle <email address hidden> Mon, 22 Aug 2022 13:24:16 +1200

Changed in glibc (Ubuntu):
status: New → Fix Released
tags: removed: update-excuse
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.