CTASSERT that native to compat errno translation tables are kept in

sync with native errno list.

Remove extra entries (linux) which resulted in bad translated values,
and add missing ones (ibcs2, osf1 and svr4) which made some out of
bounds accesses.
This commit is contained in:
njoly 2013-12-22 17:14:22 +00:00
parent 7aa5a25a2b
commit b50661d98e
5 changed files with 62 additions and 54 deletions

View File

@ -1,4 +1,4 @@
/* $NetBSD: ibcs2_errno.c,v 1.8 2001/11/13 02:08:21 lukem Exp $ */
/* $NetBSD: ibcs2_errno.c,v 1.9 2013/12/22 17:14:22 njoly Exp $ */
/*
* ibcs2_errno.c
@ -32,7 +32,9 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: ibcs2_errno.c,v 1.8 2001/11/13 02:08:21 lukem Exp $");
__KERNEL_RCSID(0, "$NetBSD: ibcs2_errno.c,v 1.9 2013/12/22 17:14:22 njoly Exp $");
#include <sys/errno.h>
#include <compat/ibcs2/ibcs2_errno.h>
@ -121,4 +123,18 @@ int const native_to_ibcs2_errno[] = {
0, /* 81 */
IBCS2_EIDRM, /* 82 */
IBCS2_ENOMSG, /* 83 */
IBCS2_EOVERFLOW, /* 84 */
IBCS2_EILSEQ, /* 85 */
0, /* 86 ENOTSUP */
0, /* 87 ECANCELED */
IBCS2_EBADMSG, /* 88 */
IBCS2_ENODATA, /* 89 */
IBCS2_ENOSR, /* 90 */
IBCS2_ENOSTR, /* 91 */
IBCS2_ETIME, /* 92 */
0, /* 93 ENOATTR */
IBCS2_EMULTIHOP, /* 94 */
IBCS2_ENOLINK, /* 95 */
IBCS2_EPROTO, /* 96 */
};
__CTASSERT(__arraycount(native_to_ibcs2_errno) == ELAST + 1);

View File

@ -1,4 +1,4 @@
/* $NetBSD: linux_errno.c,v 1.14 2013/12/17 22:14:24 njoly Exp $ */
/* $NetBSD: linux_errno.c,v 1.15 2013/12/22 17:14:22 njoly Exp $ */
/*-
* Copyright (c) 1995 The NetBSD Foundation, Inc.
@ -30,7 +30,9 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: linux_errno.c,v 1.14 2013/12/17 22:14:24 njoly Exp $");
__KERNEL_RCSID(0, "$NetBSD: linux_errno.c,v 1.15 2013/12/22 17:14:22 njoly Exp $");
#include <sys/errno.h>
#include <compat/linux/common/linux_errno.h>
@ -136,49 +138,5 @@ const int native_to_linux_errno[] = {
LINUX_SCERR_SIGN LINUX_EMULTIHOP,
LINUX_SCERR_SIGN LINUX_ENOLINK,
LINUX_SCERR_SIGN LINUX_EPROTO, /* 96 */
/*
* The rest of the list consists of errors that only
* Linux has. They can be used to map them on to
* themselves, so Linux emulating syscalls can return
* these values.
*/
LINUX_SCERR_SIGN LINUX_ECHRNG,
LINUX_SCERR_SIGN LINUX_EL2NSYNC,
LINUX_SCERR_SIGN LINUX_EL3HLT,
LINUX_SCERR_SIGN LINUX_EL3RST,
LINUX_SCERR_SIGN LINUX_ELNRNG,
LINUX_SCERR_SIGN LINUX_EUNATCH,
LINUX_SCERR_SIGN LINUX_ENOCSI,
LINUX_SCERR_SIGN LINUX_EL2HLT,
LINUX_SCERR_SIGN LINUX_EBADE,
LINUX_SCERR_SIGN LINUX_EBADR,
LINUX_SCERR_SIGN LINUX_EXFULL,
LINUX_SCERR_SIGN LINUX_ENOANO,
LINUX_SCERR_SIGN LINUX_EBADRQC,
LINUX_SCERR_SIGN LINUX_EBADSLT,
LINUX_SCERR_SIGN LINUX_EDEADLOCK,
LINUX_SCERR_SIGN LINUX_EBFONT,
LINUX_SCERR_SIGN LINUX_ENONET,
LINUX_SCERR_SIGN LINUX_ENOPKG,
LINUX_SCERR_SIGN LINUX_EADV,
LINUX_SCERR_SIGN LINUX_ESRMNT,
LINUX_SCERR_SIGN LINUX_ECOMM,
LINUX_SCERR_SIGN LINUX_EDOTDOT,
LINUX_SCERR_SIGN LINUX_ENOTUNIQ,
LINUX_SCERR_SIGN LINUX_EBADFD,
LINUX_SCERR_SIGN LINUX_EREMCHG,
LINUX_SCERR_SIGN LINUX_ELIBACC,
LINUX_SCERR_SIGN LINUX_ELIBBAD,
LINUX_SCERR_SIGN LINUX_ELIBSCN,
LINUX_SCERR_SIGN LINUX_ELIBMAX,
LINUX_SCERR_SIGN LINUX_ELIBEXEC,
LINUX_SCERR_SIGN LINUX_ERESTART,
LINUX_SCERR_SIGN LINUX_ESTRPIPE,
LINUX_SCERR_SIGN LINUX_EUCLEAN,
LINUX_SCERR_SIGN LINUX_ENOTNAM,
LINUX_SCERR_SIGN LINUX_ENAVAIL,
LINUX_SCERR_SIGN LINUX_EISNAM,
LINUX_SCERR_SIGN LINUX_EREMOTEIO,
};
__CTASSERT(__arraycount(native_to_linux_errno) == ELAST + 1);

View File

@ -1,4 +1,4 @@
/* $NetBSD: osf1_errno.c,v 1.6 2013/01/02 18:48:22 dsl Exp $ */
/* $NetBSD: osf1_errno.c,v 1.7 2013/12/22 17:14:22 njoly Exp $ */
/*
* Copyright (c) 1999 Christopher G. Demetriou. All rights reserved.
@ -31,7 +31,9 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: osf1_errno.c,v 1.6 2013/01/02 18:48:22 dsl Exp $");
__KERNEL_RCSID(0, "$NetBSD: osf1_errno.c,v 1.7 2013/12/22 17:14:22 njoly Exp $");
#include <sys/errno.h>
#include <compat/osf1/osf1.h>
@ -128,4 +130,17 @@ const int native_to_osf1_errno[] = {
OSF1_EIDRM, /* EIDRM (82) -> 81 */
OSF1_ENOMSG, /* ENOMSG (83) -> 80 */
OSF1_EOVERFLOW, /* EOVERFLOW (84) -> 103 */
OSF1_EILSEQ, /* EILSEQ (85) -> 116 */
OSF1_ENOTSUP, /* ENOTSUP (86) -> 99 */
OSF1_ECANCELED, /* ECANCELED (87) -> 94 */
OSF1_EBADMSG, /* EBADMSG (88) -> 84 */
OSF1_ENODATA, /* ENODATA (89) -> 86 */
OSF1_ENOSR, /* ENOSR (90) -> 82 */
OSF1_ENOSTR, /* ENOSTR (91) -> 87 */
OSF1_ETIME, /* ETIME (92) -> 83 */
OSF1_ENOSYS, /* ENOATTR (93) has no equivalent */
OSF1_EMULTIHOP, /* EMULTIHOP (94) -> 101 */
OSF1_ENOLINK, /* ENOLINK (95) -> 102 */
OSF1_EPROTO, /* EPROTO (96) -> 85 */
};
__CTASSERT(__arraycount(native_to_osf1_errno) == ELAST + 1);

View File

@ -1,4 +1,4 @@
/* $NetBSD: svr4_errno.c,v 1.10 2008/04/28 20:23:45 martin Exp $ */
/* $NetBSD: svr4_errno.c,v 1.11 2013/12/22 17:14:22 njoly Exp $ */
/*-
* Copyright (c) 1994 The NetBSD Foundation, Inc.
@ -34,7 +34,9 @@
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: svr4_errno.c,v 1.10 2008/04/28 20:23:45 martin Exp $");
__KERNEL_RCSID(0, "$NetBSD: svr4_errno.c,v 1.11 2013/12/22 17:14:22 njoly Exp $");
#include <sys/errno.h>
#include <compat/svr4/svr4_errno.h>
@ -124,4 +126,18 @@ const int native_to_svr4_errno[] = {
SVR4_ENEEDAUTH,
SVR4_EIDRM,
SVR4_ENOMSG,
SVR4_EOVERFLOW,
SVR4_EILSEQ,
SVR4_ENOTSUP,
SVR4_ECANCELED,
SVR4_EBADMSG,
SVR4_ENODATA,
SVR4_ENOSR,
SVR4_ENOSTR,
SVR4_ETIME,
SVR4_ENOATTR,
SVR4_EMULTIHOP,
SVR4_ENOLINK,
SVR4_EPROTO,
};
__CTASSERT(__arraycount(native_to_svr4_errno) == ELAST + 1);

View File

@ -1,4 +1,4 @@
/* $NetBSD: svr4_errno.h,v 1.7 2008/04/28 20:23:45 martin Exp $ */
/* $NetBSD: svr4_errno.h,v 1.8 2013/12/22 17:14:22 njoly Exp $ */
/*-
* Copyright (c) 1994 The NetBSD Foundation, Inc.
@ -169,6 +169,9 @@
#define SVR4_EFTYPE SVR4_ENOSYS
#define SVR4_EAUTH SVR4_ENOSYS
#define SVR4_ENEEDAUTH SVR4_ENOSYS
#define SVR4_ENOTSUP SVR4_ENOSYS
#define SVR4_ECANCELED SVR4_ENOSYS
#define SVR4_ENOATTR SVR4_ENOSYS
extern const int native_to_svr4_errno[];