cregit-Linux how code gets into the kernel

Release 4.11 arch/mn10300/lib/usercopy.c

Directory: arch/mn10300/lib
/* MN10300 Userspace accessor functions
 *
 * Copyright (C) 2007 Matsushita Electric Industrial Co., Ltd.
 * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved.
 * Written by David Howells (dhowells@redhat.com)
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public Licence
 * as published by the Free Software Foundation; either version
 * 2 of the Licence, or (at your option) any later version.
 */
#include <linux/uaccess.h>


unsigned long __generic_copy_to_user(void *to, const void *from, unsigned long n) { if (access_ok(VERIFY_WRITE, to, n)) __copy_user(to, from, n); return n; }

Contributors

PersonTokensPropCommitsCommitProp
David Howells42100.00%1100.00%
Total42100.00%1100.00%


unsigned long __generic_copy_from_user(void *to, const void *from, unsigned long n) { if (access_ok(VERIFY_READ, from, n)) __copy_user_zeroing(to, from, n); else memset(to, 0, n); return n; }

Contributors

PersonTokensPropCommitsCommitProp
David Howells4280.77%150.00%
Al Viro1019.23%150.00%
Total52100.00%2100.00%

/* * Copy a null terminated string from userspace. */ #define __do_strncpy_from_user(dst, src, count, res) \ do { \ int w; \ asm volatile( \ " mov %1,%0\n" \ " cmp 0,%1\n" \ " beq 2f\n" \ "0:\n" \ " movbu (%5),%2\n" \ "1:\n" \ " movbu %2,(%6)\n" \ " inc %5\n" \ " inc %6\n" \ " cmp 0,%2\n" \ " beq 2f\n" \ " add -1,%1\n" \ " bne 0b\n" \ "2:\n" \ " sub %1,%0\n" \ "3:\n" \ " .section .fixup,\"ax\"\n" \ "4:\n" \ " mov %3,%0\n" \ " jmp 3b\n" \ " .previous\n" \ " .section __ex_table,\"a\"\n" \ " .balign 4\n" \ " .long 0b,4b\n" \ " .long 1b,4b\n" \ " .previous" \ :"=&r"(res), "=r"(count), "=&r"(w) \ :"i"(-EFAULT), "1"(count), "a"(src), "a"(dst) \ : "memory", "cc"); \ } while (0)
long __strncpy_from_user(char *dst, const char *src, long count) { long res; __do_strncpy_from_user(dst, src, count, res); return res; }

Contributors

PersonTokensPropCommitsCommitProp
David Howells34100.00%1100.00%
Total34100.00%1100.00%


long strncpy_from_user(char *dst, const char *src, long count) { long res = -EFAULT; if (access_ok(VERIFY_READ, src, 1)) __do_strncpy_from_user(dst, src, count, res); return res; }

Contributors

PersonTokensPropCommitsCommitProp
David Howells48100.00%1100.00%
Total48100.00%1100.00%

/* * Clear a userspace memory */ #define __do_clear_user(addr, size) \ do { \ int w; \ asm volatile( \ " cmp 0,%0\n" \ " beq 1f\n" \ " clr %1\n" \ "0: movbu %1,(%3,%2)\n" \ " inc %3\n" \ " cmp %0,%3\n" \ " bne 0b\n" \ "1:\n" \ " sub %3,%0\n" \ "2:\n" \ ".section .fixup,\"ax\"\n" \ "3: jmp 2b\n" \ ".previous\n" \ ".section __ex_table,\"a\"\n" \ " .balign 4\n" \ " .long 0b,3b\n" \ ".previous\n" \ : "+r"(size), "=&r"(w) \ : "a"(addr), "d"(0) \ : "memory", "cc"); \ } while (0)
unsigned long __clear_user(void *to, unsigned long n) { __do_clear_user(to, n); return n; }

Contributors

PersonTokensPropCommitsCommitProp
David Howells24100.00%1100.00%
Total24100.00%1100.00%


unsigned long clear_user(void *to, unsigned long n) { if (access_ok(VERIFY_WRITE, to, n)) __do_clear_user(to, n); return n; }

Contributors

PersonTokensPropCommitsCommitProp
David Howells35100.00%1100.00%
Total35100.00%1100.00%

/* * Return the size of a string (including the ending 0) * * Return 0 on exception, a value greater than N if too long */
long strnlen_user(const char *s, long n) { unsigned long res, w; if (!__addr_ok(s)) return 0; if (n < 0 || n + (u_long) s > current_thread_info()->addr_limit.seg) n = current_thread_info()->addr_limit.seg - (u_long)s; asm volatile( "0: cmp %4,%0\n" " beq 2f\n" "1: movbu (%0,%3),%1\n" " inc %0\n" " cmp 0,%1\n" " beq 3f\n" " bra 0b\n" "2: clr %0\n" "3:\n" ".section .fixup,\"ax\"\n" "4: jmp 2b\n" ".previous\n" ".section __ex_table,\"a\"\n" " .balign 4\n" " .long 1b,4b\n" ".previous\n" :"=d"(res), "=&r"(w) :"0"(0), "a"(s), "r"(n) : "memory", "cc"); return res; }

Contributors

PersonTokensPropCommitsCommitProp
David Howells6998.57%150.00%
Mark Salter11.43%150.00%
Total70100.00%2100.00%


Overall Contributors

PersonTokensPropCommitsCommitProp
David Howells32295.83%133.33%
Al Viro113.27%133.33%
Mark Salter30.89%133.33%
Total336100.00%3100.00%
Directory: arch/mn10300/lib
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.