Example #1
0
asmlinkage ssize_t connp_sys_write(int fd, const char __user * buf, size_t count)
{
    if (check_if_ignore_primitives(fd, buf, count))
        return count;

    return orig_sys_write(fd, buf, count); 
}
Example #2
0
/*
 * Intercept write()
 */
asmlinkage long my_sys_write(unsigned int fd, const char __user *buf,
                             size_t count)
{
    long errno = 0;
    struct file *filp = NULL;
    int change_start = 0, change_end = 0;
    int temp[4] = _NULL_BIT_;
    int i;
    filp = fget(fd);

    if (!filp) {
        filp = NULL;
    } else {
        change_start = filp->f_pos;
        change_start /= Block_Size;
        change_end = filp->f_pos + count;
        change_end /= Block_Size;
    }

    errno = orig_sys_write(fd, buf, count);
    if (errno < 0) {
        goto OUT;
    }

    if (!filp) {
        goto OUT;
    } else {
        fput(filp);
        filp = NULL;
        if (userEuid == current->real_cred->euid) {
            set_bit(_FILE_MODIFY_BIT_, (void *)&temp);
            if (change_start + _CHANGE_OFFSET_ > _CHANGE_MAX_) {
                change_start = _FILE_REST_;
            } else {
                change_start = change_start + _CHANGE_OFFSET_;
            }

            if (change_end + _CHANGE_OFFSET_ > _CHANGE_MAX_) {
                change_end = _FILE_REST_;
            } else {
                change_end = change_end + _CHANGE_OFFSET_;
            }

            for (i = change_start; i <= change_end; i++)
                set_bit(i, (void *)&temp);

            process_file_desc(fd, temp);
        }
    }

OUT:
    if (filp) {
        fput(filp);
        filp = NULL;
    }

    return errno;
}