From: Paul Floyd Date: Tue, 7 Jan 2025 07:05:20 +0000 (+0100) Subject: Bug 498317 - FdBadUse is not a valid CoreError type in a suppression even though... X-Git-Tag: VALGRIND_3_25_0~183 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=47bdc4a6f3de8e2071561d349fdd5f830388c489;p=thirdparty%2Fvalgrind.git Bug 498317 - FdBadUse is not a valid CoreError type in a suppression even though it's generated by --gen-suppressions=yes --- diff --git a/.gitignore b/.gitignore index 46c912671..0456de003 100644 --- a/.gitignore +++ b/.gitignore @@ -2250,6 +2250,7 @@ /none/tests/freebsd/Makefile /none/tests/freebsd/Makefile.in /none/tests/freebsd/auxv +/none/tests/freebsd/bug498317 /none/tests/freebsd/osrel /none/tests/freebsd/swapcontext /none/tests/freebsd/fexecve diff --git a/NEWS b/NEWS index 0be2ff033..118961a03 100644 --- a/NEWS +++ b/NEWS @@ -38,6 +38,8 @@ are not entered into bugzilla tend to get forgotten about or ignored. 497455 Update drd/scripts/download-and-build-gcc 497723 Enabling Ada demangling breaks callgrind differentiation between overloaded functions and procedures +498317 FdBadUse is not a valid CoreError type in a suppression + even though it's generated by --gen-suppressions=yes To see details of a given bug, visit https://bugs.kde.org/show_bug.cgi?id=XXXXXX diff --git a/coregrind/m_errormgr.c b/coregrind/m_errormgr.c index 4bbcea024..2ce919482 100644 --- a/coregrind/m_errormgr.c +++ b/coregrind/m_errormgr.c @@ -206,7 +206,8 @@ typedef // example should new core errors ever be added. ThreadSupp = -1, /* Matches ThreadErr */ FdBadCloseSupp = -2, - FdNotClosedSupp = -3 + FdNotClosedSupp = -3, + FdBadUseSupp = -4 } CoreSuppKind; @@ -1033,7 +1034,7 @@ static Bool core_error_matches_suppression(const Error* err, const Supp* su) return err->ekind == FdBadClose; case FdNotClosedSupp: return err->ekind == FdNotClosed; - case FdBadUse: + case FdBadUseSupp: return err->ekind == FdBadUse; default: VG_(umsg)("FATAL: unknown core suppression kind: %d\n", su->skind ); @@ -1522,6 +1523,8 @@ static void load_one_suppressions_file ( Int clo_suppressions_i ) supp->skind = FdBadCloseSupp; else if (VG_STREQ(supp_name, "FdNotClosed")) supp->skind = FdNotClosedSupp; + else if (VG_STREQ(supp_name, "FdBadUse")) + supp->skind = FdBadUseSupp; else BOMB("unknown core suppression type"); } diff --git a/coregrind/m_syswrap/syswrap-freebsd.c b/coregrind/m_syswrap/syswrap-freebsd.c index ea0ca2bfe..d358c90eb 100644 --- a/coregrind/m_syswrap/syswrap-freebsd.c +++ b/coregrind/m_syswrap/syswrap-freebsd.c @@ -1400,6 +1400,10 @@ PRE(sys_fcntl) PRINT("sys_fcntl[UNKNOWN] ( %lu, %lu, %lu )", ARG1,ARG2,ARG3); I_die_here; } + + if (!ML_(fd_allowed)(ARG1, "fcntl", tid, False)) { + SET_STATUS_Failure (VKI_EBADF); + } } POST(sys_fcntl) diff --git a/none/tests/freebsd/Makefile.am b/none/tests/freebsd/Makefile.am index fe4f8db69..1ccfefb57 100644 --- a/none/tests/freebsd/Makefile.am +++ b/none/tests/freebsd/Makefile.am @@ -11,6 +11,8 @@ EXTRA_DIST = \ auxv.stderr.exp-freebsd131 \ auxv.stderr.exp-freebsd14 \ auxv.stderr.exp-arm64 \ + bug498317.vgtest bug498317.stderr.exp \ + bug498317.supp \ cp.vgtest \ cp.stderr.exp \ osrel.vgtest \ @@ -61,7 +63,7 @@ EXTRA_DIST = \ usrstack.stdout.exp check_PROGRAMS = \ - auxv osrel swapcontext hello_world fexecve 452275 usrstack \ + auxv bug498317 osrel swapcontext hello_world fexecve 452275 usrstack \ proc_pid_file sanity_level_thread umtx_shm_creat AM_CFLAGS += $(AM_FLAG_M3264_PRI) diff --git a/none/tests/freebsd/bug498317.c b/none/tests/freebsd/bug498317.c new file mode 100644 index 000000000..36a1a5a13 --- /dev/null +++ b/none/tests/freebsd/bug498317.c @@ -0,0 +1,7 @@ +#include + +int main(void) { + fcntl(-1, F_GETFD); + return 0; +} + diff --git a/none/tests/freebsd/bug498317.stderr.exp b/none/tests/freebsd/bug498317.stderr.exp new file mode 100644 index 000000000..e69de29bb diff --git a/none/tests/freebsd/bug498317.supp b/none/tests/freebsd/bug498317.supp new file mode 100644 index 000000000..b3a99447c --- /dev/null +++ b/none/tests/freebsd/bug498317.supp @@ -0,0 +1,8 @@ +{ + test suppression of FdBadUse + CoreError:FdBadUse + fun:_fcntl + fun:fcntl + fun:main +} + diff --git a/none/tests/freebsd/bug498317.vgtest b/none/tests/freebsd/bug498317.vgtest new file mode 100644 index 000000000..6579ebce8 --- /dev/null +++ b/none/tests/freebsd/bug498317.vgtest @@ -0,0 +1,2 @@ +prog: bug498317 +vgopts: -q