cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

errname.c (3738B)


      1// SPDX-License-Identifier: GPL-2.0
      2#include <linux/build_bug.h>
      3#include <linux/errno.h>
      4#include <linux/errname.h>
      5#include <linux/kernel.h>
      6#include <linux/math.h>
      7
      8/*
      9 * Ensure these tables do not accidentally become gigantic if some
     10 * huge errno makes it in. On most architectures, the first table will
     11 * only have about 140 entries, but mips and parisc have more sparsely
     12 * allocated errnos (with EHWPOISON = 257 on parisc, and EDQUOT = 1133
     13 * on mips), so this wastes a bit of space on those - though we
     14 * special case the EDQUOT case.
     15 */
     16#define E(err) [err + BUILD_BUG_ON_ZERO(err <= 0 || err > 300)] = "-" #err
     17static const char *names_0[] = {
     18	E(E2BIG),
     19	E(EACCES),
     20	E(EADDRINUSE),
     21	E(EADDRNOTAVAIL),
     22	E(EADV),
     23	E(EAFNOSUPPORT),
     24	E(EALREADY),
     25	E(EBADE),
     26	E(EBADF),
     27	E(EBADFD),
     28	E(EBADMSG),
     29	E(EBADR),
     30	E(EBADRQC),
     31	E(EBADSLT),
     32	E(EBFONT),
     33	E(EBUSY),
     34#ifdef ECANCELLED
     35	E(ECANCELLED),
     36#endif
     37	E(ECHILD),
     38	E(ECHRNG),
     39	E(ECOMM),
     40	E(ECONNABORTED),
     41	E(ECONNRESET),
     42	E(EDEADLOCK),
     43	E(EDESTADDRREQ),
     44	E(EDOM),
     45	E(EDOTDOT),
     46#ifndef CONFIG_MIPS
     47	E(EDQUOT),
     48#endif
     49	E(EEXIST),
     50	E(EFAULT),
     51	E(EFBIG),
     52	E(EHOSTDOWN),
     53	E(EHOSTUNREACH),
     54	E(EHWPOISON),
     55	E(EIDRM),
     56	E(EILSEQ),
     57#ifdef EINIT
     58	E(EINIT),
     59#endif
     60	E(EINPROGRESS),
     61	E(EINTR),
     62	E(EINVAL),
     63	E(EIO),
     64	E(EISCONN),
     65	E(EISDIR),
     66	E(EISNAM),
     67	E(EKEYEXPIRED),
     68	E(EKEYREJECTED),
     69	E(EKEYREVOKED),
     70	E(EL2HLT),
     71	E(EL2NSYNC),
     72	E(EL3HLT),
     73	E(EL3RST),
     74	E(ELIBACC),
     75	E(ELIBBAD),
     76	E(ELIBEXEC),
     77	E(ELIBMAX),
     78	E(ELIBSCN),
     79	E(ELNRNG),
     80	E(ELOOP),
     81	E(EMEDIUMTYPE),
     82	E(EMFILE),
     83	E(EMLINK),
     84	E(EMSGSIZE),
     85	E(EMULTIHOP),
     86	E(ENAMETOOLONG),
     87	E(ENAVAIL),
     88	E(ENETDOWN),
     89	E(ENETRESET),
     90	E(ENETUNREACH),
     91	E(ENFILE),
     92	E(ENOANO),
     93	E(ENOBUFS),
     94	E(ENOCSI),
     95	E(ENODATA),
     96	E(ENODEV),
     97	E(ENOENT),
     98	E(ENOEXEC),
     99	E(ENOKEY),
    100	E(ENOLCK),
    101	E(ENOLINK),
    102	E(ENOMEDIUM),
    103	E(ENOMEM),
    104	E(ENOMSG),
    105	E(ENONET),
    106	E(ENOPKG),
    107	E(ENOPROTOOPT),
    108	E(ENOSPC),
    109	E(ENOSR),
    110	E(ENOSTR),
    111#ifdef ENOSYM
    112	E(ENOSYM),
    113#endif
    114	E(ENOSYS),
    115	E(ENOTBLK),
    116	E(ENOTCONN),
    117	E(ENOTDIR),
    118	E(ENOTEMPTY),
    119	E(ENOTNAM),
    120	E(ENOTRECOVERABLE),
    121	E(ENOTSOCK),
    122	E(ENOTTY),
    123	E(ENOTUNIQ),
    124	E(ENXIO),
    125	E(EOPNOTSUPP),
    126	E(EOVERFLOW),
    127	E(EOWNERDEAD),
    128	E(EPERM),
    129	E(EPFNOSUPPORT),
    130	E(EPIPE),
    131#ifdef EPROCLIM
    132	E(EPROCLIM),
    133#endif
    134	E(EPROTO),
    135	E(EPROTONOSUPPORT),
    136	E(EPROTOTYPE),
    137	E(ERANGE),
    138	E(EREMCHG),
    139#ifdef EREMDEV
    140	E(EREMDEV),
    141#endif
    142	E(EREMOTE),
    143	E(EREMOTEIO),
    144#ifdef EREMOTERELEASE
    145	E(EREMOTERELEASE),
    146#endif
    147	E(ERESTART),
    148	E(ERFKILL),
    149	E(EROFS),
    150#ifdef ERREMOTE
    151	E(ERREMOTE),
    152#endif
    153	E(ESHUTDOWN),
    154	E(ESOCKTNOSUPPORT),
    155	E(ESPIPE),
    156	E(ESRCH),
    157	E(ESRMNT),
    158	E(ESTALE),
    159	E(ESTRPIPE),
    160	E(ETIME),
    161	E(ETIMEDOUT),
    162	E(ETOOMANYREFS),
    163	E(ETXTBSY),
    164	E(EUCLEAN),
    165	E(EUNATCH),
    166	E(EUSERS),
    167	E(EXDEV),
    168	E(EXFULL),
    169
    170	E(ECANCELED), /* ECANCELLED */
    171	E(EAGAIN), /* EWOULDBLOCK */
    172	E(ECONNREFUSED), /* EREFUSED */
    173	E(EDEADLK), /* EDEADLOCK */
    174};
    175#undef E
    176
    177#define E(err) [err - 512 + BUILD_BUG_ON_ZERO(err < 512 || err > 550)] = "-" #err
    178static const char *names_512[] = {
    179	E(ERESTARTSYS),
    180	E(ERESTARTNOINTR),
    181	E(ERESTARTNOHAND),
    182	E(ENOIOCTLCMD),
    183	E(ERESTART_RESTARTBLOCK),
    184	E(EPROBE_DEFER),
    185	E(EOPENSTALE),
    186	E(ENOPARAM),
    187
    188	E(EBADHANDLE),
    189	E(ENOTSYNC),
    190	E(EBADCOOKIE),
    191	E(ENOTSUPP),
    192	E(ETOOSMALL),
    193	E(ESERVERFAULT),
    194	E(EBADTYPE),
    195	E(EJUKEBOX),
    196	E(EIOCBQUEUED),
    197	E(ERECALLCONFLICT),
    198};
    199#undef E
    200
    201static const char *__errname(unsigned err)
    202{
    203	if (err < ARRAY_SIZE(names_0))
    204		return names_0[err];
    205	if (err >= 512 && err - 512 < ARRAY_SIZE(names_512))
    206		return names_512[err - 512];
    207	/* But why? */
    208	if (IS_ENABLED(CONFIG_MIPS) && err == EDQUOT) /* 1133 */
    209		return "-EDQUOT";
    210	return NULL;
    211}
    212
    213/*
    214 * errname(EIO) -> "EIO"
    215 * errname(-EIO) -> "-EIO"
    216 */
    217const char *errname(int err)
    218{
    219	const char *name = __errname(abs(err));
    220	if (!name)
    221		return NULL;
    222
    223	return err > 0 ? name + 1 : name;
    224}