Skip to content

Vanadis: Fix openat for containers - #2724

Closed
gvoskuilen wants to merge 1 commit into
sstsimulator:develfrom
gvoskuilen:vanadis_container_fix
Closed

gvoskuilen wants to merge 1 commit into
sstsimulator:develfrom
gvoskuilen:vanadis_container_fix

Conversation

@gvoskuilen

Copy link
Copy Markdown
Contributor

This fixes an issue where some vanadis tests would diff when run in containers.

@sst-autotester

Copy link
Copy Markdown
Contributor

Status Flag 'Pre-Test Inspection' - Auto Inspected - Inspection is Not Necessary for this Pull Request.

@sst-autotester

Copy link
Copy Markdown
Contributor

Status Flag 'Pull Request AutoTester' - Testing Jenkins Projects:

Pull Request Auto Testing STARTING (click to expand)

Build Information

Test Name: SST__Autotest_sst-test_OMPI-4.1.4_PY3.9_sst-elements

  • Build Num: 2878
  • Status: STARTED

Build Information

Test Name: SST__Autotest_sst-test_OMPI-4.1.4_PY3.9_sst-elements_Make-Dist

  • Build Num: 1626
  • Status: STARTED

Build Information

Test Name: SST__Autotest_sst-test_OMPI-4.1.4_PY3.9_sst-elements_MT-2

  • Build Num: 2816
  • Status: STARTED

Build Information

Test Name: SST__Autotest_sst-test_OMPI-4.1.4_PY3.9_sst-elements_MR-2

  • Build Num: 2817
  • Status: STARTED

Build Information

Test Name: SST__Autotest_OSX-15-XC16_OMPI-4.1.6_PY3.10_sst-elements

  • Build Num: 1351
  • Status: STARTED

Using Repos:

Repo: ELEMENTS (gvoskuilen/sst-elements)
  • Branch: vanadis_container_fix
  • SHA: 5a9b5b4
  • Mode: TEST_REPO
Repo: SQE (sstsimulator/sst-sqe)
  • Branch: devel
  • SHA: a9902f112b890a614e31e56f47c75c815804474f
  • Mode: SUPPORT_REPO
Repo: CORE (sstsimulator/sst-core)
  • Branch: devel
  • SHA: 09bc3927b1fc23e65f3aa0795739cad36f315d5a
  • Mode: SUPPORT_REPO
Repo: MACRO (sstsimulator/sst-macro)
  • Branch: devel
  • SHA: cd50ac2eb723b7fd3e78b02b65e3a7ba7250c618
  • Mode: SUPPORT_REPO

Pull Request Author: gvoskuilen

@sst-autotester

Copy link
Copy Markdown
Contributor

Status Flag 'Pull Request AutoTester' - Jenkins Testing: all Jobs PASSED

Pull Request Auto Testing has PASSED (click to expand)

Build Information

Test Name: SST__Autotest_sst-test_OMPI-4.1.4_PY3.9_sst-elements

  • Build Num: 2878
  • Status: PASSED

Build Information

Test Name: SST__Autotest_sst-test_OMPI-4.1.4_PY3.9_sst-elements_Make-Dist

  • Build Num: 1626
  • Status: PASSED

Build Information

Test Name: SST__Autotest_sst-test_OMPI-4.1.4_PY3.9_sst-elements_MT-2

  • Build Num: 2816
  • Status: PASSED

Build Information

Test Name: SST__Autotest_sst-test_OMPI-4.1.4_PY3.9_sst-elements_MR-2

  • Build Num: 2817
  • Status: PASSED

Build Information

Test Name: SST__Autotest_OSX-15-XC16_OMPI-4.1.6_PY3.10_sst-elements

  • Build Num: 1351
  • Status: PASSED

@sst-autotester

Copy link
Copy Markdown
Contributor

Status Flag 'Pre-Merge Inspection' - - This Pull Request Requires Inspection... The code must be inspected by a member of the Team before Testing/Merging
WARNING: NO REVIEWERS HAVE BEEN REQUESTED FOR THIS PULL REQUEST!

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However Inspection must be performed before merge can occur...

@gvoskuilen
gvoskuilen requested a review from berquist September 9, 2026 19:43
@sst-autotester

Copy link
Copy Markdown
Contributor

Status Flag 'Pre-Merge Inspection' - - This Pull Request Requires Inspection... The code must be inspected by a member of the Team before Testing/Merging
NO REVIEWS HAVE BEEN PERFORMED ON THIS PULL REQUEST!

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However Inspection must be performed before merge can occur...

5 similar comments
@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However Inspection must be performed before merge can occur...

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However Inspection must be performed before merge can occur...

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However Inspection must be performed before merge can occur...

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However Inspection must be performed before merge can occur...

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However Inspection must be performed before merge can occur...

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

14 similar comments
@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

2 similar comments
@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@berquist

berquist commented Oct 3, 2026

Copy link
Copy Markdown
Contributor

This is still causing a diff.

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

2 similar comments
@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@berquist

berquist commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

I'm investigating this. There are differences in the strace output when running on bare metal versus inside a container.

@berquist

berquist commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Here are strace results from with this PR. On the left is bare metal (with paths cleaned up) and on the right is inside a container. The container is built and run with the user as root. I'm not sure yet if the problem is as simple as using a non-root user, but that would be convenient.

diff --git bare_clean.log container.log
index 06ea8d2b2..948b65d64 100644
--- bare_clean.log
+++ container.log
@@ -1,52 +1,54 @@
-execve("./a.out", ["./a.out"], 0x7ffff6178118 /* 83 vars */) = 0
-brk(NULL)                               = 0x24aa000
-arch_prctl(0x3001 /* ARCH_??? */, 0x7fff1a469360) = -1 EINVAL (Invalid argument)
-mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fcbcbe0c000
+execve("./a.out", ["./a.out"], 0x7ffcfcc38198 /* 40 vars */) = 0
+brk(NULL)                               = 0x1854000
+arch_prctl(0x3001 /* ARCH_??? */, 0x7ffc6d423220) = -1 EINVAL (Invalid argument)
+mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdd5035d000
 access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
 openat(AT_FDCWD</code/sst-elements/src/sst/elements/vanadis/tests/small/basic-io/openat>, "/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3</etc/ld.so.cache>
-fstat(3</etc/ld.so.cache>, {st_mode=S_IFREG|0644, st_size=85495, ...}) = 0
-mmap(NULL, 85495, PROT_READ, MAP_PRIVATE, 3</etc/ld.so.cache>, 0) = 0x7fcbcbdf7000
+fstat(3</etc/ld.so.cache>, {st_mode=S_IFREG|0644, st_size=11071, ...}) = 0
+mmap(NULL, 11071, PROT_READ, MAP_PRIVATE, 3</etc/ld.so.cache>, 0) = 0x7fdd5035a000
 close(3</etc/ld.so.cache>)              = 0
 openat(AT_FDCWD</code/sst-elements/src/sst/elements/vanadis/tests/small/basic-io/openat>, "/lib64/libc.so.6", O_RDONLY|O_CLOEXEC) = 3</usr/lib64/libc-2.28.so>
 read(3</usr/lib64/libc-2.28.so>, "\177ELF\2\1\1\3\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0@\251\3\0\0\0\0\0"..., 832) = 832
 fstat(3</usr/lib64/libc-2.28.so>, {st_mode=S_IFREG|0755, st_size=2164744, ...}) = 0
 lseek(3</usr/lib64/libc-2.28.so>, 808, SEEK_SET) = 808
 read(3</usr/lib64/libc-2.28.so>, "\4\0\0\0\20\0\0\0\5\0\0\0GNU\0\2\0\0\300\4\0\0\0\3\0\0\0\0\0\0\0", 32) = 32
-mmap(NULL, 4020384, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3</usr/lib64/libc-2.28.so>, 0) = 0x7fcbcb809000
-mprotect(0x7fcbcb9d5000, 2097152, PROT_NONE) = 0
-mmap(0x7fcbcbbd5000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib64/libc-2.28.so>, 0x1cc000) = 0x7fcbcbbd5000
-mmap(0x7fcbcbbdb000, 14496, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fcbcbbdb000
+mmap(NULL, 4020384, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3</usr/lib64/libc-2.28.so>, 0) = 0x7fdd4fd5a000
+mprotect(0x7fdd4ff26000, 2097152, PROT_NONE) = 0
+mmap(0x7fdd50126000, 24576, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3</usr/lib64/libc-2.28.so>, 0x1cc000) = 0x7fdd50126000
+mmap(0x7fdd5012c000, 14496, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x7fdd5012c000
 close(3</usr/lib64/libc-2.28.so>)       = 0
-mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fcbcbdf5000
-arch_prctl(ARCH_SET_FS, 0x7fcbcbe0d600) = 0
-mprotect(0x7fcbcbbd5000, 16384, PROT_READ) = 0
+mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fdd50358000
+arch_prctl(ARCH_SET_FS, 0x7fdd5035e600) = 0
+mprotect(0x7fdd50126000, 16384, PROT_READ) = 0
 mprotect(0x600000, 4096, PROT_READ)     = 0
-mprotect(0x7fcbcbe0e000, 4096, PROT_READ) = 0
-munmap(0x7fcbcbdf7000, 85495)           = 0
-openat(-10, "/openat.test", O_RDWR|O_CREAT|O_TRUNC, 0700) = -1 EACCES (Permission denied)
-fstat(1</dev/pts/102<char 136:102>>, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0x66), ...}) = 0
-getrandom("\x5b\x48\x08\x91\x98\x8d\x15\x18", 8, GRND_NONBLOCK) = 8
-brk(NULL)                               = 0x24aa000
-brk(0x24cb000)                          = 0x24cb000
-brk(NULL)                               = 0x24cb000
-write(1</dev/pts/102<char 136:102>>, "openat(dirfd=-10, /openat.test) "..., 60openat(dirfd=-10, /openat.test) failed  `Permission denied`
-) = 60
+mprotect(0x7fdd5035f000, 4096, PROT_READ) = 0
+munmap(0x7fdd5035a000, 11071)           = 0
+openat(-10, "/openat.test", O_RDWR|O_CREAT|O_TRUNC, 0700) = 3</openat.test>
+fstat(1</dev/pts/0<char 136:0>>, {st_mode=S_IFCHR|0620, st_rdev=makedev(0x88, 0), ...}) = 0
+getrandom("\x17\x74\x8b\xdc\xfe\x6d\x1b\x13", 8, GRND_NONBLOCK) = 8
+brk(NULL)                               = 0x1854000
+brk(0x1875000)                          = 0x1875000
+brk(NULL)                               = 0x1875000
+write(1</dev/pts/0<char 136:0>>, "openat(dirfd=-10, /openat.test) "..., 43openat(dirfd=-10, /openat.test) returned 3
+) = 43
+close(3</openat.test>)                  = 0
+unlinkat(-10, "/openat.test", 0)        = 0
 openat(AT_FDCWD</code/sst-elements/src/sst/elements/vanadis/tests/small/basic-io/openat>, "openat.test", O_RDWR|O_CREAT|O_TRUNC, 0700) = 3</code/sst-elements/src/sst/elements/vanadis/tests/small/basic-io/openat/openat.test>
-write(1</dev/pts/102<char 136:102>>, "openat(dirfd=-100, openat.test) "..., 43openat(dirfd=-100, openat.test) returned 3
+write(1</dev/pts/0<char 136:0>>, "openat(dirfd=-100, openat.test) "..., 43openat(dirfd=-100, openat.test) returned 3
 ) = 43
 close(3</code/sst-elements/src/sst/elements/vanadis/tests/small/basic-io/openat/openat.test>) = 0
 unlinkat(AT_FDCWD</code/sst-elements/src/sst/elements/vanadis/tests/small/basic-io/openat>, "openat.test", 0) = 0
 openat(AT_FDCWD</code/sst-elements/src/sst/elements/vanadis/tests/small/basic-io/openat>, "/tmp", O_RDONLY) = 3</tmp>
-write(1</dev/pts/102<char 136:102>>, "open('tmp') dirfd=3\n", 20open('tmp') dirfd=3
+write(1</dev/pts/0<char 136:0>>, "open('tmp') dirfd=3\n", 20open('tmp') dirfd=3
 ) = 20
 openat(3</tmp>, "openat.test", O_RDWR|O_CREAT|O_TRUNC, 0700) = 4</tmp/openat.test>
-write(1</dev/pts/102<char 136:102>>, "openat(dirfd=3, openat.test) ret"..., 40openat(dirfd=3, openat.test) returned 4
+write(1</dev/pts/0<char 136:0>>, "openat(dirfd=3, openat.test) ret"..., 40openat(dirfd=3, openat.test) returned 4
 ) = 40
 close(4</tmp/openat.test>)              = 0
 unlinkat(3</tmp>, "openat.test", 0)     = 0
 close(3</tmp>)                          = 0
 openat(20, "openat.test", O_RDWR|O_CREAT|O_TRUNC, 0700) = -1 EBADF (Bad file descriptor)
-write(1</dev/pts/102<char 136:102>>, "openat(dirfd=20, openat.test) fa"..., 60openat(dirfd=20, openat.test) failed  `Bad file descriptor`
+write(1</dev/pts/0<char 136:0>>, "openat(dirfd=20, openat.test) fa"..., 60openat(dirfd=20, openat.test) failed  `Bad file descriptor`
 ) = 60
 exit_group(0)                           = ?
 +++ exited with 0 +++

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

7 similar comments
@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@sst-autotester

Copy link
Copy Markdown
Contributor

All Jobs Finished; status = PASSED, However PR is now STALE, and must be retested. Set the AT: RETEST Label to force retest....

@berquist

Copy link
Copy Markdown
Contributor

I've confirmed that this isn't an issue when running inside a container as a non-root user and have a solution for us.

@berquist berquist closed this Oct 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants