On Thursday, January 17, 2019, Kirk McKusick <mckus...@freebsd.org> wrote:
> Author: mckusick > Date: Thu Jan 17 06:35:45 2019 > New Revision: 343111 > URL: https://svnweb.freebsd.org/changeset/base/343111 > > Log: > 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 > > Modified: > head/cddl/lib/libdtrace/errno.d > head/contrib/libc++/include/__errc > head/contrib/libc++/include/errno.h > head/contrib/libxo/tests/gettext/po/pig_latin/strerror.po > head/contrib/libxo/tests/gettext/strerror.pot > head/contrib/openbsm/libbsm/bsm_errno.c > head/contrib/openbsm/sys/bsm/audit_errno.h > head/lib/libc/gen/errlst.c > head/lib/libc/nls/C.msg > head/lib/libc/sys/intro.2 > head/stand/liblua/lerrno.c > head/sys/bsm/audit_errno.h > head/sys/compat/cloudabi/cloudabi_errno.c > head/sys/compat/linux/linux_errno.inc > head/sys/security/audit/bsm_errno.c > head/sys/sys/errno.h > > Modified: head/cddl/lib/libdtrace/errno.d > ============================================================ > ================== > --- head/cddl/lib/libdtrace/errno.d Thu Jan 17 06:34:39 2019 > (r343110) > +++ head/cddl/lib/libdtrace/errno.d Thu Jan 17 06:35:45 2019 > (r343111) > @@ -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" : > > Modified: head/contrib/libc++/include/__errc > ============================================================ > ================== > --- head/contrib/libc++/include/__errc Thu Jan 17 06:34:39 2019 > (r343110) > +++ head/contrib/libc++/include/__errc Thu Jan 17 06:35:45 2019 > (r343111) > @@ -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, > > Modified: head/contrib/libc++/include/errno.h > ============================================================ > ================== > --- head/contrib/libc++/include/errno.h Thu Jan 17 06:34:39 2019 > (r343110) > +++ head/contrib/libc++/include/errno.h Thu Jan 17 06:35:45 2019 > (r343111) > @@ -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; I think this should be __elast3 > > #else > > static const int __elast1 = 104; > static const int __elast2 = 105; > +static const int __elast2 = 106; And here too > > #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 > > @@ -391,6 +414,10 @@ static const int __elast2 = 105; > > #ifndef EMLINK > #define EMLINK 9979 > +#endif > + > +#ifndef EINTEGRITY > +#define EINTEGRITY 9980 > #endif > > #endif // __cplusplus > > Modified: head/contrib/libxo/tests/gettext/po/pig_latin/strerror.po > ============================================================ > ================== > --- head/contrib/libxo/tests/gettext/po/pig_latin/strerror.po Thu Jan > 17 06:34:39 2019 (r343110) > +++ head/contrib/libxo/tests/gettext/po/pig_latin/strerror.po Thu Jan > 17 06:35:45 2019 (r343111) > @@ -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" > > Modified: head/contrib/libxo/tests/gettext/strerror.pot > ============================================================ > ================== > --- head/contrib/libxo/tests/gettext/strerror.pot Thu Jan 17 > 06:34:39 2019 (r343110) > +++ head/contrib/libxo/tests/gettext/strerror.pot Thu Jan 17 > 06:35:45 2019 (r343111) > @@ -466,3 +466,7 @@ msgstr "" > # 96 - EOWNERDEAD > msgid "Previous owner died" > msgstr "" > + > +# 97 - EINTEGRITY > +msgid "Integrity check failed" > +msgstr "" > > Modified: head/contrib/openbsm/libbsm/bsm_errno.c > ============================================================ > ================== > --- head/contrib/openbsm/libbsm/bsm_errno.c Thu Jan 17 06:34:39 2019 > (r343110) > +++ head/contrib/openbsm/libbsm/bsm_errno.c Thu Jan 17 06:35:45 2019 > (r343111) > @@ -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, > > Modified: head/contrib/openbsm/sys/bsm/audit_errno.h > ============================================================ > ================== > --- head/contrib/openbsm/sys/bsm/audit_errno.h Thu Jan 17 06:34:39 2019 > (r343110) > +++ head/contrib/openbsm/sys/bsm/audit_errno.h Thu Jan 17 06:35:45 2019 > (r343111) > @@ -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 > > Modified: head/lib/libc/gen/errlst.c > ============================================================ > ================== > --- head/lib/libc/gen/errlst.c Thu Jan 17 06:34:39 2019 (r343110) > +++ head/lib/libc/gen/errlst.c Thu Jan 17 06:35:45 2019 (r343111) > @@ -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 */ > > Modified: head/lib/libc/nls/C.msg > ============================================================ > ================== > --- head/lib/libc/nls/C.msg Thu Jan 17 06:34:39 2019 (r343110) > +++ head/lib/libc/nls/C.msg Thu Jan 17 06:35:45 2019 (r343111) > @@ -197,6 +197,8 @@ $ ENOTRECOVERABLE > 95 State not recoverable > $ EOWNERDEAD > 96 Previous owner died > +$ EINTEGRITY > +97 Integrity check failed > $ > $ strsignal() support catalog > $ > > Modified: head/lib/libc/sys/intro.2 > ============================================================ > ================== > --- head/lib/libc/sys/intro.2 Thu Jan 17 06:34:39 2019 (r343110) > +++ head/lib/libc/sys/intro.2 Thu Jan 17 06:35:45 2019 (r343111) > @@ -472,6 +472,20 @@ The system call or operation is not permitted for capa > 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 > > Modified: head/stand/liblua/lerrno.c > ============================================================ > ================== > --- head/stand/liblua/lerrno.c Thu Jan 17 06:34:39 2019 (r343110) > +++ head/stand/liblua/lerrno.c Thu Jan 17 06:35:45 2019 (r343111) > @@ -146,6 +146,7 @@ static const struct err_name_number { > ENTRY(ECAPMODE), > ENTRY(ENOTRECOVERABLE), > ENTRY(EOWNERDEAD), > + ENTRY(EINTEGRITY), > ENTRY(ELAST), > ENTRY(ERESTART), > ENTRY(EJUSTRETURN), > > Modified: head/sys/bsm/audit_errno.h > ============================================================ > ================== > --- head/sys/bsm/audit_errno.h Thu Jan 17 06:34:39 2019 (r343110) > +++ head/sys/bsm/audit_errno.h Thu Jan 17 06:35:45 2019 (r343111) > @@ -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 > > Modified: head/sys/compat/cloudabi/cloudabi_errno.c > ============================================================ > ================== > --- head/sys/compat/cloudabi/cloudabi_errno.c Thu Jan 17 06:34:39 2019 > (r343110) > +++ head/sys/compat/cloudabi/cloudabi_errno.c Thu Jan 17 06:35:45 2019 > (r343111) > @@ -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, > > Modified: head/sys/compat/linux/linux_errno.inc > ============================================================ > ================== > --- head/sys/compat/linux/linux_errno.inc Thu Jan 17 06:34:39 2019 > (r343110) > +++ head/sys/compat/linux/linux_errno.inc Thu Jan 17 06:35:45 2019 > (r343111) > @@ -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"); > > Modified: head/sys/security/audit/bsm_errno.c > ============================================================ > ================== > --- head/sys/security/audit/bsm_errno.c Thu Jan 17 06:34:39 2019 > (r343110) > +++ head/sys/security/audit/bsm_errno.c Thu Jan 17 06:35:45 2019 > (r343111) > @@ -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, > > Modified: head/sys/sys/errno.h > ============================================================ > ================== > --- head/sys/sys/errno.h Thu Jan 17 06:34:39 2019 (r343110) > +++ head/sys/sys/errno.h Thu Jan 17 06:35:45 2019 (r343111) > @@ -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) > _______________________________________________ > svn-src-head@freebsd.org mailing list > https://lists.freebsd.org/mailman/listinfo/svn-src-head > To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org" > _______________________________________________ svn-src-head@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/svn-src-head To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"