Skip to content

Commit

Permalink
[PATCH] consistently use MAX_ERRNO in __syscall_return
Browse files Browse the repository at this point in the history
Consistently use MAX_ERRNO when checking for errors in __syscall_return().

[[email protected]: build fix]
Signed-off-by: Randy Dunlap <[email protected]>
Signed-off-by: Ralf Baechle <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
rddunlap authored and Linus Torvalds committed Sep 27, 2006
1 parent bd8e39f commit ebba5f9
Show file tree
Hide file tree
Showing 14 changed files with 43 additions and 23 deletions.
3 changes: 2 additions & 1 deletion include/asm-arm/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -377,6 +377,7 @@
#endif

#ifdef __KERNEL__
#include <linux/err.h>
#include <linux/linkage.h>

#define __sys2(x) #x
Expand All @@ -396,7 +397,7 @@

#define __syscall_return(type, res) \
do { \
if ((unsigned long)(res) >= (unsigned long)(-129)) { \
if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \
errno = -(res); \
res = -1; \
} \
Expand Down
3 changes: 2 additions & 1 deletion include/asm-arm26/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,7 @@
#define __ARM_NR_usr26 (__ARM_NR_BASE+3)

#ifdef __KERNEL__
#include <linux/err.h>
#include <linux/linkage.h>

#define __sys2(x) #x
Expand All @@ -322,7 +323,7 @@

#define __syscall_return(type, res) \
do { \
if ((unsigned long)(res) >= (unsigned long)(-125)) { \
if ((unsigned long)(res) >= (unsigned long)-MAX_ERRNO) { \
errno = -(res); \
res = -1; \
} \
Expand Down
3 changes: 2 additions & 1 deletion include/asm-frv/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -320,6 +320,7 @@
#ifdef __KERNEL__

#define NR_syscalls 310
#include <linux/err.h>

/*
* process the return value of a syscall, consigning it to one of two possible fates
Expand All @@ -329,7 +330,7 @@
#define __syscall_return(type, res) \
do { \
unsigned long __sr2 = (res); \
if (__builtin_expect(__sr2 >= (unsigned long)(-4095), 0)) { \
if (__builtin_expect(__sr2 >= (unsigned long)(-MAX_ERRNO), 0)) { \
errno = (-__sr2); \
__sr2 = ~0UL; \
} \
Expand Down
6 changes: 3 additions & 3 deletions include/asm-h8300/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -295,14 +295,14 @@
#ifdef __KERNEL__

#define NR_syscalls 289
#include <linux/err.h>


/* user-visible error numbers are in the range -1 - -122: see
/* user-visible error numbers are in the range -1 - -MAX_ERRNO: see
<asm-m68k/errno.h> */

#define __syscall_return(type, res) \
do { \
if ((unsigned long)(res) >= (unsigned long)(-125)) { \
if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \
/* avoid using res which is declared to be in register d0; \
errno might expand to a function call and clobber it. */ \
int __err = -(res); \
Expand Down
5 changes: 3 additions & 2 deletions include/asm-i386/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -328,14 +328,15 @@
#ifdef __KERNEL__

#define NR_syscalls 319
#include <linux/err.h>

/*
* user-visible error numbers are in the range -1 - -128: see
* user-visible error numbers are in the range -1 - -MAX_ERRNO: see
* <asm-i386/errno.h>
*/
#define __syscall_return(type, res) \
do { \
if ((unsigned long)(res) >= (unsigned long)(-(128 + 1))) { \
if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \
errno = -(res); \
res = -1; \
} \
Expand Down
5 changes: 3 additions & 2 deletions include/asm-m32r/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -296,16 +296,17 @@
#ifdef __KERNEL__

#define NR_syscalls 285
#include <linux/err.h>

/* user-visible error numbers are in the range -1 - -124: see
/* user-visible error numbers are in the range -1 - -MAX_ERRNO: see
* <asm-m32r/errno.h>
*/

#include <asm/syscall.h> /* SYSCALL_* */

#define __syscall_return(type, res) \
do { \
if ((unsigned long)(res) >= (unsigned long)(-(124 + 1))) { \
if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \
/* Avoid using "res" which is declared to be in register r0; \
errno might expand to a function call and clobber it. */ \
int __err = -(res); \
Expand Down
5 changes: 3 additions & 2 deletions include/asm-m68k/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -288,13 +288,14 @@
#ifdef __KERNEL__

#define NR_syscalls 282
#include <linux/err.h>

/* user-visible error numbers are in the range -1 - -124: see
/* user-visible error numbers are in the range -1 - -MAX_ERRNO: see
<asm-m68k/errno.h> */

#define __syscall_return(type, res) \
do { \
if ((unsigned long)(res) >= (unsigned long)(-125)) { \
if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \
/* avoid using res which is declared to be in register d0; \
errno might expand to a function call and clobber it. */ \
int __err = -(res); \
Expand Down
5 changes: 3 additions & 2 deletions include/asm-m68knommu/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -289,13 +289,14 @@
#ifdef __KERNEL__

#define NR_syscalls 282
#include <linux/err.h>

/* user-visible error numbers are in the range -1 - -122: see
/* user-visible error numbers are in the range -1 - -MAX_ERRNO: see
<asm-m68k/errno.h> */

#define __syscall_return(type, res) \
do { \
if ((unsigned long)(res) >= (unsigned long)(-125)) { \
if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \
/* avoid using res which is declared to be in register d0; \
errno might expand to a function call and clobber it. */ \
int __err = -(res); \
Expand Down
4 changes: 3 additions & 1 deletion include/asm-s390/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -342,9 +342,11 @@

#ifdef __KERNEL__

#include <linux/err.h>

#define __syscall_return(type, res) \
do { \
if ((unsigned long)(res) >= (unsigned long)(-4095)) {\
if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \
errno = -(res); \
res = -1; \
} \
Expand Down
7 changes: 5 additions & 2 deletions include/asm-sh/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -306,11 +306,14 @@

#ifdef __KERNEL__

/* user-visible error numbers are in the range -1 - -124: see <asm-sh/errno.h> */
#include <linux/err.h>

/* user-visible error numbers are in the range -1 - -MAX_ERRNO:
* see <asm-sh/errno.h> */

#define __syscall_return(type, res) \
do { \
if ((unsigned long)(res) >= (unsigned long)(-124)) { \
if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \
/* Avoid using "res" which is declared to be in register r0; \
errno might expand to a function call and clobber it. */ \
int __err = -(res); \
Expand Down
6 changes: 4 additions & 2 deletions include/asm-sh64/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -347,8 +347,10 @@
#ifdef __KERNEL__

#define NR_syscalls 321
#include <linux/err.h>

/* user-visible error numbers are in the range -1 - -125: see <asm-sh64/errno.h> */
/* user-visible error numbers are in the range -1 - -MAX_ERRNO:
* see <asm-sh64/errno.h> */

#define __syscall_return(type, res) \
do { \
Expand All @@ -358,7 +360,7 @@ do { \
** life easier in the system call epilogue (see entry.S) \
*/ \
register unsigned long __sr2 __asm__ ("r2") = res; \
if ((unsigned long)(res) >= (unsigned long)(-125)) { \
if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \
errno = -(res); \
__sr2 = -1; \
} \
Expand Down
5 changes: 3 additions & 2 deletions include/asm-v850/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -238,12 +238,13 @@
#ifdef __KERNEL__

#include <asm/clinkage.h>
#include <linux/err.h>

#define __syscall_return(type, res) \
do { \
/* user-visible error numbers are in the range -1 - -124: \
/* user-visible error numbers are in the range -1 - -MAX_ERRNO: \
see <asm-v850/errno.h> */ \
if (__builtin_expect ((unsigned long)(res) >= (unsigned long)(-125), 0)) { \
if (__builtin_expect ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO), 0)) { \
errno = -(res); \
res = -1; \
} \
Expand Down
5 changes: 3 additions & 2 deletions include/asm-x86_64/unistd.h
Original file line number Diff line number Diff line change
Expand Up @@ -623,16 +623,17 @@ __SYSCALL(__NR_move_pages, sys_move_pages)
#ifdef __KERNEL__

#define __NR_syscall_max __NR_move_pages
#include <linux/err.h>

#ifndef __NO_STUBS

/* user-visible error numbers are in the range -1 - -4095 */
/* user-visible error numbers are in the range -1 - -MAX_ERRNO */

#define __syscall_clobber "r11","rcx","memory"

#define __syscall_return(type, res) \
do { \
if ((unsigned long)(res) >= (unsigned long)(-127)) { \
if ((unsigned long)(res) >= (unsigned long)(-MAX_ERRNO)) { \
errno = -(res); \
res = -1; \
} \
Expand Down
4 changes: 4 additions & 0 deletions include/linux/err.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
*/
#define MAX_ERRNO 4095

#ifndef __ASSEMBLY__

#define IS_ERR_VALUE(x) unlikely((x) >= (unsigned long)-MAX_ERRNO)

static inline void *ERR_PTR(long error)
Expand All @@ -32,4 +34,6 @@ static inline long IS_ERR(const void *ptr)
return IS_ERR_VALUE((unsigned long)ptr);
}

#endif

#endif /* _LINUX_ERR_H */

0 comments on commit ebba5f9

Please sign in to comment.