!C99Shell v. 1.0 pre-release build #13!

Software: Apache/2.0.54 (Unix) mod_perl/1.99_09 Perl/v5.8.0 mod_ssl/2.0.54 OpenSSL/0.9.7l DAV/2 FrontPage/5.0.2.2635 PHP/4.4.0 mod_gzip/2.0.26.1a 

uname -a: Linux snow.he.net 4.4.276-v2-mono-1 #1 SMP Wed Jul 21 11:21:17 PDT 2021 i686 

uid=99(nobody) gid=98(nobody) groups=98(nobody) 

Safe-mode: OFF (not secure)

/usr/src/linux-2.4.18-xfs-1.1/arch/arm/kernel/   drwxr-xr-x
Free 318.37 GB of 458.09 GB (69.5%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     sys_arm.c (6.41 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
/*
 *  linux/arch/arm/kernel/sys_arm.c
 *
 *  Copyright (C) People who wrote linux/arch/i386/kernel/sys_i386.c
 *  Copyright (C) 1995, 1996 Russell King.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 *
 *  This file contains various random system calls that
 *  have a non-standard calling sequence on the Linux/arm
 *  platform.
 */
#include <linux/errno.h>
#include <linux/sched.h>
#include <linux/slab.h>
#include <linux/mm.h>
#include <linux/sem.h>
#include <linux/msg.h>
#include <linux/shm.h>
#include <linux/stat.h>
#include <linux/mman.h>
#include <linux/fs.h>
#include <linux/file.h>
#include <linux/utsname.h>

#include <asm/uaccess.h>
#include <asm/ipc.h>

extern unsigned long do_mremap(unsigned long addr, unsigned long old_len,
                   unsigned long new_len, unsigned long flags,
                   unsigned long new_addr);

/*
 * sys_pipe() is the normal C calling standard for creating
 * a pipe. It's not the way unix traditionally does this, though.
 */
asmlinkage int sys_pipe(unsigned long * fildes)
{
    int fd[2];
    int error;

    error = do_pipe(fd);
    if (!error) {
        if (copy_to_user(fildes, fd, 2*sizeof(int)))
            error = -EFAULT;
    }
    return error;
}

/* common code for old and new mmaps */
inline long do_mmap2(
    unsigned long addr, unsigned long len,
    unsigned long prot, unsigned long flags,
    unsigned long fd, unsigned long pgoff)
{
    int error = -EINVAL;
    struct file * file = NULL;

    flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);

    /*
     * If we are doing a fixed mapping, and address < PAGE_SIZE,
     * then deny it.
     */
    if (flags & MAP_FIXED && addr < PAGE_SIZE && vectors_base() == 0)
        goto out;

    error = -EBADF;
    if (!(flags & MAP_ANONYMOUS)) {
        file = fget(fd);
        if (!file)
            goto out;
    }

    down_write(&current->mm->mmap_sem);
    error = do_mmap_pgoff(file, addr, len, prot, flags, pgoff);
    up_write(&current->mm->mmap_sem);

    if (file)
        fput(file);
out:
    return error;
}

struct mmap_arg_struct {
    unsigned long addr;
    unsigned long len;
    unsigned long prot;
    unsigned long flags;
    unsigned long fd;
    unsigned long offset;
};

asmlinkage int old_mmap(struct mmap_arg_struct *arg)
{
    int error = -EFAULT;
    struct mmap_arg_struct a;

    if (copy_from_user(&a, arg, sizeof(a)))
        goto out;;

    error = -EINVAL;
    if (a.offset & ~PAGE_MASK)
        goto out;

    error = do_mmap2(a.addr, a.len, a.prot, a.flags, a.fd, a.offset >> PAGE_SHIFT);
out:
    return error;
}

asmlinkage unsigned long
sys_arm_mremap(unsigned long addr, unsigned long old_len,
           unsigned long new_len, unsigned long flags,
           unsigned long new_addr)
{
    unsigned long ret = -EINVAL;

    /*
     * If we are doing a fixed mapping, and address < PAGE_SIZE,
     * then deny it.
     */
    if (flags & MREMAP_FIXED && new_addr < PAGE_SIZE &&
        vectors_base() == 0)
        goto out;

    down_write(&current->mm->mmap_sem);
    ret = do_mremap(addr, old_len, new_len, flags, new_addr);
    up_write(&current->mm->mmap_sem);

out:
    return ret;
}

/*
 * Perform the select(nd, in, out, ex, tv) and mmap() system
 * calls.
 */
extern asmlinkage int sys_select(int, fd_set *, fd_set *, fd_set *, struct timeval *);

struct sel_arg_struct {
    unsigned long n;
    fd_set *inp, *outp, *exp;
    struct timeval *tvp;
};

asmlinkage int old_select(struct sel_arg_struct *arg)
{
    struct sel_arg_struct a;

    if (copy_from_user(&a, arg, sizeof(a)))
        return -EFAULT;
    /* sys_select() does the appropriate kernel locking */
    return sys_select(a.n, a.inp, a.outp, a.exp, a.tvp);
}

/*
 * sys_ipc() is the de-multiplexer for the SysV IPC calls..
 *
 * This is really horribly ugly.
 */
asmlinkage int sys_ipc (uint call, int first, int second, int third, void *ptr, long fifth)
{
    int version, ret;

    version = call >> 16; /* hack for backward compatibility */
    call &= 0xffff;

    switch (call) {
    case SEMOP:
        return sys_semop (first, (struct sembuf *)ptr, second);
    case SEMGET:
        return sys_semget (first, second, third);
    case SEMCTL: {
        union semun fourth;
        if (!ptr)
            return -EINVAL;
        if (get_user(fourth.__pad, (void **) ptr))
            return -EFAULT;
        return sys_semctl (first, second, third, fourth);
    }

    case MSGSND:
        return sys_msgsnd (first, (struct msgbuf *) ptr, 
                   second, third);
    case MSGRCV:
        switch (version) {
        case 0: {
            struct ipc_kludge tmp;
            if (!ptr)
                return -EINVAL;
            if (copy_from_user(&tmp,(struct ipc_kludge *) ptr,
                       sizeof (tmp)))
                return -EFAULT;
            return sys_msgrcv (first, tmp.msgp, second,
                       tmp.msgtyp, third);
        }
        default:
            return sys_msgrcv (first,
                       (struct msgbuf *) ptr,
                       second, fifth, third);
        }
    case MSGGET:
        return sys_msgget ((key_t) first, second);
    case MSGCTL:
        return sys_msgctl (first, second, (struct msqid_ds *) ptr);

    case SHMAT:
        switch (version) {
        default: {
            ulong raddr;
            ret = sys_shmat (first, (char *) ptr, second, &raddr);
            if (ret)
                return ret;
            return put_user (raddr, (ulong *) third);
        }
        case 1:    /* iBCS2 emulator entry point */
            if (!segment_eq(get_fs(), get_ds()))
                return -EINVAL;
            return sys_shmat (first, (char *) ptr,
                      second, (ulong *) third);
        }
    case SHMDT: 
        return sys_shmdt ((char *)ptr);
    case SHMGET:
        return sys_shmget (first, second, third);
    case SHMCTL:
        return sys_shmctl (first, second,
                   (struct shmid_ds *) ptr);
    default:
        return -EINVAL;
    }
}

/* Fork a new task - this creates a new program thread.
 * This is called indirectly via a small wrapper
 */
asmlinkage int sys_fork(struct pt_regs *regs)
{
    return do_fork(SIGCHLD, regs->ARM_sp, regs, 0);
}

/* Clone a task - this clones the calling program thread.
 * This is called indirectly via a small wrapper
 */
asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp, struct pt_regs *regs)
{
    if (!newsp)
        newsp = regs->ARM_sp;
    return do_fork(clone_flags, newsp, regs, 0);
}

asmlinkage int sys_vfork(struct pt_regs *regs)
{
    return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, regs->ARM_sp, regs, 0);
}

/* sys_execve() executes a new program.
 * This is called indirectly via a small wrapper
 */
asmlinkage int sys_execve(char *filenamei, char **argv, char **envp, struct pt_regs *regs)
{
    int error;
    char * filename;

    filename = getname(filenamei);
    error = PTR_ERR(filename);
    if (IS_ERR(filename))
        goto out;
    error = do_execve(filename, argv, envp, regs);
    putname(filename);
out:
    return error;
}

asmlinkage int sys_pause(void)
{
    current->state = TASK_INTERRUPTIBLE;
    schedule();
    return -ERESTARTNOHAND;
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ Read-Only ]

:: Make Dir ::
 
[ Read-Only ]
:: Make File ::
 
[ Read-Only ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 1.0 pre-release build #13 powered by Captain Crunch Security Team | http://ccteam.ru | Generation time: 0.0272 ]--