@@ -435,6 +435,8 @@ TEST_F(coredump, socket_no_listener)
435435 *
436436 * Verify that when using simple socket-based coredump (@ pattern),
437437 * the coredump_signal field is correctly exposed as SIGSEGV.
438+ * Also check that the coredump_code field is correctly exposed
439+ * as SEGV_MAPERR.
438440 */
439441TEST_F (coredump , socket_coredump_signal_sigsegv )
440442{
@@ -509,6 +511,18 @@ TEST_F(coredump, socket_coredump_signal_sigsegv)
509511 goto out ;
510512 }
511513
514+ /* Verify coredump_code is available and correct */
515+ if (!(info .mask & PIDFD_INFO_COREDUMP_CODE )) {
516+ fprintf (stderr , "socket_coredump_signal_sigsegv: PIDFD_INFO_COREDUMP_CODE not set in mask\n" );
517+ goto out ;
518+ }
519+
520+ if (info .coredump_code != SEGV_MAPERR ) {
521+ fprintf (stderr , "socket_coredump_signal_sigsegv: coredump_code=%d, expected SEGV_MAPERR=%d\n" ,
522+ info .coredump_code , SEGV_MAPERR );
523+ goto out ;
524+ }
525+
512526 fd_core_file = open_coredump_tmpfile (self -> fd_tmpfs_detached );
513527 if (fd_core_file < 0 ) {
514528 fprintf (stderr , "socket_coredump_signal_sigsegv: open_coredump_tmpfile failed: %m\n" );
@@ -572,6 +586,8 @@ TEST_F(coredump, socket_coredump_signal_sigsegv)
572586 ASSERT_TRUE (!!(info .mask & PIDFD_INFO_COREDUMP ));
573587 ASSERT_TRUE (!!(info .mask & PIDFD_INFO_COREDUMP_SIGNAL ));
574588 ASSERT_EQ (info .coredump_signal , SIGSEGV );
589+ ASSERT_TRUE (!!(info .mask & PIDFD_INFO_COREDUMP_CODE ));
590+ ASSERT_EQ (info .coredump_code , SEGV_MAPERR );
575591
576592 wait_and_check_coredump_server (pid_coredump_server , _metadata , self );
577593}
@@ -581,6 +597,8 @@ TEST_F(coredump, socket_coredump_signal_sigsegv)
581597 *
582598 * Verify that when using simple socket-based coredump (@ pattern),
583599 * the coredump_signal field is correctly exposed as SIGABRT.
600+ * Also check that the coredump_code field is correctly exposed
601+ * as SI_TKILL.
584602 */
585603TEST_F (coredump , socket_coredump_signal_sigabrt )
586604{
@@ -655,6 +673,18 @@ TEST_F(coredump, socket_coredump_signal_sigabrt)
655673 goto out ;
656674 }
657675
676+ /* Verify coredump_code is available and correct */
677+ if (!(info .mask & PIDFD_INFO_COREDUMP_CODE )) {
678+ fprintf (stderr , "socket_coredump_signal_sigabrt: PIDFD_INFO_COREDUMP_CODE not set in mask\n" );
679+ goto out ;
680+ }
681+
682+ if (info .coredump_code != SI_TKILL ) {
683+ fprintf (stderr , "socket_coredump_signal_sigabrt: coredump_code=%d, expected SI_TKILL=%d\n" ,
684+ info .coredump_code , SI_TKILL );
685+ goto out ;
686+ }
687+
658688 fd_core_file = open_coredump_tmpfile (self -> fd_tmpfs_detached );
659689 if (fd_core_file < 0 ) {
660690 fprintf (stderr , "socket_coredump_signal_sigabrt: open_coredump_tmpfile failed: %m\n" );
@@ -718,6 +748,8 @@ TEST_F(coredump, socket_coredump_signal_sigabrt)
718748 ASSERT_TRUE (!!(info .mask & PIDFD_INFO_COREDUMP ));
719749 ASSERT_TRUE (!!(info .mask & PIDFD_INFO_COREDUMP_SIGNAL ));
720750 ASSERT_EQ (info .coredump_signal , SIGABRT );
751+ ASSERT_TRUE (!!(info .mask & PIDFD_INFO_COREDUMP_CODE ));
752+ ASSERT_EQ (info .coredump_code , SI_TKILL );
721753
722754 wait_and_check_coredump_server (pid_coredump_server , _metadata , self );
723755}
0 commit comments