kernel version detection in module build

Bug #1327619 reported by Hauke on 2014-06-07
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
linux (Ubuntu)
Low
Andy Whitcroft
Lucid
Low
Unassigned
Precise
Low
Unassigned
Trusty
Low
Unassigned
Utopic
Low
Andy Whitcroft

Bug Description

When building an external kernel module against an Ubuntu kernel it would help to be able to include some special code for some specific Ubuntu kernel version.

I want to ship a kernel module in source code which the user should be able to compile against mainline kernels and various distribution kernels like the Ubuntu kernel, it would help if there is some way to identify the version of the Ubuntu kernel.

To identify the kernel version it creates a file in include/generated/uapi/linux/version.h and then I can use something like:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)
/* some code */
#else
/* some code */
#endif

The problem is that your kernel is not 100% API compatible with the mainline kernel and in some cases such a detection is also needed based on the Ubuntu kernel version used.

RedHat extended this file with some version information about the RHEL kernel in use:

#define LINUX_VERSION_CODE 132640
#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
#define RHEL_MAJOR 6
#define RHEL_MINOR 5
#define RHEL_RELEASE_VERSION(a,b) (((a) << 8) + (b))
#define RHEL_RELEASE_CODE 1541
#define RHEL_RELEASE "430"

I would like to see something like this also in the Ubuntu kernel (e.g. 3.13.0-27-generic) and in the long term kernel versions (e.g. 3.13.11.2) provided by Canonical.

My current problem is that I do not know if the kernel I am compiling against has this backport in or not:
http://kernel.ubuntu.com/git?p=ubuntu/ubuntu-trusty.git;a=commitdiff;h=f4c342cdce8acfaef2d89a800bb6a10128d802c8

Adding some version to the kernel will help the backports project. https://backports.wiki.kernel.org/

This problem effects at least trusty, but probably all versions, having such a feature in Debian would also be nice, but I have not checked. SLES already has a similar feature.

This bug is missing log files that will aid in diagnosing the problem. From a terminal window please run:

apport-collect 1327619

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
tags: added: trusty
Andy Whitcroft (apw) wrote :

Ignore the bot. We have what we need. Will discuss with stable as well.

Changed in linux (Ubuntu):
assignee: nobody → Andy Whitcroft (apw)
importance: Undecided → Low
status: Incomplete → In Progress
Adam Conrad (adconrad) wrote :

I'm guessing parsing this wouldn't be particularly ideal, and having something more macro-friendly would be better?

include/generated/utsrelease.h:#define UTS_RELEASE "3.15.0-5-generic"

Hauke (hauke-m) wrote :

I saw that, but I am unable to parse this in the C preprocessor.

I could do something like this:

#if UTS_RELEASE == "3.15.0-5-generic"
/* some code */
#else
/some code */
#endif

but that does not scale.

Having something like:

#define UTS_RELEASE_MINOR 5

would help, the rest is already in include/generated/uapi/linux/version.h

Tim Gardner (timg-tpi) on 2014-06-16
Changed in linux (Ubuntu Trusty):
status: New → In Progress
Tim Gardner (timg-tpi) wrote :

Hauke - we ultimately ended up adding UTS_UBUNTU_RELEASE_ABI to include/generated/utsrelease.h

Changed in linux (Ubuntu Trusty):
status: In Progress → Fix Committed
Changed in linux (Ubuntu Utopic):
status: In Progress → Fix Committed
tags: added: patch
Luis Henriques (henrix) wrote :

This bug is awaiting verification that the kernel in -proposed solves the problem. Please test the kernel and update this bug with the results. If the problem is solved, change the tag 'verification-needed-trusty' to 'verification-done-trusty'.

If verification is not done by 5 working days from today, this fix will be dropped from the source code, and this bug will be closed.

See https://wiki.ubuntu.com/Testing/EnableProposed for documentation how to enable and use -proposed. Thank you!

tags: added: verification-needed-trusty
Launchpad Janitor (janitor) wrote :

This bug was fixed in the package linux - 3.16.0-3.8

---------------
linux (3.16.0-3.8) utopic; urgency=low

  [ Tim Gardner ]

  * Release Tracking Bug
    - LP: #1340091
 -- Tim Gardner <email address hidden> Thu, 10 Jul 2014 10:06:47 +0100

Changed in linux (Ubuntu Utopic):
status: Fix Committed → Fix Released
Launchpad Janitor (janitor) wrote :
Download full text (35.8 KiB)

This bug was fixed in the package linux - 3.13.0-32.57

---------------
linux (3.13.0-32.57) trusty; urgency=low

  [ Upstream Kernel Changes ]

  * l2tp: Privilege escalation in ppp over l2tp sockets
    - LP: #1341472
    - CVE-2014-4943

linux (3.13.0-32.56) trusty; urgency=low

  [ Luis Henriques ]

  * Merged back Ubuntu-3.13.0-30.55 security release
  * Revert "x86_64,ptrace: Enforce RIP <= TASK_SIZE_MAX (CVE-2014-4699)"
    - LP: #1337339
  * Release Tracking Bug
    - LP: #1338524

  [ Upstream Kernel Changes ]

  * ptrace,x86: force IRET path after a ptrace_stop()
    - LP: #1337339
    - CVE-2014-4699
  * hpsa: add new Smart Array PCI IDs (May 2014)
    - LP: #1337516

linux (3.13.0-31.55) trusty; urgency=low

  [ Luis Henriques ]

  * Release Tracking Bug
    - LP: #1336278

  [ Andy Whitcroft ]

  * [Config] switch hyper-keyboard to virtual
    - LP: #1325306
  * [Packaging] linux-udeb-flavour -- standardise on linux prefix

  [ dann frazier ]

  * [Config] CONFIG_GPIO_DWAPB=m
    - LP: #1334823

  [ Feng Kan ]

  * SAUCE: (no-up) arm64: dts: Add Designware GPIO dts binding to APM
    X-Gene platform
    - LP: #1334823

  [ John Johansen ]

  * SAUCE: (no-up) apparmor: fix apparmor spams log with warning message
    - LP: #1308761

  [ Kamal Mostafa ]

  * [Config] updateconfigs ACPI_PROCFS_POWER=y after v3.13.11.4 rebase

  [ Loc Ho ]

  * SAUCE: (no-up) phy-xgene: Use correct tuning for Mustang
    - LP: #1335636

  [ Michael Ellerman ]

  * SAUCE: (no-up) powerpc/perf: Ensure all EBB register state is cleared
    on fork()
    - LP: #1328914

  [ Ming Lei ]

  * Revert "SAUCE: (no-up) rtc: Add X-Gene SoC Real Time Clock Driver"
    - LP: #1274305

  [ Suman Tripathi ]

  * SAUCE: (no-up) libahci: Implement the function ahci_restart_engine to
    restart the port dma engine.
    - LP: #1335645
  * SAUCE: (no-up) ata: Fix the dma state machine lockup for the IDENTIFY
    DEVICE PIO mode command.
    - LP: #1335645

  [ Tim Gardner ]

  * [Config] CONFIG_POWERNV_CPUFREQ=y for powerpc, ppc64el
    - LP: #1324571
  * [Debian] Add UTS_UBUNTU_RELEASE_ABI to utsrelease.h
    - LP: #1327619
  * [Config] CONFIG_HAVE_MEMORYLESS_NODES=y
    - LP: #1332063
  * [Config] CONFIG_HID_RMI=m
    - LP: #1305522

  [ Upstream Kernel Changes ]

  * Revert "offb: Add palette hack for little endian"
    - LP: #1333430
  * Revert "net: mvneta: fix usage as a module on RGMII configurations"
    - LP: #1333837
  * Revert "USB: serial: add usbid for dell wwan card to sierra.c"
    - LP: #1333837
  * Revert "macvlan : fix checksums error when we are in bridge mode"
    - LP: #1333838
  * serial: uart: add hw flow control support configuration
    - LP: #1328295
  * mm/numa: Remove BUG_ON() in __handle_mm_fault()
    - LP: #1323165
  * Tools: hv: Handle the case when the target file exists correctly
    - LP: #1306215
  * Documentation/devicetree/bindings: add documentation for the APM X-Gene
    SoC RTC DTS binding
    - LP: #1274305
  * drivers/rtc: add APM X-Gene SoC RTC driver
    - LP: #1274305
  * arm64: add APM X-Gene SoC RTC DTS entry
    - LP: #1274305
  * powerpc/perf: Add Power8 cache & TLB events
    - LP: #1328914
  * powerpc/perf: Configure BH...

Changed in linux (Ubuntu Trusty):
status: Fix Committed → Fix Released
Hauke (hauke-m) wrote :

Thanks for adding this, now I am able to automatically detect the version. It would sill be better if this define would be in include/generated/uapi/linux/version.h and not in include/generated/utsrelease.h, because utsrelease.h is not there in non ubuntu kernel and then an include <generated/utsrelease.h> will fail, but I can include <linux/vermagic.h> which again includes <generated/utsrelease.h> to circumvent this problem.

Instead of adding the ubuntu kernel version it would be better to add the EXTRAVERSION, then this would also work for the kernel versions you provide longterm support for.

Andy Whitcroft (apw) on 2014-11-19
Changed in linux (Ubuntu Trusty):
importance: Undecided → Low
Changed in linux (Ubuntu Precise):
importance: Undecided → Low
Changed in linux (Ubuntu Lucid):
importance: Undecided → Low
tags: removed: verification-needed-trusty
Rolf Leggewie (r0lf) wrote :

lucid has seen the end of its life and is no longer receiving any updates. Marking the lucid task for this ticket as "Won't Fix".

Changed in linux (Ubuntu Lucid):
status: New → Won't Fix
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers