diff options
| author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2009-01-14 08:14:02 -0500 |
|---|---|---|
| committer | Heiko Carstens <heiko.carstens@de.ibm.com> | 2009-01-14 08:15:18 -0500 |
| commit | 6673e0c3fbeaed2cd08e2fd4a4aa97382d6fedb0 (patch) | |
| tree | eb33a94f5e4b0e035001f7c96ef44cade0fbb489 /ipc | |
| parent | ed6bb6194350dc6ae97a65dbf2d621a3dbe6bbe9 (diff) | |
[CVE-2009-0029] System call wrapper special cases
System calls with an unsigned long long argument can't be converted with
the standard wrappers since that would include a cast to long, which in
turn means that we would lose the upper 32 bit on 32 bit architectures.
Also semctl can't use the standard wrapper since it has a 'union'
parameter.
So we handle them as special case and add some extra wrappers instead.
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Diffstat (limited to 'ipc')
| -rw-r--r-- | ipc/sem.c | 9 |
1 files changed, 8 insertions, 1 deletions
| @@ -887,7 +887,7 @@ out_up: | |||
| 887 | return err; | 887 | return err; |
| 888 | } | 888 | } |
| 889 | 889 | ||
| 890 | asmlinkage long sys_semctl (int semid, int semnum, int cmd, union semun arg) | 890 | SYSCALL_DEFINE(semctl)(int semid, int semnum, int cmd, union semun arg) |
| 891 | { | 891 | { |
| 892 | int err = -EINVAL; | 892 | int err = -EINVAL; |
| 893 | int version; | 893 | int version; |
| @@ -923,6 +923,13 @@ asmlinkage long sys_semctl (int semid, int semnum, int cmd, union semun arg) | |||
| 923 | return -EINVAL; | 923 | return -EINVAL; |
| 924 | } | 924 | } |
| 925 | } | 925 | } |
| 926 | #ifdef CONFIG_HAVE_SYSCALL_WRAPPERS | ||
| 927 | asmlinkage long SyS_semctl(int semid, int semnum, int cmd, union semun arg) | ||
| 928 | { | ||
| 929 | return SYSC_semctl((int) semid, (int) semnum, (int) cmd, arg); | ||
| 930 | } | ||
| 931 | SYSCALL_ALIAS(sys_semctl, SyS_semctl); | ||
| 932 | #endif | ||
| 926 | 933 | ||
| 927 | /* If the task doesn't already have a undo_list, then allocate one | 934 | /* If the task doesn't already have a undo_list, then allocate one |
| 928 | * here. We guarantee there is only one thread using this undo list, | 935 | * here. We guarantee there is only one thread using this undo list, |
