~ubuntu-branches/ubuntu/dapper/linux-source-2.6.15/dapper-updates

« back to all changes in this revision

Viewing changes to arch/sparc/kernel/sys_sparc.c

  • Committer: Bazaar Package Importer
  • Author(s): Stefan Bader, Stefan Bader, Upstream Kernel Changes
  • Date: 2009-03-16 17:26:53 UTC
  • mfrom: (41.1.8 dapper-security)
  • Revision ID: james.westby@ubuntu.com-20090316172653-tfjmtzutjafofqct
Tags: 2.6.15-54.76
[ Stefan Bader ]

* Fixing up powerpc specific syscalls
  - CVE-2009-0029

[ Upstream Kernel Changes ]

* NFS: Remove the buggy lock-if-signalled case from do_setlk()
  - CVE-2008-4307
* sctp: Avoid memory overflow while FWD-TSN chunk is received with bad
  stream ID
  - CVE-2009-0065
* net: 4 bytes kernel memory disclosure in SO_BSDCOMPAT gsopt try #2
  - CVE-2009-0676
* sparc: Fix mremap address range validation.
  - CVE-2008-6107
* copy_process: fix CLONE_PARENT && parent_exec_id interaction
  - CVE-2009-0028
* dell_rbu: use scnprintf() instead of less secure sprintf()
  - CVE-2009-0322
* drivers/net/skfp: if !capable(CAP_NET_ADMIN): inverted logic
  - CVE-2009-0675
* x86_64: Implement is_compat_task the right way
  - CVE-2009-0834
* x86-64: syscall-audit: fix 32/64 syscall hole
  - CVE-2009-0834
* x86-64: seccomp: fix 32/64 syscall hole
  - CVE-2009-0835
* shm: fix shmctl(SHM_INFO) lockup with !CONFIG_SHMEM
  - CVE-2009-0859
* udf: Fix oops when invalid character in
  filename occurs
  - LP: #321606
* Convert all system calls to return a long
  - CVE-2009-0029
* Rename old_readdir to sys_old_readdir
  - CVE-2009-0029
* Remove __attribute__((weak)) from sys_pipe/sys_pipe2
  - CVE-2009-0029
* Make sys_syslog a conditional system call
  - CVE-2009-0029
* System call wrapper infrastructure
  - CVE-2009-0029
* powerpc: Enable syscall wrappers for 64-bit
  - CVE-2009-0029
* s390: enable system call wrappers
  - CVE-2009-0029
* System call wrapper special cases
  - CVE-2009-0029
* Bump ABI
* System call wrappers part 01
  - CVE-2009-0029
* System call wrappers part 02
  - CVE-2009-0029
* System call wrappers part 03
  - CVE-2009-0029
* System call wrappers part 04
  - CVE-2009-0029
* System call wrappers part 05
  - CVE-2009-0029
* System call wrappers part 06
  - CVE-2009-0029
* System call wrappers part 07
  - CVE-2009-0029
* System call wrappers part 08
  - CVE-2009-0029
* System call wrappers part 09
  - CVE-2009-0029
* System call wrappers part 10
  - CVE-2009-0029
* System call wrappers part 11
  - CVE-2009-0029
* System call wrappers part 12
  - CVE-2009-0029
* System call wrappers part 13
  - CVE-2009-0029
* System call wrappers part 14
  - CVE-2009-0029
* System call wrappers part 15
  - CVE-2009-0029
* System call wrappers part 16
  - CVE-2009-0029
* System call wrappers part 17
  - CVE-2009-0029
* System call wrappers part 18
  - CVE-2009-0029
* System call wrappers part 19
  - CVE-2009-0029
* System call wrappers part 20
  - CVE-2009-0029
* System call wrappers part 21
  - CVE-2009-0029
* System call wrappers part 22
  - CVE-2009-0029
* System call wrappers part 23
  - CVE-2009-0029
* System call wrappers part 24
  - CVE-2009-0029
* System call wrappers part 25
  - CVE-2009-0029
* System call wrappers part 26
  - CVE-2009-0029
* System call wrappers part 27
  - CVE-2009-0029
* System call wrappers part 28
  - CVE-2009-0029
* System call wrappers part 29
  - CVE-2009-0029
* System call wrappers part 32
  - CVE-2009-0029
* System call wrappers part 33
  - CVE-2009-0029
* s390 specific system call wrappers
  - CVE-2009-0029
* sparc: Enable syscall wrappers for 64-bit (CVE-2009-0029)
  - CVE-2009-0029
* syscall define: fix uml compile bug
  - CVE-2009-0029
* Fixing up the syscall wrappers to match the Dapper (2.6.15) kernel
  - CVE-2009-0029

Show diffs side-by-side

added added

removed removed

Lines of Context:
92
92
 * sys_pipe() is the normal C calling standard for creating
93
93
 * a pipe. It's not the way unix traditionally does this, though.
94
94
 */
95
 
asmlinkage int sparc_pipe(struct pt_regs *regs)
 
95
asmlinkage long sparc_pipe(struct pt_regs *regs)
96
96
{
97
97
        int fd[2];
98
98
        int error;
219
219
        return err;
220
220
}
221
221
 
222
 
int sparc_mmap_check(unsigned long addr, unsigned long len, unsigned long flags)
 
222
int sparc_mmap_check(unsigned long addr, unsigned long len)
223
223
{
224
224
        if (ARCH_SUN4C_SUN4 &&
225
225
            (len > 0x20000000 ||
295
295
        unsigned long old_len, unsigned long new_len,
296
296
        unsigned long flags, unsigned long new_addr)
297
297
{
298
 
        struct vm_area_struct *vma;
299
298
        unsigned long ret = -EINVAL;
300
 
        if (ARCH_SUN4C_SUN4) {
301
 
                if (old_len > 0x20000000 || new_len > 0x20000000)
302
 
                        goto out;
303
 
                if (addr < 0xe0000000 && addr + old_len > 0x20000000)
304
 
                        goto out;
305
 
        }
306
 
        if (old_len > TASK_SIZE - PAGE_SIZE ||
307
 
            new_len > TASK_SIZE - PAGE_SIZE)
 
299
 
 
300
        if (unlikely(sparc_mmap_check(addr, old_len)))
 
301
                goto out;
 
302
        if (unlikely(sparc_mmap_check(new_addr, new_len)))
308
303
                goto out;
309
304
        down_write(&current->mm->mmap_sem);
310
 
        if (flags & MREMAP_FIXED) {
311
 
                if (ARCH_SUN4C_SUN4 &&
312
 
                    new_addr < 0xe0000000 &&
313
 
                    new_addr + new_len > 0x20000000)
314
 
                        goto out_sem;
315
 
                if (new_addr + new_len > TASK_SIZE - PAGE_SIZE)
316
 
                        goto out_sem;
317
 
        } else if ((ARCH_SUN4C_SUN4 && addr < 0xe0000000 &&
318
 
                    addr + new_len > 0x20000000) ||
319
 
                   addr + new_len > TASK_SIZE - PAGE_SIZE) {
320
 
                unsigned long map_flags = 0;
321
 
                struct file *file = NULL;
322
 
 
323
 
                ret = -ENOMEM;
324
 
                if (!(flags & MREMAP_MAYMOVE))
325
 
                        goto out_sem;
326
 
 
327
 
                vma = find_vma(current->mm, addr);
328
 
                if (vma) {
329
 
                        if (vma->vm_flags & VM_SHARED)
330
 
                                map_flags |= MAP_SHARED;
331
 
                        file = vma->vm_file;
332
 
                }
333
 
 
334
 
                new_addr = get_unmapped_area(file, addr, new_len,
335
 
                                     vma ? vma->vm_pgoff : 0,
336
 
                                     map_flags);
337
 
                ret = new_addr;
338
 
                if (new_addr & ~PAGE_MASK)
339
 
                        goto out_sem;
340
 
                flags |= MREMAP_FIXED;
341
 
        }
342
305
        ret = do_mremap(addr, old_len, new_len, flags, new_addr);
343
 
out_sem:
344
306
        up_write(&current->mm->mmap_sem);
345
307
out:
346
308
        return ret;