Skip to contentSkip to conversation

Shift key-related error codes up and insert ECANCELED

PATCH In review David Howells 4 participants 5 messages Oct 22, 2004 – Oct 25, 2004 Generic include/asm header files

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 Shift key-related error codes up and insert ECANCELED

This patch shifts the key-related error codes up by one and inserts an ECANCELED error code where not already defined. It seems that has been defined in glibc without passing it back to the kernel:-/

Who arbitrates error number allocations anyway?

---
warthog>diffstat errno-269bk5.diff

 asm-alpha/errno.h   |    9 +++++----
 asm-generic/errno.h |    9 +++++----
 asm-sparc/errno.h   |    9 +++++----
 asm-sparc64/errno.h |    9 +++++----
 4 files changed, 20 insertions(+), 16 deletions(-)
include/asm-alpha/errno.h +5 -4
diff -uNrp linux-2.6.9-bk5/include/asm-alpha/errno.h linux-2.6.9-bk5-keys/include/asm-alpha/errno.h
@@ -110,9 +110,10 @@
 
 #define ENOMEDIUM	129	/* No medium found */
 #define EMEDIUMTYPE	130	/* Wrong medium type */
-#define	ENOKEY		131	/* Required key not available */
-#define	EKEYEXPIRED	132	/* Key has expired */
-#define	EKEYREVOKED	133	/* Key has been revoked */
-#define	EKEYREJECTED	134	/* Key was rejected by service */
+#define	ECANCELED	131	/* Operation Cancelled */
+#define	ENOKEY		132	/* Required key not available */
+#define	EKEYEXPIRED	133	/* Key has expired */
+#define	EKEYREVOKED	134	/* Key has been revoked */
+#define	EKEYREJECTED	135	/* Key was rejected by service */
 
 #endif
include/asm-generic/errno.h +5 -4
diff -uNrp linux-2.6.9-bk5/include/asm-generic/errno.h linux-2.6.9-bk5-keys/include/asm-generic/errno.h
@@ -96,9 +96,10 @@
 
 #define	ENOMEDIUM	123	/* No medium found */
 #define	EMEDIUMTYPE	124	/* Wrong medium type */
-#define	ENOKEY		125	/* Required key not available */
-#define	EKEYEXPIRED	126	/* Key has expired */
-#define	EKEYREVOKED	127	/* Key has been revoked */
-#define	EKEYREJECTED	128	/* Key was rejected by service */
+#define	ECANCELED	125	/* Operation Canceled */
+#define	ENOKEY		126	/* Required key not available */
+#define	EKEYEXPIRED	127	/* Key has expired */
+#define	EKEYREVOKED	128	/* Key has been revoked */
+#define	EKEYREJECTED	129	/* Key was rejected by service */
 
 #endif
include/asm-sparc/errno.h +5 -4
diff -uNrp linux-2.6.9-bk5/include/asm-sparc/errno.h linux-2.6.9-bk5-keys/include/asm-sparc/errno.h
@@ -101,9 +101,10 @@
 
 #define	ENOMEDIUM	125	/* No medium found */
 #define	EMEDIUMTYPE	126	/* Wrong medium type */
-#define	ENOKEY		127	/* Required key not available */
-#define	EKEYEXPIRED	128	/* Key has expired */
-#define	EKEYREVOKED	129	/* Key has been revoked */
-#define	EKEYREJECTED	130	/* Key was rejected by service */
+#define	ECANCELED	127	/* Operation Cancelled */
+#define	ENOKEY		128	/* Required key not available */
+#define	EKEYEXPIRED	129	/* Key has expired */
+#define	EKEYREVOKED	130	/* Key has been revoked */
+#define	EKEYREJECTED	131	/* Key was rejected by service */
 
 #endif
include/asm-sparc64/errno.h +5 -4
diff -uNrp linux-2.6.9-bk5/include/asm-sparc64/errno.h linux-2.6.9-bk5-keys/include/asm-sparc64/errno.h
@@ -101,9 +101,10 @@
 
 #define ENOMEDIUM       125     /* No medium found */
 #define EMEDIUMTYPE     126     /* Wrong medium type */
-#define	ENOKEY		127	/* Required key not available */
-#define	EKEYEXPIRED	128	/* Key has expired */
-#define	EKEYREVOKED	129	/* Key has been revoked */
-#define	EKEYREJECTED	130	/* Key was rejected by service */
+#define	ECANCELED	127	/* Operation Cancelled */
+#define	ENOKEY		128	/* Required key not available */
+#define	EKEYEXPIRED	129	/* Key has expired */
+#define	EKEYREVOKED	130	/* Key has been revoked */
+#define	EKEYREJECTED	131	/* Key was rejected by service */
 
 #endif /* !(_SPARC64_ERRNO_H) */
#1 lore raw
Quoted 4 lines · David Howells

This patch shifts the key-related error codes up by one and inserts an ECANCELED error code where not already defined. It seems that has been defined in glibc without passing it back to the kernel:-/

Not sure what's the story behind ECANCELED not being in kernel headers, certainly it is something only userland needs ATM.
It is a POSIX mandated errno code used in aio_* that glibc is using since 1998, so it would be really bad to break all apps using aio.

The values you posted match exactly what glibc is using:

libc/sysdeps/unix/sysv/sysv4/solaris2/bits/errno.h:# define ECANCELED   47      /* Operation canceled.  */
libc/sysdeps/unix/sysv/aix/bits/errno.h:# define ECANCELED      117     /* Asynchronous i/o cancelled.  */
libc/sysdeps/unix/sysv/linux/alpha/bits/errno.h:#  define ECANCELED     131
libc/sysdeps/unix/sysv/linux/sparc/bits/errno.h:#  define ECANCELED     127

libc/sysdeps/unix/sysv/linux/bits/errno.h:# define ECANCELED 125
libc/sysdeps/unix/sysv/linux/hppa/bits/errno.h:# define ECANCELED ECANCELLED
libc/sysdeps/mach/hurd/bits/errno.h:#define ECANCELED _HURD_ERRNO (118)/* Operation canceled */

just maybe asm-parisc/errno.h could have
#define ECANCELED ECANCELLED
added (ECANCELED is the POSIX mandated spelling, while asm-parisc/errno.h for some reason defines ECANCELLED).

Jakub

#2 lore raw
In reply to David Howells
Quoted 5 lines · David Howells

This patch shifts the key-related error codes up by one and inserts an ECANCELED error code where not already defined. It seems that has been defined in glibc without passing it back to the kernel:-/

Who arbitrates error number allocations anyway?

Generally nobody because new error codes are almost always a mistake in the first place especially when they don't appear in standards so no application will correctly or sanely handle them.

You should use existing codes IMHO. Lets see

EKEYEXPIRED - ETIME (ETIMEDOUT ? ENOLINK ?)
ENOKEY - ENOENT
EKEYREJECTED - EILSEQ / EMSGSIZE / EPROTOTYPE ..
EKEYREVOKED - EREMCHG / ESHUTDOWN

And now I can use your key stuff with an existing C library and in LSB compliant or cross platform code and give more information. If you look through the kernel history we've almost never ever added an error code, adding them just causes compatibility pain for everyone

Alan

#3 lore raw
Quoted 7 lines

You should use existing codes IMHO. Lets see

EKEYEXPIRED - ETIME (ETIMEDOUT ? ENOLINK ?)
ENOKEY - ENOENT
EKEYREJECTED - EILSEQ / EMSGSIZE / EPROTOTYPE ..
EKEYREVOKED - EREMCHG / ESHUTDOWN

The problem with doing that is that these error codes have specific meanings that we're then violating the standards by overloading. Take open() for
example: it's possible that this will return ENOENT because there's no file there to be opened; I think it's a bad idea for it to return ENOENT when there is a file there, but we don't have a key, hence ENOKEY.

David

#4 lore raw
Quoted 4 lines · David Howells

Take open() for
example: it's possible that this will return ENOENT because there's no file there to be opened; I think it's a bad idea for it to return ENOENT when there is a file there, but we don't have a key, hence ENOKEY.

take open....
you don't have access to the file because you don't have a matching key to get to it. Doesn't that kinda say EACCESS (or EPERM) would be a/the proper return code ?