← Back to team overview

debcrafters-packages team mailing list archive

[Bug 2113961] Re: [MIR] util-linux

 

Re-review for src:util-linux

[Summary]
The util-linux is a suite of essential Linux system maintenance utilities. It contains many basic utilities used for setting up partitions and basic system infrastructure on a Linux system. It is for expert users only.

This is a re-review of src:util-linux, which has always been in main.

Since the CVE history is significant, I will request ubuntu-security
requesting a "re-review".

Notes:
#0 Out of the 25 binary packages, 22 are in main. Binary packages currently not in main: bin:util-linux-extra, bin:libpam-lastlog2, bin:libpam-lastlog2

Required TODOs: None

Recommended TODOs:
#1 Consider resolving lintian warnings, most of them are related to man-pages.
#2 Consider addressing the upstream compiler and linker warnings.

[Rationale, Duplication and Ownership]
OK:
 - There is no other package in main providing the same functionality.
   => This package is already in `main`. 
 - A team is committed to own long term maintenance of this package.
   => Debcrafters packages
 
[Dependencies]
OK:
- no other Dependencies to MIR due to this
  - src:util-linux checked with check-mir
- all dependencies can be found in `seeded-in-ubuntu` (already in main)
- none of the (potentially auto-generated) dependencies (Depends and Recommends) that are present after build are not in main
- no -dev/-debug/-doc packages that need exclusion
- No dependencies in main that are only superficially tested requiring more tests now.

[Embedded sources and static linking]
OK:
- no embedded source present
- no static linking
- not a go package, no extra constraints to consider in that regard
- not a rust package, no extra constraints to consider in that regard
- Does not include vendor-ed code

Problems: none

[Security]
OK:
 - does not run a daemon as root
   => ldattach runs as current user/group, uuidd runs as uuidd/uuidd
 - does not use webkit1,2
 - does not use lib*v8 directly
 - does not parse data formats (files [images, video, audio,
   xml, json, asn.1], network packets, structures, ...) from
   an untrusted source.
 - does not expose any external endpoint (port/socket/... or similar)
 - does not process arbitrary web content
 - does not use centralized online accounts
 - does not integrate arbitrary javascript into the desktop
 - binaries related to system authentication: su, sulogin, runuser, login
 - does not deal with security attestation
 - does not deal with cryptography (en-/decryption, certificates, signing, ...)
   => mcookie is only used to generate 128-bit Xauth tokens
 - this makes appropriate (for its exposure) use of established risk 
   mitigation features (dropping permissions, using temporary environments,
   restricted users/groups, seccomp, systemd isolation features,
   apparmor, ...)
   => These are core system utilities. However, some of them like umount, eject, swapon do
   seem to drop permissions for certain sub-tasks.
 
 Problems:
 - has a significant history of CVEs
   => https://security-tracker.debian.org/tracker/source-package/util-linux

[Common blockers]
OK:
- does not FTBFS currently
- does have a test suite that runs at build time
  - test suite fails will fail the build upon error.
- does have a non-trivial test suite that runs as autopkgtest
- This does not need special HW for build or test
- no new python2 dependency
- not a Python package
- not a Go package

[Packaging red flags]
OK:
- Ubuntu does carry a delta, but it is reasonable and maintenance under control
- symbols tracking is in place.
- debian/watch is present and looks ok
- Upstream update history is good
- Debian/Ubuntu update history is good
- the latest upstream version (2.41) has been packaged
- this package is already in main
- no massive Lintian warnings
- debian/rules is rather clean
- It is not on the lto-disabled list

Problems:
- Lintian warnings
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/eject-udeb.install]
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/libblkid1-udeb.install]
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/libblkid1.install]
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/libfdisk-dev.install]
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/libfdisk1-udeb.install]
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/libfdisk1.install]
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/liblastlog2-2.install]
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/libmount-dev.install]
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/libmount1-udeb.install]
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/libmount1.install]
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/libsmartcols-dev.install]
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/libsmartcols1-udeb.install]
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/libsmartcols1.install]
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/libuuid1-udeb.install]
W: util-linux source: dh-exec-script-without-dh-exec-features [debian/libuuid1.install]
W: libblkid-dev: groff-message troff:<standard input>:10: warning: macro 'Aq' not defined [usr/share/man/man3/libblkid.3.gz:1]
W: liblastlog2-dev: groff-message troff:<standard input>:10: warning: macro 'Aq' not defined [usr/share/man/man3/lastlog2.3.gz:1]
W: liblastlog2-dev: groff-message troff:<standard input>:10: warning: macro 'Aq' not defined [usr/share/man/man3/ll2_import_lastlog.3.gz:1]
W: liblastlog2-dev: groff-message troff:<standard input>:10: warning: macro 'Aq' not defined [usr/share/man/man3/ll2_read_all.3.gz:1]
W: liblastlog2-dev: groff-message ... use "--tag-display-limit 0" to see all (or pipe to a file/program)
W: login: groff-message troff:<standard input>:10: warning: macro 'Aq' not defined [usr/share/man/fr/man1/login.1.gz:1]
W: util-linux-locales: groff-message troff:<standard input>:10: warning: macro 'Aq' not defined [usr/share/man/fr/man1/fallocate.1.gz:1]
W: util-linux-locales: groff-message troff:<standard input>:10: warning: macro 'Aq' not defined [usr/share/man/fr/man1/getopt.1.gz:1]
W: util-linux-locales: groff-message troff:<standard input>:10: warning: macro 'Aq' not defined [usr/share/man/fr/man1/ionice.1.gz:1]
W: util-linux-locales: groff-message ... use "--tag-display-limit 0" to see all (or pipe to a file/program)
W: uuid-dev: groff-message troff:<standard input>:10: warning: macro 'Aq' not defined [usr/share/man/man3/uuid.3.gz:1]
W: uuid-dev: groff-message troff:<standard input>:10: warning: macro 'Aq' not defined [usr/share/man/man3/uuid_clear.3.gz:1]
W: uuid-dev: groff-message troff:<standard input>:10: warning: macro 'Aq' not defined [usr/share/man/man3/uuid_compare.3.gz:1]
W: uuid-dev: groff-message ... use "--tag-display-limit 0" to see all (or pipe to a file/program)


[Upstream red flags]
OK:
 - no incautious use of malloc/sprintf
   => xmalloc() mostly used, all malloc() uses guarded with NULL checks
   => asprintf/xasprintf used instead of asprintf
 - no use of sudo, gksu, pkexec, or LD_LIBRARY_PATH (usage is OK inside tests)
 - no use of user 'nobody' outside of tests
 - use of setuid()/setgid()
   => these are core system utilities, setuid/setgid used to drop permissions, used in setpriv, mount etc.
 - This package has quite a few open bug reports. However, it is a core utilities package and upstream is very active.
 - no dependency on webkit, qtwebkit or libseed
 - translations present
 
Problems:
 - Quite a few upstream build warnings (compiler and linker)

login-utils/login.c:737:13: warning: ‘log_utmp’ defined but not used [-Wunused-function]
  737 | static void log_utmp(struct login_context *cxt)
      |             ^~~~~~~~
login-utils/login.c:601:13: warning: ‘log_btmp’ defined but not used [-Wunused-function]
  601 | static void log_btmp(struct login_context *cxt)
      |             ^~~~~~~~
login-utils/login.c:357:13: warning: ‘motd’ defined but not used [-Wunused-function]
  357 | static void motd(void)

disk-utils/fdisk-menu.c: In function 'geo_menu_cb':
disk-utils/fdisk-menu.c:1071:23: warning: 'a' may be used uninitialized [-Wmaybe-uninitialized]
 1071 |                 rc =  fdisk_ask_number(cxt, i, fdisk_get_geom_heads(cxt),
      |                       ^
disk-utils/fdisk-menu.c:1069:33: note: 'a' was declared here
 1069 |                 unsigned int i, a;
      |                                 ^
disk-utils/fdisk-menu.c:1071:23: warning: 'i' may be used uninitialized [-Wmaybe-uninitialized]
 1071 |                 rc =  fdisk_ask_number(cxt, i, fdisk_get_geom_heads(cxt),
      |                       ^
disk-utils/fdisk-menu.c:1069:30: note: 'i' was declared here
 1069 |                 unsigned int i, a;
      |                              ^
disk-utils/fdisk-menu.c:1077:23: warning: 'ma' may be used uninitialized [-Wmaybe-uninitialized]
 1077 |                 rc =  fdisk_ask_number(cxt, mi, fdisk_get_geom_sectors(cxt),
      |                       ^
disk-utils/fdisk-menu.c:1050:28: note: 'ma' was declared here
 1050 |         fdisk_sector_t mi, ma;
      |                            ^
disk-utils/fdisk-menu.c:1077:23: warning: 'mi' may be used uninitialized [-Wmaybe-uninitialized]
 1077 |                 rc =  fdisk_ask_number(cxt, mi, fdisk_get_geom_sectors(cxt),
      |                       ^
disk-utils/fdisk-menu.c:1050:24: note: 'mi' was declared here
 1050 |         fdisk_sector_t mi, ma;
      |                        ^
      
Linker warnings:
usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/14/../../../x86_64-linux-gnu/libreadline.a(complete.o): in function `rl_username_completion_function':
(.text+0x4dd1): warning: Using 'getpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: (.text+0x4dc8): warning: Using 'setpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: (.text+0x4e69): warning: Using 'endpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/14/../../../x86_64-linux-gnu/libreadline.a(tilde.o): in function `tilde_expand_word':
(.text+0x165): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/14/../../../x86_64-linux-gnu/libreadline.a(shell.o): in function `sh_get_home_dir':
(.text+0x169): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/14/../../../x86_64-linux-gnu/libreadline.a(complete.o): in function `rl_username_completion_function':
(.text+0x4dd1): warning: Using 'getpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: (.text+0x4dc8): warning: Using 'setpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/14/../../../x86_64-linux-gnu/libreadline.a(shell.o): in function `sh_get_home_dir':
(.text+0x19a): warning: Using 'endpwent' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/14/../../../x86_64-linux-gnu/libreadline.a(tilde.o): in function `tilde_expand_word':
(.text+0x165): warning: Using 'getpwnam' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/14/../../../x86_64-linux-gnu/libreadline.a(shell.o): in function `sh_get_home_dir':
(.text+0x169): warning: Using 'getpwuid' in statically linked applications requires at runtime the shared libraries from the glibc version used for linking

** Changed in: util-linux (Ubuntu)
     Assignee: Pushkar Kulkarni (pushkarnk) => Ubuntu Security Team (ubuntu-security)

-- 
You received this bug notification because you are a member of
Debcrafters packages, which is subscribed to util-linux in Ubuntu.
https://bugs.launchpad.net/bugs/2113961

Title:
  [MIR] util-linux

Status in util-linux package in Ubuntu:
  New

Bug description:
  [Availability]
  The package src:util-linux is already in Ubuntu main.
  The package src:util-linux build for the architectures it is designed to work on.
  It currently builds and works for architectures: amd64, arm64, armhf, i386, ppc64el, riscv64, s390x
  Link to package https://launchpad.net/ubuntu/+source/util-linux

  [Rationale]

  See previous rational below for what actually sparked this MIR.
  Now that `bin:liblastlog2-2` has been promoted and everything is unblocked, the
  rationale becomes as simple as an ask for a re-review for one of the `Essential`
  packages, shipping, among other things, a few `suid` binaries in absolutely
  every form Ubuntu can take.
  https://canonical-ubuntu-project.readthedocs-hosted.com/MIR/mir-rereview/#opt-in-re-review

  Original rationale:
  Okay, it seems the MIR template doesn't apply well for this use-case, because
  it more or less assumes that the MIR is about a source package that is currently
  in universe. In the current situation, only an existing binary package needs to be
  promoted, from a source package already in main. I'll do my best to adapt the
  template and provide a good rational.

  - bin:liblastlog2-2 is provided by src:util-linux, and was already there in
    plucky/universe.
  - The package src:util-linux is generally useful for a large part of
    our user base: it provides the bin:util-linux package, that is even flagged as
    `Essential: yes`.
    This is the package providing, among many other things, the `su`, `fsck`,
    `flock`, or `mkswap` binaries, all mostly essential to any system (random
    selection of important commands to give a quick example).
  - The package bin:liblastlog2-2 is a new runtime dependency of package
    bin:util-linux that we already support.
  - The binary packages liblastlog2-2 needs to be in main to have the latest merge
    of util-linux migrate from questing-proposed to questing.
  - All other binary packages currently in universe built by src:util-linux should
    remain in universe.
  - The package bin:liblastlog2-2 is required in Ubuntu main no later than
    somewhere in July due to some partners requiring patches to be SRU'd to Noble,
    and thus needing the package to migrate from -proposed (even though it's not a
    hard block from the SRU team, according to what I've red on Matrix recently).

  [Security]
  - Obviously, util-linux has had some security issues in the past (although not
    that much):
    - https://ubuntu.com/security/cves?package=util-linux
    - https://security-tracker.debian.org/tracker/source-package/util-linux
  - Those issues seems to be handled correctly in both Ubuntu and Debian:
    - https://ubuntu.com/security/CVE-2024-28085
    - https://security-tracker.debian.org/tracker/CVE-2024-28085
    - https://security-tracker.debian.org/tracker/CVE-2021-37600

  - There are countless binaries in sbin, but I'm fairly confident taking them out
    is a big plan of its own to still have a working system.
  - There are just a couple systemd units:
    - fstrim.{service,timer}: Discard unused filesystem blocks once a week
    - lastlog2-import.service: Import lastlog data into lastlog2 database - run
      only once in some particular situations to handle a data migration

  - About common isolation/risk-mitigation:
    - I'm not sure anything in util-linux is opening privileged ports.
    - I know some binaries are dropping privileges.
    - Going much further on that topic would be a full audit, for which I
      unfortunately don't really have time and competency for. I hope that's okay.

  - Packages does not contain extensions to security-sensitive software
  (filters, scanners, plugins, UI skins, ...)

  [Quality assurance - function/usage]
  - The package works well right after install

  [Quality assurance - maintenance]
  - The package is maintained well in Debian/Ubuntu/Upstream and does
    not have too many, long-term & critical, open bugs
    - Ubuntu https://bugs.launchpad.net/ubuntu/+source/util-linux/+bugs?orderby=-importance&start=0
    - Debian https://bugs.debian.org/cgi-bin/pkgreport.cgi?src=util-linux
    - Upstream https://github.com/util-linux/util-linux/issues
    - Obviously this package has tons of bugs opened, but at the same time, it has
      a lot of activity, and is well maintained upstream, in Debian, and in
      Ubuntu, just because of its central position in any Linux system.
  - The package does not deal with exotic hardware we cannot support

  [Quality assurance - testing]
  - The package runs a test suite on build time, if it fails
    it makes the build fail, link to build log TBD
  - The package runs an autopkgtest, and is currently passing on
    all architectures but i386: https://autopkgtest.ubuntu.com/packages/util-linux
  - The package does have not failing autopkgtests right now

  [Quality assurance - packaging]
  - debian/watch is present and works
  - debian/control defines a correct Maintainer field

  - This package does not yield massive lintian Warnings, Errors
  - Recent build: https://launchpad.net/ubuntu/+source/util-linux/2.41-4ubuntu2/+build/30908305
  - Lintian overrides are present, but ok because most are well commented, and the rest is pretty obvious, like highly privileged binaries.

  - This package does not rely on obsolete or about to be demoted
  packages.

  - The package will be installed by default, but does not ask debconf
    questions higher than medium

  - Packaging is quite complex, but I'm not sure how much of a choice we have.
    Good thing is that this package is equally important in Debian, so it will very
    likely keep being maintained.

  [UI standards]
  - Application is end-user facing, Translation is present, via standard
    intltool/gettext. See `configure` for `libintl` and `gettext`.

  - End-user applications without desktop file, not needed because it only ships
  CLI tools.

  [Dependencies]
  - No further depends or recommends dependencies that are not yet in main

  [Standards compliance]
  - This package correctly follows FHS and Debian Policy.

  [Maintenance/Owner]
  - The owning team will be debcrafters-packages and I have their acknowledgement for
    that commitment
  - The future owning team is already subscribed to the package.

  - This does not use static builds.
  - This does not use vendored code
  - This package is not rust based

  - The package has been built within the last 3 months in the archive
  - Build link on launchpad: https://launchpad.net/ubuntu/+source/util-linux/2.41-4ubuntu2

  [Background information]
  The Package description explains the package well
  Upstream Name is `util-linux`
  Link to upstream project: https://github.com/util-linux/util-linux/

  This package has been in main since the very early beginning of Ubuntu, so never
  got the chance to get a proper MIR.
  This was sparked when the `bin:util-linux` has started to depend on
  `bin:liblastlog2-2`, which was in Universe. `liblastlog2-2` was nicely
  handled by @paelzer under the "Renamed or re-organized sources" condition.
  This MIR still makes sense to me, given that `util-linux` provides many
  very important binaries, among which many of them are `suid`, and is one the
  `Essential` packages shipped in absolutely every form Ubuntu can take.

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/util-linux/+bug/2113961/+subscriptions



References