aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKirk McKusick <mckusick@FreeBSD.org>2019-01-17 06:35:45 +0000
committerKirk McKusick <mckusick@FreeBSD.org>2019-01-17 06:35:45 +0000
commit88640c0e8b6f503426cce9ea1337098c241d3801 (patch)
treef2ee08193db32edc9d3c8929e21ec8dceea54e32
parent0a34fc885b57ead048ff45433be268dc2ca48f8c (diff)
downloadsrc-88640c0e8b6f503426cce9ea1337098c241d3801.tar.gz
src-88640c0e8b6f503426cce9ea1337098c241d3801.zip
Create new EINTEGRITY error with message "Integrity check failed".
An integrity check such as a check-hash or a cross-correlation failed. The integrity error falls between EINVAL that identifies errors in parameters to a system call and EIO that identifies errors with the underlying storage media. EINTEGRITY is typically raised by intermediate kernel layers such as a filesystem or an in-kernel GEOM subsystem when they detect inconsistencies. Uses include allowing the mount(8) command to return a different exit value to automate the running of fsck(8) during a system boot. These changes make no use of the new error, they just add it. Later commits will be made for the use of the new error number and it will be added to additional manual pages as appropriate. Reviewed by: gnn, dim, brueffer, imp Discussed with: kib, cem, emaste, ed, jilles Differential Revision: https://reviews.freebsd.org/D18765
Notes
Notes: svn path=/head/; revision=343111
-rw-r--r--cddl/lib/libdtrace/errno.d5
-rw-r--r--contrib/libc++/include/__errc2
-rw-r--r--contrib/libc++/include/errno.h53
-rw-r--r--contrib/libxo/tests/gettext/po/pig_latin/strerror.po4
-rw-r--r--contrib/libxo/tests/gettext/strerror.pot4
-rw-r--r--contrib/openbsm/libbsm/bsm_errno.c7
-rw-r--r--contrib/openbsm/sys/bsm/audit_errno.h1
-rw-r--r--lib/libc/gen/errlst.c2
-rw-r--r--lib/libc/nls/C.msg2
-rw-r--r--lib/libc/sys/intro.214
-rw-r--r--stand/liblua/lerrno.c1
-rw-r--r--sys/bsm/audit_errno.h1
-rw-r--r--sys/compat/cloudabi/cloudabi_errno.c1
-rw-r--r--sys/compat/linux/linux_errno.inc3
-rw-r--r--sys/security/audit/bsm_errno.c7
-rw-r--r--sys/sys/errno.h3
16 files changed, 93 insertions, 17 deletions
diff --git a/cddl/lib/libdtrace/errno.d b/cddl/lib/libdtrace/errno.d
index 373657b5beb4..a4ca746d9356 100644
--- a/cddl/lib/libdtrace/errno.d
+++ b/cddl/lib/libdtrace/errno.d
@@ -225,7 +225,9 @@ inline int ENOTRECOVERABLE = 95;
#pragma D binding "1.13" ENOTRECOVERABLE
inline int EOWNERDEAD = 96;
#pragma D binding "1.13" EOWNERDEAD
-inline int ELAST = 96;
+inline int EINTEGRITY = 96;
+#pragma D binding "1.13" EINTEGRITY
+inline int ELAST = 97;
#pragma D binding "1.0" ELAST
inline int ERESTART = -1;
#pragma D binding "1.0" ERESTART
@@ -340,6 +342,7 @@ inline string strerror[int errno] =
errno == ECAPMODE ? "Not permitted in capability mode" :
errno == ENOTRECOVERABLE ? "State not recoverable" :
errno == EOWNERDEAD ? "Previous owner died" :
+ errno == EINTEGRITY ? "Integrity check failed" :
errno == ERESTART ? "restart syscall" :
errno == EJUSTRETURN ? "don't modify regs, just return" :
errno == ENOIOCTL ? "ioctl not handled by this layer" :
diff --git a/contrib/libc++/include/__errc b/contrib/libc++/include/__errc
index d0f00b7f0be0..06edc8cd458b 100644
--- a/contrib/libc++/include/__errc
+++ b/contrib/libc++/include/__errc
@@ -46,6 +46,7 @@ enum class errc
identifier_removed, // EIDRM
illegal_byte_sequence, // EILSEQ
inappropriate_io_control_operation, // ENOTTY
+ integrity_check_failed, // EINTEGRITY
interrupted, // EINTR
invalid_argument, // EINVAL
invalid_seek, // ESPIPE
@@ -143,6 +144,7 @@ _LIBCPP_DECLARE_STRONG_ENUM(errc)
identifier_removed = EIDRM,
illegal_byte_sequence = EILSEQ,
inappropriate_io_control_operation = ENOTTY,
+ integrity_check_failed = EINTEGRITY,
interrupted = EINTR,
invalid_argument = EINVAL,
invalid_seek = ESPIPE,
diff --git a/contrib/libc++/include/errno.h b/contrib/libc++/include/errno.h
index ee6429110cc1..c8fd9dceca2b 100644
--- a/contrib/libc++/include/errno.h
+++ b/contrib/libc++/include/errno.h
@@ -33,49 +33,72 @@ Macros:
#ifdef __cplusplus
-#if !defined(EOWNERDEAD) || !defined(ENOTRECOVERABLE)
+#if !defined(EOWNERDEAD) || !defined(ENOTRECOVERABLE) || !defined(EINTEGRITY)
#ifdef ELAST
static const int __elast1 = ELAST+1;
static const int __elast2 = ELAST+2;
+static const int __elast2 = ELAST+3;
#else
static const int __elast1 = 104;
static const int __elast2 = 105;
+static const int __elast2 = 106;
#endif
-#ifdef ENOTRECOVERABLE
+#if !defined(EOWNERDEAD) && !defined(ENOTRECOVERABLE) && !defined(EINTEGRITY)
+#define ENOTRECOVERABLE __elast1
+#define EOWNERDEAD __elast2
+#define EINTEGRITY __elast3
+#ifdef ELAST
+#undef ELAST
+#define ELAST EINTEGRITY
+#elif !defined(EOWNERDEAD) && !defined(ENOTRECOVERABLE) && defined(EINTEGRITY)
+#define ENOTRECOVERABLE __elast1
+#define EOWNERDEAD __elast2
+#ifdef ELAST
+#undef ELAST
+#define ELAST EOWNERDEAD
+
+#elif !defined(EOWNERDEAD) && defined(ENOTRECOVERABLE) && !defined(EINTEGRITY)
#define EOWNERDEAD __elast1
+#define EINTEGRITY __elast2
+#ifdef ELAST
+#undef ELAST
+#define ELAST EINTEGRITY
+#elif !defined(EOWNERDEAD) && defined(ENOTRECOVERABLE) && defined(EINTEGRITY)
+#define EOWNERDEAD __elast1
#ifdef ELAST
#undef ELAST
#define ELAST EOWNERDEAD
-#endif
-#elif defined(EOWNERDEAD)
+#elif defined(EOWNERDEAD) && !defined(ENOTRECOVERABLE) && !defined(EINTEGRITY)
+#define ENOTRECOVERABLE __elast1
+#define EINTEGRITY __elast2
+#ifdef ELAST
+#undef ELAST
+#define ELAST EINTEGRITY
+#elif defined(EOWNERDEAD) && !defined(ENOTRECOVERABLE) && defined(EINTEGRITY)
#define ENOTRECOVERABLE __elast1
#ifdef ELAST
#undef ELAST
#define ELAST ENOTRECOVERABLE
-#endif
-
-#else // defined(EOWNERDEAD)
-#define EOWNERDEAD __elast1
-#define ENOTRECOVERABLE __elast2
+#elif defined(EOWNERDEAD) && defined(ENOTRECOVERABLE) && !defined(EINTEGRITY)
+#define EINTEGRITY __elast1
#ifdef ELAST
#undef ELAST
-#define ELAST ENOTRECOVERABLE
-#endif
+#define ELAST EINTEGRITY
-#endif // defined(EOWNERDEAD)
+#endif // !defined(OWNERDEAD) && !defined(NOTRECOVERABLE) && !defined(INTEGRITY)
-#endif // !defined(EOWNERDEAD) || !defined(ENOTRECOVERABLE)
+#endif // !defined(OWNERDEAD) || !defined(NOTRECOVERABLE) || !defined(INTEGRITY)
// supply errno values likely to be missing, particularly on Windows
@@ -393,6 +416,10 @@ static const int __elast2 = 105;
#define EMLINK 9979
#endif
+#ifndef EINTEGRITY
+#define EINTEGRITY 9980
+#endif
+
#endif // __cplusplus
#endif // _LIBCPP_ERRNO_H
diff --git a/contrib/libxo/tests/gettext/po/pig_latin/strerror.po b/contrib/libxo/tests/gettext/po/pig_latin/strerror.po
index 9b62dd71245d..9b3dcfbdfdee 100644
--- a/contrib/libxo/tests/gettext/po/pig_latin/strerror.po
+++ b/contrib/libxo/tests/gettext/po/pig_latin/strerror.po
@@ -457,3 +457,7 @@ msgstr "Atestay otnay ecoverableray"
# 96 - EOWNERDEAD
msgid "Previous owner died"
msgstr "Eviouspray ownerway iedday"
+
+# 97 - EINTEGRITY
+msgid "Integrity check failed"
+msgstr "integrityyay eckchay ailedfay"
diff --git a/contrib/libxo/tests/gettext/strerror.pot b/contrib/libxo/tests/gettext/strerror.pot
index 475162d5413d..63da80d14325 100644
--- a/contrib/libxo/tests/gettext/strerror.pot
+++ b/contrib/libxo/tests/gettext/strerror.pot
@@ -466,3 +466,7 @@ msgstr ""
# 96 - EOWNERDEAD
msgid "Previous owner died"
msgstr ""
+
+# 97 - EINTEGRITY
+msgid "Integrity check failed"
+msgstr ""
diff --git a/contrib/openbsm/libbsm/bsm_errno.c b/contrib/openbsm/libbsm/bsm_errno.c
index b4b22f3e845e..b60c2e847f48 100644
--- a/contrib/openbsm/libbsm/bsm_errno.c
+++ b/contrib/openbsm/libbsm/bsm_errno.c
@@ -239,6 +239,13 @@ static const struct bsm_errno bsm_errnos[] = {
ERRNO_NO_LOCAL_MAPPING,
#endif
ES("Process died with the lock") },
+ { BSM_ERRNO_EINTEGRITY,
+#ifdef EINTEGRITY
+ EINTEGRITY,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Integrity check failed") },
{ BSM_ERRNO_ENOTRECOVERABLE,
#ifdef ENOTRECOVERABLE
ENOTRECOVERABLE,
diff --git a/contrib/openbsm/sys/bsm/audit_errno.h b/contrib/openbsm/sys/bsm/audit_errno.h
index 1c467eedc58c..fc64726bbb23 100644
--- a/contrib/openbsm/sys/bsm/audit_errno.h
+++ b/contrib/openbsm/sys/bsm/audit_errno.h
@@ -204,6 +204,7 @@
#define BSM_ERRNO_EKEYREJECTED 222 /* Linux-specific. */
#define BSM_ERRNO_ENOTCAPABLE 223 /* FreeBSD-specific. */
#define BSM_ERRNO_ECAPMODE 224 /* FreeBSD-specific. */
+#define BSM_ERRNO_EINTEGRITY 225 /* FreeBSD-specific. */
/*
* In the event that OpenBSM doesn't have a file representation of a local
diff --git a/lib/libc/gen/errlst.c b/lib/libc/gen/errlst.c
index 648cbd422fe6..bc673e8c9c66 100644
--- a/lib/libc/gen/errlst.c
+++ b/lib/libc/gen/errlst.c
@@ -158,12 +158,12 @@ const char *const sys_errlist[] = {
"Not permitted in capability mode", /* 94 - ECAPMODE */
"State not recoverable", /* 95 - ENOTRECOVERABLE */
"Previous owner died", /* 96 - EOWNERDEAD */
+ "Integrity check failed", /* 97 - EINTEGRITY */
/*
* Reserved space in sys_errlist, take the next slot for a next error code.
* Reserve prevents the array size from changing for some time.
*/
- __uprefix, /* 97 */
__uprefix, /* 98 */
__uprefix, /* 99 */
__uprefix, /* 100 */
diff --git a/lib/libc/nls/C.msg b/lib/libc/nls/C.msg
index d08c5719225e..4004011d260f 100644
--- a/lib/libc/nls/C.msg
+++ b/lib/libc/nls/C.msg
@@ -197,6 +197,8 @@ $ ENOTRECOVERABLE
95 State not recoverable
$ EOWNERDEAD
96 Previous owner died
+$ EINTEGRITY
+97 Integrity check failed
$
$ strsignal() support catalog
$
diff --git a/lib/libc/sys/intro.2 b/lib/libc/sys/intro.2
index 7ed6b351714d..7ae16728c4a9 100644
--- a/lib/libc/sys/intro.2
+++ b/lib/libc/sys/intro.2
@@ -472,6 +472,20 @@ The system call or operation is not permitted for capability mode processes.
The state protected by a robust mutex is not recoverable.
.It Er 96 EOWNERDEAD Em "Previous owner died" .
The owner of a robust mutex terminated while holding the mutex lock.
+.It Er 97 EINTEGRITY Em "Integrity check failed" .
+An integrity check such as a check-hash or a cross-correlation failed.
+The integrity error falls between
+.Er EINVAL
+that identifies errors in parameters to a system call and
+.Er EIO
+that identifies errors with the underlying storage media.
+It is typically raised by intermediate kernel layers such as a
+filesystem or an in-kernel GEOM subsystem when they detect inconsistencies.
+Uses include allowing the
+.Xr mount 8
+command to return a different exit value to automate the running of
+.Xr fsck 8
+during a system boot.
.El
.Sh DEFINITIONS
.Bl -tag -width Ds
diff --git a/stand/liblua/lerrno.c b/stand/liblua/lerrno.c
index efa73aed5007..defa3c73baad 100644
--- a/stand/liblua/lerrno.c
+++ b/stand/liblua/lerrno.c
@@ -146,6 +146,7 @@ static const struct err_name_number {
ENTRY(ECAPMODE),
ENTRY(ENOTRECOVERABLE),
ENTRY(EOWNERDEAD),
+ ENTRY(EINTEGRITY),
ENTRY(ELAST),
ENTRY(ERESTART),
ENTRY(EJUSTRETURN),
diff --git a/sys/bsm/audit_errno.h b/sys/bsm/audit_errno.h
index 81cfc3548e8e..9342dcd6f962 100644
--- a/sys/bsm/audit_errno.h
+++ b/sys/bsm/audit_errno.h
@@ -208,6 +208,7 @@
#define BSM_ERRNO_EKEYREJECTED 222 /* Linux-specific. */
#define BSM_ERRNO_ENOTCAPABLE 223 /* FreeBSD-specific. */
#define BSM_ERRNO_ECAPMODE 224 /* FreeBSD-specific. */
+#define BSM_ERRNO_EINTEGRITY 225 /* FreeBSD-specific. */
/*
* In the event that OpenBSM doesn't have a file representation of a local
diff --git a/sys/compat/cloudabi/cloudabi_errno.c b/sys/compat/cloudabi/cloudabi_errno.c
index 38520b9c262c..10304bad4af5 100644
--- a/sys/compat/cloudabi/cloudabi_errno.c
+++ b/sys/compat/cloudabi/cloudabi_errno.c
@@ -63,6 +63,7 @@ cloudabi_convert_errno(int error)
[EIDRM] = CLOUDABI_EIDRM,
[EILSEQ] = CLOUDABI_EILSEQ,
[EINPROGRESS] = CLOUDABI_EINPROGRESS,
+ [EINTEGRITY] = CLOUDABI_EINVAL,
[EINTR] = CLOUDABI_EINTR,
[EINVAL] = CLOUDABI_EINVAL,
[EIO] = CLOUDABI_EIO,
diff --git a/sys/compat/linux/linux_errno.inc b/sys/compat/linux/linux_errno.inc
index 4f9a6dae2e76..c2d4877e6f56 100644
--- a/sys/compat/linux/linux_errno.inc
+++ b/sys/compat/linux/linux_errno.inc
@@ -142,7 +142,8 @@ const int linux_errtbl[ELAST + 1] = {
-1, /* ECAPMODE -> EPERM */
-131, /* ENOTRECOVERABLE */
-130, /* EOWNERDEAD */
+ -22, /* EINTEGRITY -> EINVAL */
};
-_Static_assert(ELAST == 96,
+_Static_assert(ELAST == 97,
"missing errno entries in linux_errtbl");
diff --git a/sys/security/audit/bsm_errno.c b/sys/security/audit/bsm_errno.c
index fc069a7568f8..4e952870f672 100644
--- a/sys/security/audit/bsm_errno.c
+++ b/sys/security/audit/bsm_errno.c
@@ -243,6 +243,13 @@ static const struct bsm_errno bsm_errnos[] = {
ERRNO_NO_LOCAL_MAPPING,
#endif
ES("Process died with the lock") },
+ { BSM_ERRNO_EINTEGRITY,
+#ifdef EINTEGRITY
+ EINTEGRITY,
+#else
+ ERRNO_NO_LOCAL_MAPPING,
+#endif
+ ES("Integrity check failed") },
{ BSM_ERRNO_ENOTRECOVERABLE,
#ifdef ENOTRECOVERABLE
ENOTRECOVERABLE,
diff --git a/sys/sys/errno.h b/sys/sys/errno.h
index ad140ab14778..6994c0612f79 100644
--- a/sys/sys/errno.h
+++ b/sys/sys/errno.h
@@ -180,10 +180,11 @@ __END_DECLS
#define ECAPMODE 94 /* Not permitted in capability mode */
#define ENOTRECOVERABLE 95 /* State not recoverable */
#define EOWNERDEAD 96 /* Previous owner died */
+#define EINTEGRITY 97 /* Integrity check failed */
#endif /* _POSIX_SOURCE */
#ifndef _POSIX_SOURCE
-#define ELAST 96 /* Must be equal largest errno */
+#define ELAST 97 /* Must be equal largest errno */
#endif /* _POSIX_SOURCE */
#if defined(_KERNEL) || defined(_WANT_KERNEL_ERRNO)