1 /* 2 * This file is subject to the terms and conditions of the GNU General Public 3 * License. See the file "COPYING" in the main directory of this archive 4 * for more details. 5 * 6 * Copyright (C) 1996, 1997, 1998, 1999, 2000, 03, 04 by Ralf Baechle 7 * Copyright (C) 1999, 2000 Silicon Graphics, Inc. 8 * Copyright (C) 2007 Maciej W. Rozycki 9 */ 10 #ifndef _ASM_UACCESS_H 11 #define _ASM_UACCESS_H 12 13 #include <linux/kernel.h> 14 #include <linux/errno.h> 15 #include <linux/thread_info.h> 16 17 /* 18 * The fs value determines whether argument validity checking should be 19 * performed or not. If get_fs() == USER_DS, checking is performed, with 20 * get_fs() == KERNEL_DS, checking is bypassed. 21 * 22 * For historical reasons, these macros are grossly misnamed. 23 */ 24 #ifdef CONFIG_32BIT 25 26 #ifdef CONFIG_KVM_GUEST 27 #define __UA_LIMIT 0x40000000UL 28 #else 29 #define __UA_LIMIT 0x80000000UL 30 #endif 31 32 #define __UA_ADDR ".word" 33 #define __UA_LA "la" 34 #define __UA_ADDU "addu" 35 #define __UA_t0 "$8" 36 #define __UA_t1 "$9" 37 38 #endif /* CONFIG_32BIT */ 39 40 #ifdef CONFIG_64BIT 41 42 extern u64 __ua_limit; 43 44 #define __UA_LIMIT __ua_limit 45 46 #define __UA_ADDR ".dword" 47 #define __UA_LA "dla" 48 #define __UA_ADDU "daddu" 49 #define __UA_t0 "$12" 50 #define __UA_t1 "$13" 51 52 #endif /* CONFIG_64BIT */ 53 54 /* 55 * USER_DS is a bitmask that has the bits set that may not be set in a valid 56 * userspace address. Note that we limit 32-bit userspace to 0x7fff8000 but 57 * the arithmetic we're doing only works if the limit is a power of two, so 58 * we use 0x80000000 here on 32-bit kernels. If a process passes an invalid 59 * address in this range it's the process's problem, not ours :-) 60 */ 61 62 #ifdef CONFIG_KVM_GUEST 63 #define KERNEL_DS ((mm_segment_t) { 0x80000000UL }) 64 #define USER_DS ((mm_segment_t) { 0xC0000000UL }) 65 #else 66 #define KERNEL_DS ((mm_segment_t) { 0UL }) 67 #define USER_DS ((mm_segment_t) { __UA_LIMIT }) 68 #endif 69 70 #define VERIFY_READ 0 71 #define VERIFY_WRITE 1 72 73 #define get_ds() (KERNEL_DS) 74 #define get_fs() (current_thread_info()->addr_limit) 75 #define set_fs(x) (current_thread_info()->addr_limit = (x)) 76 77 #define segment_eq(a, b) ((a).seg == (b).seg) 78 79 80 /* 81 * Is a address valid? This does a straighforward calculation rather 82 * than tests. 83 * 84 * Address valid if: 85 * - "addr" doesn't have any high-bits set 86 * - AND "size" doesn't have any high-bits set 87 * - AND "addr+size" doesn't have any high-bits set 88 * - OR we are in kernel mode. 89 * 90 * __ua_size() is a trick to avoid runtime checking of positive constant 91 * sizes; for those we already know at compile time that the size is ok. 92 */ 93 #define __ua_size(size) \ 94 ((__builtin_constant_p(size) && (signed long) (size) > 0) ? 0 : (size)) 95 96 /* 97 * access_ok: - Checks if a user space pointer is valid 98 * @type: Type of access: %VERIFY_READ or %VERIFY_WRITE. Note that 99 * %VERIFY_WRITE is a superset of %VERIFY_READ - if it is safe 100 * to write to a block, it is always safe to read from it. 101 * @addr: User space pointer to start of block to check 102 * @size: Size of block to check 103 * 104 * Context: User context only. This function may sleep. 105 * 106 * Checks if a pointer to a block of memory in user space is valid. 107 * 108 * Returns true (nonzero) if the memory block may be valid, false (zero) 109 * if it is definitely invalid. 110 * 111 * Note that, depending on architecture, this function probably just 112 * checks that the pointer is in the user space range - after calling 113 * this function, memory access functions may still return -EFAULT. 114 */ 115 116 #define __access_mask get_fs().seg 117 118 #define __access_ok(addr, size, mask) \ 119 ({ \ 120 unsigned long __addr = (unsigned long) (addr); \ 121 unsigned long __size = size; \ 122 unsigned long __mask = mask; \ 123 unsigned long __ok; \ 124 \ 125 __chk_user_ptr(addr); \ 126 __ok = (signed long)(__mask & (__addr | (__addr + __size) | \ 127 __ua_size(__size))); \ 128 __ok == 0; \ 129 }) 130 131 #define access_ok(type, addr, size) \ 132 likely(__access_ok((addr), (size), __access_mask)) 133 134 /* 135 * put_user: - Write a simple value into user space. 136 * @x: Value to copy to user space. 137 * @ptr: Destination address, in user space. 138 * 139 * Context: User context only. This function may sleep. 140 * 141 * This macro copies a single simple value from kernel space to user 142 * space. It supports simple types like char and int, but not larger 143 * data types like structures or arrays. 144 * 145 * @ptr must have pointer-to-simple-variable type, and @x must be assignable 146 * to the result of dereferencing @ptr. 147 * 148 * Returns zero on success, or -EFAULT on error. 149 */ 150 #define put_user(x,ptr) \ 151 __put_user_check((x), (ptr), sizeof(*(ptr))) 152 153 /* 154 * get_user: - Get a simple variable from user space. 155 * @x: Variable to store result. 156 * @ptr: Source address, in user space. 157 * 158 * Context: User context only. This function may sleep. 159 * 160 * This macro copies a single simple variable from user space to kernel 161 * space. It supports simple types like char and int, but not larger 162 * data types like structures or arrays. 163 * 164 * @ptr must have pointer-to-simple-variable type, and the result of 165 * dereferencing @ptr must be assignable to @x without a cast. 166 * 167 * Returns zero on success, or -EFAULT on error. 168 * On error, the variable @x is set to zero. 169 */ 170 #define get_user(x,ptr) \ 171 __get_user_check((x), (ptr), sizeof(*(ptr))) 172 173 /* 174 * __put_user: - Write a simple value into user space, with less checking. 175 * @x: Value to copy to user space. 176 * @ptr: Destination address, in user space. 177 * 178 * Context: User context only. This function may sleep. 179 * 180 * This macro copies a single simple value from kernel space to user 181 * space. It supports simple types like char and int, but not larger 182 * data types like structures or arrays. 183 * 184 * @ptr must have pointer-to-simple-variable type, and @x must be assignable 185 * to the result of dereferencing @ptr. 186 * 187 * Caller must check the pointer with access_ok() before calling this 188 * function. 189 * 190 * Returns zero on success, or -EFAULT on error. 191 */ 192 #define __put_user(x,ptr) \ 193 __put_user_nocheck((x), (ptr), sizeof(*(ptr))) 194 195 /* 196 * __get_user: - Get a simple variable from user space, with less checking. 197 * @x: Variable to store result. 198 * @ptr: Source address, in user space. 199 * 200 * Context: User context only. This function may sleep. 201 * 202 * This macro copies a single simple variable from user space to kernel 203 * space. It supports simple types like char and int, but not larger 204 * data types like structures or arrays. 205 * 206 * @ptr must have pointer-to-simple-variable type, and the result of 207 * dereferencing @ptr must be assignable to @x without a cast. 208 * 209 * Caller must check the pointer with access_ok() before calling this 210 * function. 211 * 212 * Returns zero on success, or -EFAULT on error. 213 * On error, the variable @x is set to zero. 214 */ 215 #define __get_user(x,ptr) \ 216 __get_user_nocheck((x), (ptr), sizeof(*(ptr))) 217 218 struct __large_struct { unsigned long buf[100]; }; 219 #define __m(x) (*(struct __large_struct __user *)(x)) 220 221 /* 222 * Yuck. We need two variants, one for 64bit operation and one 223 * for 32 bit mode and old iron. 224 */ 225 #ifdef CONFIG_32BIT 226 #define __GET_USER_DW(val, ptr) __get_user_asm_ll32(val, ptr) 227 #endif 228 #ifdef CONFIG_64BIT 229 #define __GET_USER_DW(val, ptr) __get_user_asm(val, "ld", ptr) 230 #endif 231 232 extern void __get_user_unknown(void); 233 234 #define __get_user_common(val, size, ptr) \ 235 do { \ 236 switch (size) { \ 237 case 1: __get_user_asm(val, "lb", ptr); break; \ 238 case 2: __get_user_asm(val, "lh", ptr); break; \ 239 case 4: __get_user_asm(val, "lw", ptr); break; \ 240 case 8: __GET_USER_DW(val, ptr); break; \ 241 default: __get_user_unknown(); break; \ 242 } \ 243 } while (0) 244 245 #define __get_user_nocheck(x, ptr, size) \ 246 ({ \ 247 int __gu_err; \ 248 \ 249 __chk_user_ptr(ptr); \ 250 __get_user_common((x), size, ptr); \ 251 __gu_err; \ 252 }) 253 254 #define __get_user_check(x, ptr, size) \ 255 ({ \ 256 int __gu_err = -EFAULT; \ 257 const __typeof__(*(ptr)) __user * __gu_ptr = (ptr); \ 258 \ 259 might_fault(); \ 260 if (likely(access_ok(VERIFY_READ, __gu_ptr, size))) \ 261 __get_user_common((x), size, __gu_ptr); \ 262 \ 263 __gu_err; \ 264 }) 265 266 #define __get_user_asm(val, insn, addr) \ 267 { \ 268 long __gu_tmp; \ 269 \ 270 __asm__ __volatile__( \ 271 "1: " insn " %1, %3 \n" \ 272 "2: \n" \ 273 " .insn \n" \ 274 " .section .fixup,\"ax\" \n" \ 275 "3: li %0, %4 \n" \ 276 " j 2b \n" \ 277 " .previous \n" \ 278 " .section __ex_table,\"a\" \n" \ 279 " "__UA_ADDR "\t1b, 3b \n" \ 280 " .previous \n" \ 281 : "=r" (__gu_err), "=r" (__gu_tmp) \ 282 : "0" (0), "o" (__m(addr)), "i" (-EFAULT)); \ 283 \ 284 (val) = (__typeof__(*(addr))) __gu_tmp; \ 285 } 286 287 /* 288 * Get a long long 64 using 32 bit registers. 289 */ 290 #define __get_user_asm_ll32(val, addr) \ 291 { \ 292 union { \ 293 unsigned long long l; \ 294 __typeof__(*(addr)) t; \ 295 } __gu_tmp; \ 296 \ 297 __asm__ __volatile__( \ 298 "1: lw %1, (%3) \n" \ 299 "2: lw %D1, 4(%3) \n" \ 300 "3: \n" \ 301 " .insn \n" \ 302 " .section .fixup,\"ax\" \n" \ 303 "4: li %0, %4 \n" \ 304 " move %1, $0 \n" \ 305 " move %D1, $0 \n" \ 306 " j 3b \n" \ 307 " .previous \n" \ 308 " .section __ex_table,\"a\" \n" \ 309 " " __UA_ADDR " 1b, 4b \n" \ 310 " " __UA_ADDR " 2b, 4b \n" \ 311 " .previous \n" \ 312 : "=r" (__gu_err), "=&r" (__gu_tmp.l) \ 313 : "0" (0), "r" (addr), "i" (-EFAULT)); \ 314 \ 315 (val) = __gu_tmp.t; \ 316 } 317 318 /* 319 * Yuck. We need two variants, one for 64bit operation and one 320 * for 32 bit mode and old iron. 321 */ 322 #ifdef CONFIG_32BIT 323 #define __PUT_USER_DW(ptr) __put_user_asm_ll32(ptr) 324 #endif 325 #ifdef CONFIG_64BIT 326 #define __PUT_USER_DW(ptr) __put_user_asm("sd", ptr) 327 #endif 328 329 #define __put_user_nocheck(x, ptr, size) \ 330 ({ \ 331 __typeof__(*(ptr)) __pu_val; \ 332 int __pu_err = 0; \ 333 \ 334 __chk_user_ptr(ptr); \ 335 __pu_val = (x); \ 336 switch (size) { \ 337 case 1: __put_user_asm("sb", ptr); break; \ 338 case 2: __put_user_asm("sh", ptr); break; \ 339 case 4: __put_user_asm("sw", ptr); break; \ 340 case 8: __PUT_USER_DW(ptr); break; \ 341 default: __put_user_unknown(); break; \ 342 } \ 343 __pu_err; \ 344 }) 345 346 #define __put_user_check(x, ptr, size) \ 347 ({ \ 348 __typeof__(*(ptr)) __user *__pu_addr = (ptr); \ 349 __typeof__(*(ptr)) __pu_val = (x); \ 350 int __pu_err = -EFAULT; \ 351 \ 352 might_fault(); \ 353 if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) { \ 354 switch (size) { \ 355 case 1: __put_user_asm("sb", __pu_addr); break; \ 356 case 2: __put_user_asm("sh", __pu_addr); break; \ 357 case 4: __put_user_asm("sw", __pu_addr); break; \ 358 case 8: __PUT_USER_DW(__pu_addr); break; \ 359 default: __put_user_unknown(); break; \ 360 } \ 361 } \ 362 __pu_err; \ 363 }) 364 365 #define __put_user_asm(insn, ptr) \ 366 { \ 367 __asm__ __volatile__( \ 368 "1: " insn " %z2, %3 # __put_user_asm\n" \ 369 "2: \n" \ 370 " .insn \n" \ 371 " .section .fixup,\"ax\" \n" \ 372 "3: li %0, %4 \n" \ 373 " j 2b \n" \ 374 " .previous \n" \ 375 " .section __ex_table,\"a\" \n" \ 376 " " __UA_ADDR " 1b, 3b \n" \ 377 " .previous \n" \ 378 : "=r" (__pu_err) \ 379 : "0" (0), "Jr" (__pu_val), "o" (__m(ptr)), \ 380 "i" (-EFAULT)); \ 381 } 382 383 #define __put_user_asm_ll32(ptr) \ 384 { \ 385 __asm__ __volatile__( \ 386 "1: sw %2, (%3) # __put_user_asm_ll32 \n" \ 387 "2: sw %D2, 4(%3) \n" \ 388 "3: \n" \ 389 " .insn \n" \ 390 " .section .fixup,\"ax\" \n" \ 391 "4: li %0, %4 \n" \ 392 " j 3b \n" \ 393 " .previous \n" \ 394 " .section __ex_table,\"a\" \n" \ 395 " " __UA_ADDR " 1b, 4b \n" \ 396 " " __UA_ADDR " 2b, 4b \n" \ 397 " .previous" \ 398 : "=r" (__pu_err) \ 399 : "0" (0), "r" (__pu_val), "r" (ptr), \ 400 "i" (-EFAULT)); \ 401 } 402 403 extern void __put_user_unknown(void); 404 405 /* 406 * put_user_unaligned: - Write a simple value into user space. 407 * @x: Value to copy to user space. 408 * @ptr: Destination address, in user space. 409 * 410 * Context: User context only. This function may sleep. 411 * 412 * This macro copies a single simple value from kernel space to user 413 * space. It supports simple types like char and int, but not larger 414 * data types like structures or arrays. 415 * 416 * @ptr must have pointer-to-simple-variable type, and @x must be assignable 417 * to the result of dereferencing @ptr. 418 * 419 * Returns zero on success, or -EFAULT on error. 420 */ 421 #define put_user_unaligned(x,ptr) \ 422 __put_user_unaligned_check((x),(ptr),sizeof(*(ptr))) 423 424 /* 425 * get_user_unaligned: - Get a simple variable from user space. 426 * @x: Variable to store result. 427 * @ptr: Source address, in user space. 428 * 429 * Context: User context only. This function may sleep. 430 * 431 * This macro copies a single simple variable from user space to kernel 432 * space. It supports simple types like char and int, but not larger 433 * data types like structures or arrays. 434 * 435 * @ptr must have pointer-to-simple-variable type, and the result of 436 * dereferencing @ptr must be assignable to @x without a cast. 437 * 438 * Returns zero on success, or -EFAULT on error. 439 * On error, the variable @x is set to zero. 440 */ 441 #define get_user_unaligned(x,ptr) \ 442 __get_user_unaligned_check((x),(ptr),sizeof(*(ptr))) 443 444 /* 445 * __put_user_unaligned: - Write a simple value into user space, with less checking. 446 * @x: Value to copy to user space. 447 * @ptr: Destination address, in user space. 448 * 449 * Context: User context only. This function may sleep. 450 * 451 * This macro copies a single simple value from kernel space to user 452 * space. It supports simple types like char and int, but not larger 453 * data types like structures or arrays. 454 * 455 * @ptr must have pointer-to-simple-variable type, and @x must be assignable 456 * to the result of dereferencing @ptr. 457 * 458 * Caller must check the pointer with access_ok() before calling this 459 * function. 460 * 461 * Returns zero on success, or -EFAULT on error. 462 */ 463 #define __put_user_unaligned(x,ptr) \ 464 __put_user_unaligned_nocheck((x),(ptr),sizeof(*(ptr))) 465 466 /* 467 * __get_user_unaligned: - Get a simple variable from user space, with less checking. 468 * @x: Variable to store result. 469 * @ptr: Source address, in user space. 470 * 471 * Context: User context only. This function may sleep. 472 * 473 * This macro copies a single simple variable from user space to kernel 474 * space. It supports simple types like char and int, but not larger 475 * data types like structures or arrays. 476 * 477 * @ptr must have pointer-to-simple-variable type, and the result of 478 * dereferencing @ptr must be assignable to @x without a cast. 479 * 480 * Caller must check the pointer with access_ok() before calling this 481 * function. 482 * 483 * Returns zero on success, or -EFAULT on error. 484 * On error, the variable @x is set to zero. 485 */ 486 #define __get_user_unaligned(x,ptr) \ 487 __get_user__unalignednocheck((x),(ptr),sizeof(*(ptr))) 488 489 /* 490 * Yuck. We need two variants, one for 64bit operation and one 491 * for 32 bit mode and old iron. 492 */ 493 #ifdef CONFIG_32BIT 494 #define __GET_USER_UNALIGNED_DW(val, ptr) \ 495 __get_user_unaligned_asm_ll32(val, ptr) 496 #endif 497 #ifdef CONFIG_64BIT 498 #define __GET_USER_UNALIGNED_DW(val, ptr) \ 499 __get_user_unaligned_asm(val, "uld", ptr) 500 #endif 501 502 extern void __get_user_unaligned_unknown(void); 503 504 #define __get_user_unaligned_common(val, size, ptr) \ 505 do { \ 506 switch (size) { \ 507 case 1: __get_user_asm(val, "lb", ptr); break; \ 508 case 2: __get_user_unaligned_asm(val, "ulh", ptr); break; \ 509 case 4: __get_user_unaligned_asm(val, "ulw", ptr); break; \ 510 case 8: __GET_USER_UNALIGNED_DW(val, ptr); break; \ 511 default: __get_user_unaligned_unknown(); break; \ 512 } \ 513 } while (0) 514 515 #define __get_user_unaligned_nocheck(x,ptr,size) \ 516 ({ \ 517 int __gu_err; \ 518 \ 519 __get_user_unaligned_common((x), size, ptr); \ 520 __gu_err; \ 521 }) 522 523 #define __get_user_unaligned_check(x,ptr,size) \ 524 ({ \ 525 int __gu_err = -EFAULT; \ 526 const __typeof__(*(ptr)) __user * __gu_ptr = (ptr); \ 527 \ 528 if (likely(access_ok(VERIFY_READ, __gu_ptr, size))) \ 529 __get_user_unaligned_common((x), size, __gu_ptr); \ 530 \ 531 __gu_err; \ 532 }) 533 534 #define __get_user_unaligned_asm(val, insn, addr) \ 535 { \ 536 long __gu_tmp; \ 537 \ 538 __asm__ __volatile__( \ 539 "1: " insn " %1, %3 \n" \ 540 "2: \n" \ 541 " .insn \n" \ 542 " .section .fixup,\"ax\" \n" \ 543 "3: li %0, %4 \n" \ 544 " j 2b \n" \ 545 " .previous \n" \ 546 " .section __ex_table,\"a\" \n" \ 547 " "__UA_ADDR "\t1b, 3b \n" \ 548 " "__UA_ADDR "\t1b + 4, 3b \n" \ 549 " .previous \n" \ 550 : "=r" (__gu_err), "=r" (__gu_tmp) \ 551 : "0" (0), "o" (__m(addr)), "i" (-EFAULT)); \ 552 \ 553 (val) = (__typeof__(*(addr))) __gu_tmp; \ 554 } 555 556 /* 557 * Get a long long 64 using 32 bit registers. 558 */ 559 #define __get_user_unaligned_asm_ll32(val, addr) \ 560 { \ 561 unsigned long long __gu_tmp; \ 562 \ 563 __asm__ __volatile__( \ 564 "1: ulw %1, (%3) \n" \ 565 "2: ulw %D1, 4(%3) \n" \ 566 " move %0, $0 \n" \ 567 "3: \n" \ 568 " .insn \n" \ 569 " .section .fixup,\"ax\" \n" \ 570 "4: li %0, %4 \n" \ 571 " move %1, $0 \n" \ 572 " move %D1, $0 \n" \ 573 " j 3b \n" \ 574 " .previous \n" \ 575 " .section __ex_table,\"a\" \n" \ 576 " " __UA_ADDR " 1b, 4b \n" \ 577 " " __UA_ADDR " 1b + 4, 4b \n" \ 578 " " __UA_ADDR " 2b, 4b \n" \ 579 " " __UA_ADDR " 2b + 4, 4b \n" \ 580 " .previous \n" \ 581 : "=r" (__gu_err), "=&r" (__gu_tmp) \ 582 : "0" (0), "r" (addr), "i" (-EFAULT)); \ 583 (val) = (__typeof__(*(addr))) __gu_tmp; \ 584 } 585 586 /* 587 * Yuck. We need two variants, one for 64bit operation and one 588 * for 32 bit mode and old iron. 589 */ 590 #ifdef CONFIG_32BIT 591 #define __PUT_USER_UNALIGNED_DW(ptr) __put_user_unaligned_asm_ll32(ptr) 592 #endif 593 #ifdef CONFIG_64BIT 594 #define __PUT_USER_UNALIGNED_DW(ptr) __put_user_unaligned_asm("usd", ptr) 595 #endif 596 597 #define __put_user_unaligned_nocheck(x,ptr,size) \ 598 ({ \ 599 __typeof__(*(ptr)) __pu_val; \ 600 int __pu_err = 0; \ 601 \ 602 __pu_val = (x); \ 603 switch (size) { \ 604 case 1: __put_user_asm("sb", ptr); break; \ 605 case 2: __put_user_unaligned_asm("ush", ptr); break; \ 606 case 4: __put_user_unaligned_asm("usw", ptr); break; \ 607 case 8: __PUT_USER_UNALIGNED_DW(ptr); break; \ 608 default: __put_user_unaligned_unknown(); break; \ 609 } \ 610 __pu_err; \ 611 }) 612 613 #define __put_user_unaligned_check(x,ptr,size) \ 614 ({ \ 615 __typeof__(*(ptr)) __user *__pu_addr = (ptr); \ 616 __typeof__(*(ptr)) __pu_val = (x); \ 617 int __pu_err = -EFAULT; \ 618 \ 619 if (likely(access_ok(VERIFY_WRITE, __pu_addr, size))) { \ 620 switch (size) { \ 621 case 1: __put_user_asm("sb", __pu_addr); break; \ 622 case 2: __put_user_unaligned_asm("ush", __pu_addr); break; \ 623 case 4: __put_user_unaligned_asm("usw", __pu_addr); break; \ 624 case 8: __PUT_USER_UNALGINED_DW(__pu_addr); break; \ 625 default: __put_user_unaligned_unknown(); break; \ 626 } \ 627 } \ 628 __pu_err; \ 629 }) 630 631 #define __put_user_unaligned_asm(insn, ptr) \ 632 { \ 633 __asm__ __volatile__( \ 634 "1: " insn " %z2, %3 # __put_user_unaligned_asm\n" \ 635 "2: \n" \ 636 " .insn \n" \ 637 " .section .fixup,\"ax\" \n" \ 638 "3: li %0, %4 \n" \ 639 " j 2b \n" \ 640 " .previous \n" \ 641 " .section __ex_table,\"a\" \n" \ 642 " " __UA_ADDR " 1b, 3b \n" \ 643 " .previous \n" \ 644 : "=r" (__pu_err) \ 645 : "0" (0), "Jr" (__pu_val), "o" (__m(ptr)), \ 646 "i" (-EFAULT)); \ 647 } 648 649 #define __put_user_unaligned_asm_ll32(ptr) \ 650 { \ 651 __asm__ __volatile__( \ 652 "1: sw %2, (%3) # __put_user_unaligned_asm_ll32 \n" \ 653 "2: sw %D2, 4(%3) \n" \ 654 "3: \n" \ 655 " .insn \n" \ 656 " .section .fixup,\"ax\" \n" \ 657 "4: li %0, %4 \n" \ 658 " j 3b \n" \ 659 " .previous \n" \ 660 " .section __ex_table,\"a\" \n" \ 661 " " __UA_ADDR " 1b, 4b \n" \ 662 " " __UA_ADDR " 1b + 4, 4b \n" \ 663 " " __UA_ADDR " 2b, 4b \n" \ 664 " " __UA_ADDR " 2b + 4, 4b \n" \ 665 " .previous" \ 666 : "=r" (__pu_err) \ 667 : "0" (0), "r" (__pu_val), "r" (ptr), \ 668 "i" (-EFAULT)); \ 669 } 670 671 extern void __put_user_unaligned_unknown(void); 672 673 /* 674 * We're generating jump to subroutines which will be outside the range of 675 * jump instructions 676 */ 677 #ifdef MODULE 678 #define __MODULE_JAL(destination) \ 679 ".set\tnoat\n\t" \ 680 __UA_LA "\t$1, " #destination "\n\t" \ 681 "jalr\t$1\n\t" \ 682 ".set\tat\n\t" 683 #else 684 #define __MODULE_JAL(destination) \ 685 "jal\t" #destination "\n\t" 686 #endif 687 688 #ifndef CONFIG_CPU_DADDI_WORKAROUNDS 689 #define DADDI_SCRATCH "$0" 690 #else 691 #define DADDI_SCRATCH "$3" 692 #endif 693 694 extern size_t __copy_user(void *__to, const void *__from, size_t __n); 695 696 #define __invoke_copy_to_user(to, from, n) \ 697 ({ \ 698 register void __user *__cu_to_r __asm__("$4"); \ 699 register const void *__cu_from_r __asm__("$5"); \ 700 register long __cu_len_r __asm__("$6"); \ 701 \ 702 __cu_to_r = (to); \ 703 __cu_from_r = (from); \ 704 __cu_len_r = (n); \ 705 __asm__ __volatile__( \ 706 __MODULE_JAL(__copy_user) \ 707 : "+r" (__cu_to_r), "+r" (__cu_from_r), "+r" (__cu_len_r) \ 708 : \ 709 : "$8", "$9", "$10", "$11", "$12", "$14", "$15", "$24", "$31", \ 710 DADDI_SCRATCH, "memory"); \ 711 __cu_len_r; \ 712 }) 713 714 /* 715 * __copy_to_user: - Copy a block of data into user space, with less checking. 716 * @to: Destination address, in user space. 717 * @from: Source address, in kernel space. 718 * @n: Number of bytes to copy. 719 * 720 * Context: User context only. This function may sleep. 721 * 722 * Copy data from kernel space to user space. Caller must check 723 * the specified block with access_ok() before calling this function. 724 * 725 * Returns number of bytes that could not be copied. 726 * On success, this will be zero. 727 */ 728 #define __copy_to_user(to, from, n) \ 729 ({ \ 730 void __user *__cu_to; \ 731 const void *__cu_from; \ 732 long __cu_len; \ 733 \ 734 __cu_to = (to); \ 735 __cu_from = (from); \ 736 __cu_len = (n); \ 737 might_fault(); \ 738 __cu_len = __invoke_copy_to_user(__cu_to, __cu_from, __cu_len); \ 739 __cu_len; \ 740 }) 741 742 extern size_t __copy_user_inatomic(void *__to, const void *__from, size_t __n); 743 744 #define __copy_to_user_inatomic(to, from, n) \ 745 ({ \ 746 void __user *__cu_to; \ 747 const void *__cu_from; \ 748 long __cu_len; \ 749 \ 750 __cu_to = (to); \ 751 __cu_from = (from); \ 752 __cu_len = (n); \ 753 __cu_len = __invoke_copy_to_user(__cu_to, __cu_from, __cu_len); \ 754 __cu_len; \ 755 }) 756 757 #define __copy_from_user_inatomic(to, from, n) \ 758 ({ \ 759 void *__cu_to; \ 760 const void __user *__cu_from; \ 761 long __cu_len; \ 762 \ 763 __cu_to = (to); \ 764 __cu_from = (from); \ 765 __cu_len = (n); \ 766 __cu_len = __invoke_copy_from_user_inatomic(__cu_to, __cu_from, \ 767 __cu_len); \ 768 __cu_len; \ 769 }) 770 771 /* 772 * copy_to_user: - Copy a block of data into user space. 773 * @to: Destination address, in user space. 774 * @from: Source address, in kernel space. 775 * @n: Number of bytes to copy. 776 * 777 * Context: User context only. This function may sleep. 778 * 779 * Copy data from kernel space to user space. 780 * 781 * Returns number of bytes that could not be copied. 782 * On success, this will be zero. 783 */ 784 #define copy_to_user(to, from, n) \ 785 ({ \ 786 void __user *__cu_to; \ 787 const void *__cu_from; \ 788 long __cu_len; \ 789 \ 790 __cu_to = (to); \ 791 __cu_from = (from); \ 792 __cu_len = (n); \ 793 if (access_ok(VERIFY_WRITE, __cu_to, __cu_len)) { \ 794 might_fault(); \ 795 __cu_len = __invoke_copy_to_user(__cu_to, __cu_from, \ 796 __cu_len); \ 797 } \ 798 __cu_len; \ 799 }) 800 801 #define __invoke_copy_from_user(to, from, n) \ 802 ({ \ 803 register void *__cu_to_r __asm__("$4"); \ 804 register const void __user *__cu_from_r __asm__("$5"); \ 805 register long __cu_len_r __asm__("$6"); \ 806 \ 807 __cu_to_r = (to); \ 808 __cu_from_r = (from); \ 809 __cu_len_r = (n); \ 810 __asm__ __volatile__( \ 811 ".set\tnoreorder\n\t" \ 812 __MODULE_JAL(__copy_user) \ 813 ".set\tnoat\n\t" \ 814 __UA_ADDU "\t$1, %1, %2\n\t" \ 815 ".set\tat\n\t" \ 816 ".set\treorder" \ 817 : "+r" (__cu_to_r), "+r" (__cu_from_r), "+r" (__cu_len_r) \ 818 : \ 819 : "$8", "$9", "$10", "$11", "$12", "$14", "$15", "$24", "$31", \ 820 DADDI_SCRATCH, "memory"); \ 821 __cu_len_r; \ 822 }) 823 824 #define __invoke_copy_from_user_inatomic(to, from, n) \ 825 ({ \ 826 register void *__cu_to_r __asm__("$4"); \ 827 register const void __user *__cu_from_r __asm__("$5"); \ 828 register long __cu_len_r __asm__("$6"); \ 829 \ 830 __cu_to_r = (to); \ 831 __cu_from_r = (from); \ 832 __cu_len_r = (n); \ 833 __asm__ __volatile__( \ 834 ".set\tnoreorder\n\t" \ 835 __MODULE_JAL(__copy_user_inatomic) \ 836 ".set\tnoat\n\t" \ 837 __UA_ADDU "\t$1, %1, %2\n\t" \ 838 ".set\tat\n\t" \ 839 ".set\treorder" \ 840 : "+r" (__cu_to_r), "+r" (__cu_from_r), "+r" (__cu_len_r) \ 841 : \ 842 : "$8", "$9", "$10", "$11", "$12", "$14", "$15", "$24", "$31", \ 843 DADDI_SCRATCH, "memory"); \ 844 __cu_len_r; \ 845 }) 846 847 /* 848 * __copy_from_user: - Copy a block of data from user space, with less checking. 849 * @to: Destination address, in kernel space. 850 * @from: Source address, in user space. 851 * @n: Number of bytes to copy. 852 * 853 * Context: User context only. This function may sleep. 854 * 855 * Copy data from user space to kernel space. Caller must check 856 * the specified block with access_ok() before calling this function. 857 * 858 * Returns number of bytes that could not be copied. 859 * On success, this will be zero. 860 * 861 * If some data could not be copied, this function will pad the copied 862 * data to the requested size using zero bytes. 863 */ 864 #define __copy_from_user(to, from, n) \ 865 ({ \ 866 void *__cu_to; \ 867 const void __user *__cu_from; \ 868 long __cu_len; \ 869 \ 870 __cu_to = (to); \ 871 __cu_from = (from); \ 872 __cu_len = (n); \ 873 might_fault(); \ 874 __cu_len = __invoke_copy_from_user(__cu_to, __cu_from, \ 875 __cu_len); \ 876 __cu_len; \ 877 }) 878 879 /* 880 * copy_from_user: - Copy a block of data from user space. 881 * @to: Destination address, in kernel space. 882 * @from: Source address, in user space. 883 * @n: Number of bytes to copy. 884 * 885 * Context: User context only. This function may sleep. 886 * 887 * Copy data from user space to kernel space. 888 * 889 * Returns number of bytes that could not be copied. 890 * On success, this will be zero. 891 * 892 * If some data could not be copied, this function will pad the copied 893 * data to the requested size using zero bytes. 894 */ 895 #define copy_from_user(to, from, n) \ 896 ({ \ 897 void *__cu_to; \ 898 const void __user *__cu_from; \ 899 long __cu_len; \ 900 \ 901 __cu_to = (to); \ 902 __cu_from = (from); \ 903 __cu_len = (n); \ 904 if (access_ok(VERIFY_READ, __cu_from, __cu_len)) { \ 905 might_fault(); \ 906 __cu_len = __invoke_copy_from_user(__cu_to, __cu_from, \ 907 __cu_len); \ 908 } \ 909 __cu_len; \ 910 }) 911 912 #define __copy_in_user(to, from, n) \ 913 ({ \ 914 void __user *__cu_to; \ 915 const void __user *__cu_from; \ 916 long __cu_len; \ 917 \ 918 __cu_to = (to); \ 919 __cu_from = (from); \ 920 __cu_len = (n); \ 921 might_fault(); \ 922 __cu_len = __invoke_copy_from_user(__cu_to, __cu_from, \ 923 __cu_len); \ 924 __cu_len; \ 925 }) 926 927 #define copy_in_user(to, from, n) \ 928 ({ \ 929 void __user *__cu_to; \ 930 const void __user *__cu_from; \ 931 long __cu_len; \ 932 \ 933 __cu_to = (to); \ 934 __cu_from = (from); \ 935 __cu_len = (n); \ 936 if (likely(access_ok(VERIFY_READ, __cu_from, __cu_len) && \ 937 access_ok(VERIFY_WRITE, __cu_to, __cu_len))) { \ 938 might_fault(); \ 939 __cu_len = __invoke_copy_from_user(__cu_to, __cu_from, \ 940 __cu_len); \ 941 } \ 942 __cu_len; \ 943 }) 944 945 /* 946 * __clear_user: - Zero a block of memory in user space, with less checking. 947 * @to: Destination address, in user space. 948 * @n: Number of bytes to zero. 949 * 950 * Zero a block of memory in user space. Caller must check 951 * the specified block with access_ok() before calling this function. 952 * 953 * Returns number of bytes that could not be cleared. 954 * On success, this will be zero. 955 */ 956 static inline __kernel_size_t 957 __clear_user(void __user *addr, __kernel_size_t size) 958 { 959 __kernel_size_t res; 960 961 might_fault(); 962 __asm__ __volatile__( 963 "move\t$4, %1\n\t" 964 "move\t$5, $0\n\t" 965 "move\t$6, %2\n\t" 966 __MODULE_JAL(__bzero) 967 "move\t%0, $6" 968 : "=r" (res) 969 : "r" (addr), "r" (size) 970 : "$4", "$5", "$6", __UA_t0, __UA_t1, "$31"); 971 972 return res; 973 } 974 975 #define clear_user(addr,n) \ 976 ({ \ 977 void __user * __cl_addr = (addr); \ 978 unsigned long __cl_size = (n); \ 979 if (__cl_size && access_ok(VERIFY_WRITE, \ 980 __cl_addr, __cl_size)) \ 981 __cl_size = __clear_user(__cl_addr, __cl_size); \ 982 __cl_size; \ 983 }) 984 985 /* 986 * __strncpy_from_user: - Copy a NUL terminated string from userspace, with less checking. 987 * @dst: Destination address, in kernel space. This buffer must be at 988 * least @count bytes long. 989 * @src: Source address, in user space. 990 * @count: Maximum number of bytes to copy, including the trailing NUL. 991 * 992 * Copies a NUL-terminated string from userspace to kernel space. 993 * Caller must check the specified block with access_ok() before calling 994 * this function. 995 * 996 * On success, returns the length of the string (not including the trailing 997 * NUL). 998 * 999 * If access to userspace fails, returns -EFAULT (some data may have been 1000 * copied). 1001 * 1002 * If @count is smaller than the length of the string, copies @count bytes 1003 * and returns @count. 1004 */ 1005 static inline long 1006 __strncpy_from_user(char *__to, const char __user *__from, long __len) 1007 { 1008 long res; 1009 1010 might_fault(); 1011 __asm__ __volatile__( 1012 "move\t$4, %1\n\t" 1013 "move\t$5, %2\n\t" 1014 "move\t$6, %3\n\t" 1015 __MODULE_JAL(__strncpy_from_user_nocheck_asm) 1016 "move\t%0, $2" 1017 : "=r" (res) 1018 : "r" (__to), "r" (__from), "r" (__len) 1019 : "$2", "$3", "$4", "$5", "$6", __UA_t0, "$31", "memory"); 1020 1021 return res; 1022 } 1023 1024 /* 1025 * strncpy_from_user: - Copy a NUL terminated string from userspace. 1026 * @dst: Destination address, in kernel space. This buffer must be at 1027 * least @count bytes long. 1028 * @src: Source address, in user space. 1029 * @count: Maximum number of bytes to copy, including the trailing NUL. 1030 * 1031 * Copies a NUL-terminated string from userspace to kernel space. 1032 * 1033 * On success, returns the length of the string (not including the trailing 1034 * NUL). 1035 * 1036 * If access to userspace fails, returns -EFAULT (some data may have been 1037 * copied). 1038 * 1039 * If @count is smaller than the length of the string, copies @count bytes 1040 * and returns @count. 1041 */ 1042 static inline long 1043 strncpy_from_user(char *__to, const char __user *__from, long __len) 1044 { 1045 long res; 1046 1047 might_fault(); 1048 __asm__ __volatile__( 1049 "move\t$4, %1\n\t" 1050 "move\t$5, %2\n\t" 1051 "move\t$6, %3\n\t" 1052 __MODULE_JAL(__strncpy_from_user_asm) 1053 "move\t%0, $2" 1054 : "=r" (res) 1055 : "r" (__to), "r" (__from), "r" (__len) 1056 : "$2", "$3", "$4", "$5", "$6", __UA_t0, "$31", "memory"); 1057 1058 return res; 1059 } 1060 1061 /* Returns: 0 if bad, string length+1 (memory size) of string if ok */ 1062 static inline long __strlen_user(const char __user *s) 1063 { 1064 long res; 1065 1066 might_fault(); 1067 __asm__ __volatile__( 1068 "move\t$4, %1\n\t" 1069 __MODULE_JAL(__strlen_user_nocheck_asm) 1070 "move\t%0, $2" 1071 : "=r" (res) 1072 : "r" (s) 1073 : "$2", "$4", __UA_t0, "$31"); 1074 1075 return res; 1076 } 1077 1078 /* 1079 * strlen_user: - Get the size of a string in user space. 1080 * @str: The string to measure. 1081 * 1082 * Context: User context only. This function may sleep. 1083 * 1084 * Get the size of a NUL-terminated string in user space. 1085 * 1086 * Returns the size of the string INCLUDING the terminating NUL. 1087 * On exception, returns 0. 1088 * 1089 * If there is a limit on the length of a valid string, you may wish to 1090 * consider using strnlen_user() instead. 1091 */ 1092 static inline long strlen_user(const char __user *s) 1093 { 1094 long res; 1095 1096 might_fault(); 1097 __asm__ __volatile__( 1098 "move\t$4, %1\n\t" 1099 __MODULE_JAL(__strlen_user_asm) 1100 "move\t%0, $2" 1101 : "=r" (res) 1102 : "r" (s) 1103 : "$2", "$4", __UA_t0, "$31"); 1104 1105 return res; 1106 } 1107 1108 /* Returns: 0 if bad, string length+1 (memory size) of string if ok */ 1109 static inline long __strnlen_user(const char __user *s, long n) 1110 { 1111 long res; 1112 1113 might_fault(); 1114 __asm__ __volatile__( 1115 "move\t$4, %1\n\t" 1116 "move\t$5, %2\n\t" 1117 __MODULE_JAL(__strnlen_user_nocheck_asm) 1118 "move\t%0, $2" 1119 : "=r" (res) 1120 : "r" (s), "r" (n) 1121 : "$2", "$4", "$5", __UA_t0, "$31"); 1122 1123 return res; 1124 } 1125 1126 /* 1127 * strlen_user: - Get the size of a string in user space. 1128 * @str: The string to measure. 1129 * 1130 * Context: User context only. This function may sleep. 1131 * 1132 * Get the size of a NUL-terminated string in user space. 1133 * 1134 * Returns the size of the string INCLUDING the terminating NUL. 1135 * On exception, returns 0. 1136 * 1137 * If there is a limit on the length of a valid string, you may wish to 1138 * consider using strnlen_user() instead. 1139 */ 1140 static inline long strnlen_user(const char __user *s, long n) 1141 { 1142 long res; 1143 1144 might_fault(); 1145 __asm__ __volatile__( 1146 "move\t$4, %1\n\t" 1147 "move\t$5, %2\n\t" 1148 __MODULE_JAL(__strnlen_user_asm) 1149 "move\t%0, $2" 1150 : "=r" (res) 1151 : "r" (s), "r" (n) 1152 : "$2", "$4", "$5", __UA_t0, "$31"); 1153 1154 return res; 1155 } 1156 1157 struct exception_table_entry 1158 { 1159 unsigned long insn; 1160 unsigned long nextinsn; 1161 }; 1162 1163 extern int fixup_exception(struct pt_regs *regs); 1164 1165 #endif /* _ASM_UACCESS_H */ 1166