[valgrind] [Bug 506910] openat2 with RESOLVE_NO_MAGICLINKS succeeds on /proc/self/exe

2025-07-19 Thread Mark Wielaard
https://bugs.kde.org/show_bug.cgi?id=506910

Mark Wielaard  changed:

   What|Removed |Added

 Status|CONFIRMED   |RESOLVED
 Resolution|--- |FIXED

--- Comment #3 from Mark Wielaard  ---
commit 088ac305a2f27b4d8d5822bace59742719cc84d5
Author: Paul Floyd 
Date:   Sat Jul 19 18:17:35 2025 +0200

Bug 506910 - openat2 with RESOLVE_NO_MAGICLINKS succeeds on /proc/self/exe

Previous change did most of the work but need to return without setting
SfMayBlock. Add a testcase covering /proc/self/exe and /proc/PID/exe.

-- 
You are receiving this mail because:
You are watching all bug changes.

[valgrind] [Bug 506910] openat2 with RESOLVE_NO_MAGICLINKS succeeds on /proc/self/exe

2025-07-19 Thread Mark Wielaard
https://bugs.kde.org/show_bug.cgi?id=506910

--- Comment #2 from Mark Wielaard  ---
The issue seems to be that at the end of sys_openat2 if we detected it was
called on proc_self_exe then we want to force the syscall with
VG_(resolved_exename) as ARG2 and SET_STATUS_from_SysRes. But then fall through
to where we set flags to contain SfMayBlock. 

We could do an immediate return after:
  // do the syscall with VG_(resolved_exename)  
  SET_STATUS_from_SysRes(VG_(do_syscall4)(SYSNO, ARG1,
(Word)VG_(resolved_exename), ARG3, ARG4));
  return;

But since it is the same syscall it seems simpler to just modify ARG2 and fall
through.

Testing the following patch:

diff --git a/coregrind/m_syswrap/syswrap-linux.c
b/coregrind/m_syswrap/syswrap-linux.c
index e16d293cd08f..1499e75bccf0 100644
--- a/coregrind/m_syswrap/syswrap-linux.c
+++ b/coregrind/m_syswrap/syswrap-linux.c
@@ -6094,7 +6094,7 @@ no_client_write:
if (proc_self_exe) {

   // do the syscall with VG_(resolved_exename)
-  SET_STATUS_from_SysRes(VG_(do_syscall4)(SYSNO, ARG1,
(Word)VG_(resolved_exename), ARG3, ARG4));
+  ARG2 = (Word)VG_(resolved_exename);
}

/* Otherwise handle normally */
@@ -14095,7 +14095,8 @@ PRE(sys_openat2)
if (proc_self_exe) {

   // do the syscall with VG_(resolved_exename)
-  SET_STATUS_from_SysRes(VG_(do_syscall4)(SYSNO, ARG1,
(Word)VG_(resolved_exename), ARG3, ARG4));
+  ARG2 = (Word)VG_(resolved_exename);
+
}

/* Otherwise handle normally */

-- 
You are receiving this mail because:
You are watching all bug changes.

[valgrind] [Bug 506910] openat2 with RESOLVE_NO_MAGICLINKS succeeds on /proc/self/exe

2025-07-19 Thread Mark Wielaard
https://bugs.kde.org/show_bug.cgi?id=506910

Mark Wielaard  changed:

   What|Removed |Added

 Status|REPORTED|CONFIRMED
 Ever confirmed|0   |1

--- Comment #1 from Mark Wielaard  ---
After

commit 7fb17b67f40eb8197c45b5f575daf4fa77d16faa (HEAD -> master, origin/master,
origin/HEAD)
Author: Paul Floyd 
Date:   Sat Jul 19 15:10:31 2025 +0200

Bug 505673 - Valgrind crashes with an internal error and SIGBUS when the
guest tries to open its own file with O_WRONLY|O_CREAT|O_TRUNC

The LTP openat202 testcase still fails for me (Fedora 42, x86_64)

$ make ltpchecks TESTS=openat202
[1/1] Testing openat202 ...
openat202: unempty log2.filtered:

valgrind: m_syswrap/syswrap-main.c:2441 (vgPlain_client_syscall): Assertion '0
== (sci->flags & ~(SfPollAfter | SfYieldAfter | SfNoWriteResult))' failed.

host stacktrace:
==1151383==at 0x58028188: show_sched_status_wrk (m_libcassert.c:426)
==1151383==by 0x580282A7: report_and_quit (m_libcassert.c:497)
==1151383==by 0x58028435: vgPlain_assert_fail (m_libcassert.c:564)
==1151383==by 0x58014BBA: vgPlain_client_syscall (syswrap-main.c:2441)
==1151383==by 0x58010A5A: handle_syscall (scheduler.c:1214)
==1151383==by 0x580128C6: vgPlain_scheduler (scheduler.c:1588)
==1151383==by 0x5807EBFA: run_a_thread_NORETURN (syswrap-linux.c:102)

sched status:
  running_tid=1

Thread 1: status = VgTs_Runnable syscall 437 (lwpid 1151383)
==1151383==at 0x4946A8D: syscall (syscall.S:38)
==1151383==by 0x4013A7: run (openat2.h:53)
==1151383==by 0x40AD54: fork_testrun.isra.0 (tst_test.c:1617)
==1151383==by 0x40D113: tst_run_tcases (tst_test.c:1970)
==1151383==by 0x4011BD: main (tst_test.h:729)
client stack range: [0x1FFEFFC000 0x1FFF000FFF] client SP: 0x1FFEFFF228
valgrind stack range: [0x100278E000 0x100288DFFF] top usage: 17832 of 1048576


Note: see also the FAQ in the source distribution.
It contains workarounds to several common problems.
In particular, if Valgrind aborted or crashed after
identifying problems in your program, there's a good chance
that fixing those problems will prevent Valgrind aborting or
crashing, especially if it happened in m_mallocfree.c.

If that doesn't help, please report this bug to: www.valgrind.org

In the bug report, send all the above text, the valgrind
version, and what OS and version you are using.  Thanks.

-- 
You are receiving this mail because:
You are watching all bug changes.

[valgrind] [Bug 506910] openat2 with RESOLVE_NO_MAGICLINKS succeeds on /proc/self/exe

2025-07-19 Thread Paul Floyd
https://bugs.kde.org/show_bug.cgi?id=506910

Paul Floyd  changed:

   What|Removed |Added

Summary|openat with |openat2 with
   |RESOLVE_NO_MAGICLINKS   |RESOLVE_NO_MAGICLINKS
   |succeeds on /proc/self/exe  |succeeds on /proc/self/exe

-- 
You are receiving this mail because:
You are watching all bug changes.