Bug 25909 - tst-support_descriptors fails when /dev and /dev/null are on different filesystems.
Summary: tst-support_descriptors fails when /dev and /dev/null are on different filesy...
Status: UNCONFIRMED
Alias: None
Product: glibc
Classification: Unclassified
Component: libc (show other bugs)
Version: 2.30
: P2 normal
Target Milestone: ---
Assignee: Not yet assigned to anyone
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-05-02 20:02 UTC by Sergei Trofimovich
Modified: 2020-05-02 20:06 UTC (History)
2 users (show)

See Also:
Host:
Target:
Build:
Last reconfirmed:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sergei Trofimovich 2020-05-02 20:02:45 UTC
Raw test failure:

# env GCONV_PATH=/var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/iconvdata LOCPATH=/var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/localedata LC_ALL=C   /var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/elf/ld-linux-aarch64.so.1 --library-path /var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl:/var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/math:/var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/elf:/var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/dlfcn:/var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/nss:/var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/nis:/var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/rt:/var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/resolv:/var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/mathvec:/var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/support:/var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/crypt:/var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/nptl::/var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl//dlfcn /var/tmp/portage/sys-libs/glibc-2.30-r8/work/build-arm64-aarch64-unknown-linux-gnu-nptl/support/tst-support_descriptors

info: initial descriptor set
info:  0: target="/dev/pts/4" major=0 minor=17 ino=7
info:  1: target="/dev/pts/4" major=0 minor=17 ino=7
info:  2: target="/dev/pts/4" major=0 minor=17 ino=7
info: descriptor set with additional free descriptor
info:  0: target="/dev/pts/4" major=0 minor=17 ino=7
info:  1: target="/dev/pts/4" major=0 minor=17 ino=7
info:  2: target="/dev/pts/4" major=0 minor=17 ino=7
info:  3: target="/dev/null" major=0 minor=6 ino=1030
info: BEGIN subprocess_closed_descriptor output
error: Differences found in descriptor set
Reference descriptor set:
  0: target="/dev/pts/4" major=0 minor=17 ino=7
  1: target="pipe:[535141268]" major=0 minor=10 ino=535141268
  2: target="pipe:[535141269]" major=0 minor=10 ino=535141269
  3: target="/dev/null" major=0 minor=6 ino=1030
Current descriptor set:
  0: target="/dev/pts/4" major=0 minor=17 ino=7
  1: target="pipe:[535141268]" major=0 minor=10 ino=535141268
  2: target="pipe:[535141269]" major=0 minor=10 ino=535141269
Differences:
error: descriptor 3 was closed
EOT
info: END subprocess_closed_descriptor output
info: BEGIN subprocess_opened_descriptor output
error: Differences found in descriptor set
Reference descriptor set:
  0: target="/dev/pts/4" major=0 minor=17 ino=7
  1: target="pipe:[535141270]" major=0 minor=10 ino=535141270
  2: target="pipe:[535141271]" major=0 minor=10 ino=535141271
Current descriptor set:
  0: target="/dev/pts/4" major=0 minor=17 ino=7
  1: target="pipe:[535141270]" major=0 minor=10 ino=535141270
  2: target="pipe:[535141271]" major=0 minor=10 ino=535141271
  3: target="/dev/null" major=0 minor=6 ino=1030
Differences:
error: descriptor 3 was opened ("/dev/null")
EOT
info: END subprocess_opened_descriptor output
info: BEGIN subprocess_changed_descriptor output
error: Differences found in descriptor set
Reference descriptor set:
  0: target="/dev/pts/4" major=0 minor=17 ino=7
  1: target="pipe:[535141272]" major=0 minor=10 ino=535141272
  2: target="pipe:[535141273]" major=0 minor=10 ino=535141273
  3: target="/dev/null" major=0 minor=6 ino=1030
Current descriptor set:
  0: target="/dev/pts/4" major=0 minor=17 ino=7
  1: target="pipe:[535141272]" major=0 minor=10 ino=535141272
  2: target="pipe:[535141273]" major=0 minor=10 ino=535141273
  3: target="/dev" major=8 minor=3 ino=8634469
Differences:
error: descriptor 3 changed from "/dev/null" to "/dev"
error: descriptor 3 changed device from 0:6 to 8:3
error: descriptor 3 changed ino from 1030 to 8634469
EOT
info: END subprocess_changed_descriptor output
error: tst-support_descriptors.c:141: not true: strstr (proc.out.buffer, expected) != NULL
info: descriptor set with sentinel descriptor
info:  0: target="/dev/pts/4" major=0 minor=17 ino=7
info:  1: target="/dev/pts/4" major=0 minor=17 ino=7
info:  2: target="/dev/pts/4" major=0 minor=17 ino=7
info:  4: target="/dev/full" major=0 minor=6 ino=1033
info: BEGIN subprocess_closed_descriptor output
error: Differences found in descriptor set
Reference descriptor set:
  0: target="/dev/pts/4" major=0 minor=17 ino=7
  1: target="pipe:[535141276]" major=0 minor=10 ino=535141276
  2: target="pipe:[535141277]" major=0 minor=10 ino=535141277
  3: target="/dev/null" major=0 minor=6 ino=1030
  4: target="/dev/full" major=0 minor=6 ino=1033
Current descriptor set:
  0: target="/dev/pts/4" major=0 minor=17 ino=7
  1: target="pipe:[535141276]" major=0 minor=10 ino=535141276
  2: target="pipe:[535141277]" major=0 minor=10 ino=535141277
  4: target="/dev/full" major=0 minor=6 ino=1033
Differences:
error: descriptor 3 was closed
EOT
info: END subprocess_closed_descriptor output
info: BEGIN subprocess_opened_descriptor output
error: Differences found in descriptor set
Reference descriptor set:
  0: target="/dev/pts/4" major=0 minor=17 ino=7
  1: target="pipe:[535141278]" major=0 minor=10 ino=535141278
  2: target="pipe:[535141279]" major=0 minor=10 ino=535141279
  4: target="/dev/full" major=0 minor=6 ino=1033
Current descriptor set:
  0: target="/dev/pts/4" major=0 minor=17 ino=7
  1: target="pipe:[535141278]" major=0 minor=10 ino=535141278
  2: target="pipe:[535141279]" major=0 minor=10 ino=535141279
  3: target="/dev/null" major=0 minor=6 ino=1030
  4: target="/dev/full" major=0 minor=6 ino=1033
Differences:
error: descriptor 3 was opened ("/dev/null")
EOT
info: END subprocess_opened_descriptor output
info: BEGIN subprocess_changed_descriptor output
error: Differences found in descriptor set
Reference descriptor set:
  0: target="/dev/pts/4" major=0 minor=17 ino=7
  1: target="pipe:[535141280]" major=0 minor=10 ino=535141280
  2: target="pipe:[535141281]" major=0 minor=10 ino=535141281
  3: target="/dev/null" major=0 minor=6 ino=1030
  4: target="/dev/full" major=0 minor=6 ino=1033
Current descriptor set:
  0: target="/dev/pts/4" major=0 minor=17 ino=7
  1: target="pipe:[535141280]" major=0 minor=10 ino=535141280
  2: target="pipe:[535141281]" major=0 minor=10 ino=535141281
  3: target="/dev" major=8 minor=3 ino=8634469
  4: target="/dev/full" major=0 minor=6 ino=1033
Differences:
error: descriptor 3 changed from "/dev/null" to "/dev"
error: descriptor 3 changed device from 0:6 to 8:3
error: descriptor 3 changed ino from 1030 to 8634469
EOT
info: END subprocess_changed_descriptor output
error: tst-support_descriptors.c:141: not true: strstr (proc.out.buffer, expected) != NULL
error: 12 test failures
Comment 1 Sergei Trofimovich 2020-05-02 20:06:19 UTC
AFAIU the main mismatch here is the following missing assert:

  expected = xasprintf (
    "\nDifferences:\n"
    "error: descriptor %d changed from \"/dev/null\" to \"/dev\"\n"
    "error: descriptor %d changed ino ",
    free_descriptor, free_descriptor);

while actual output is:

    error: descriptor 3 changed from "/dev/null" to "/dev"
    error: descriptor 3 changed device from 0:6 to 8:3
    error: descriptor 3 changed ino from 1030 to 8634469

Note: the extra 'error: descriptor 3 changed device from 0:6 to 8:3'.

It happens because my test environment populated /dev/ entries from another filesystem as:

    # mkdir chroot/dev/
    # mount --bind /dev/null chroot/dev/

# stat /dev
  File: /dev
  Size: 4096      	Blocks: 8          IO Block: 4096   directory
Device: 803h/2051d	Inode: 8634469     Links: 5
Access: (0755/drwxr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-05-02 10:07:21.166534333 +0000
Modify: 2020-05-02 10:07:14.646384106 +0000
Change: 2020-05-02 10:07:14.646384106 +0000
 Birth: -
# stat /dev/null
  File: /dev/null
  Size: 0         	Blocks: 0          IO Block: 4096   character special file
Device: 6h/6d	Inode: 1030        Links: 1     Device type: 1,3
Access: (0666/crw-rw-rw-)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2020-05-02 09:35:10.340194554 +0000
Modify: 2020-05-02 09:35:10.340194554 +0000
Change: 2020-05-02 09:35:10.340194554 +0000
 Birth: -

Note the device difference.

Would it be reasonable to tweak the test to search for:
- "error: descriptor %d changed from \"/dev/null\" to \"/dev\"\n"
- "error: descriptor %d changed ino "
strings independently to allow for optional device wibble?