git: ddf6065122e8 - main - exterr(9): add a few tests of new message formats
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 20 Aug 2026 10:41:56 UTC
The branch main has been updated by brooks:
URL: https://cgit.FreeBSD.org/src/commit/?id=ddf6065122e8990eafe31d21adaf719a25924a73
commit ddf6065122e8990eafe31d21adaf719a25924a73
Author: Brooks Davis <brooks@FreeBSD.org>
AuthorDate: 2026-08-20 10:39:46 +0000
Commit: Brooks Davis <brooks@FreeBSD.org>
CommitDate: 2026-08-20 10:40:31 +0000
exterr(9): add a few tests of new message formats
This is enough to show that the idea works (and to exercise
uexterr_set()), but isn't complete by any means.
Reviewed by: kib
Effort: CHERI upstreaming
Sponsored by: Innovate UK
Differential Revision: https://reviews.freebsd.org/D58060
---
tests/sys/kern/exterr_test.c | 34 ++++++++++++++++++++++++++++++++++
1 file changed, 34 insertions(+)
diff --git a/tests/sys/kern/exterr_test.c b/tests/sys/kern/exterr_test.c
index fad002767163..75de58d27206 100644
--- a/tests/sys/kern/exterr_test.c
+++ b/tests/sys/kern/exterr_test.c
@@ -23,6 +23,8 @@
* SUCH DAMAGE.
*/
+#define UEXTERR_CATEGORY "tests/sys/kern/exterr_test.c"
+
#include <sys/param.h>
#include <sys/exterrvar.h>
#include <sys/mman.h>
@@ -31,9 +33,11 @@
#include <atf-c.h>
#include <errno.h>
#include <exterr.h>
+#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+#include <uexterror.h>
#include <unistd.h>
#include "freebsd_test_suite/macros.h"
@@ -75,6 +79,35 @@ ATF_TC_BODY(gettext_extended, tc)
ATF_CHECK(strstr(exterr, " is not subset of ") != NULL);
}
+ATF_TC(uexterr_set);
+ATF_TC_HEAD(uexterr_set, tc)
+{
+ atf_tc_set_md_var(tc, "descr",
+ "Set extended error message from userspace");
+}
+ATF_TC_BODY(uexterr_set, tc)
+{
+ char exterr[UEXTERROR_MAXLEN];
+ int r;
+
+ errno = 0;
+ UEXTERROR(EINVAL, "pointer %p int %d", (uintptr_t)&r, UINTMAX_MAX);
+ ATF_CHECK_EQ(errno, EINVAL);
+ r = uexterr_gettext(exterr, sizeof(exterr));
+ ATF_CHECK_EQ(0, r);
+ printf("Extended error: %s\n", exterr);
+ /* The pointer's value will change, but the rest should be stable. */
+ ATF_CHECK(strncmp("pointer 0x", exterr, strlen("pointer 0x")) == 0);
+ ATF_CHECK(strstr(exterr, " int -1") != 0);
+
+ errno = 0;
+ UEXTERROR(EINVAL, "long 0x%lx int %u", UINTMAX_MAX, UINTMAX_MAX);
+ ATF_CHECK_EQ(errno, EINVAL);
+ r = uexterr_gettext(exterr, sizeof(exterr));
+ ATF_CHECK_EQ(0, r);
+ ATF_CHECK_STREQ("long 0xffffffffffffffff int 4294967295", exterr);
+}
+
ATF_TC(gettext_noextended);
ATF_TC_HEAD(gettext_noextended, tc)
{
@@ -150,6 +183,7 @@ ATF_TC_BODY(exterr_dynamic_categories, tc)
ATF_TP_ADD_TCS(tp)
{
ATF_TP_ADD_TC(tp, gettext_extended);
+ ATF_TP_ADD_TC(tp, uexterr_set);
ATF_TP_ADD_TC(tp, gettext_noextended);
ATF_TP_ADD_TC(tp, gettext_noextended_after_extended);
ATF_TP_ADD_TC(tp, exterr_dynamic_categories);