Revision 9ee1fa2c
b/linux-user/syscall.c | ||
---|---|---|
2478 | 2478 |
fl.l_len = tswapl(target_fl->l_len); |
2479 | 2479 |
fl.l_pid = tswapl(target_fl->l_pid); |
2480 | 2480 |
unlock_user_struct(target_fl, arg, 0); |
2481 |
ret = fcntl(fd, cmd, &fl);
|
|
2481 |
ret = get_errno(fcntl(fd, cmd, &fl));
|
|
2482 | 2482 |
if (ret == 0) { |
2483 | 2483 |
if (!lock_user_struct(VERIFY_WRITE, target_fl, arg, 0)) |
2484 | 2484 |
return -TARGET_EFAULT; |
... | ... | |
2501 | 2501 |
fl.l_len = tswapl(target_fl->l_len); |
2502 | 2502 |
fl.l_pid = tswapl(target_fl->l_pid); |
2503 | 2503 |
unlock_user_struct(target_fl, arg, 0); |
2504 |
ret = fcntl(fd, cmd, &fl);
|
|
2504 |
ret = get_errno(fcntl(fd, cmd, &fl));
|
|
2505 | 2505 |
break; |
2506 | 2506 |
|
2507 | 2507 |
case TARGET_F_GETLK64: |
... | ... | |
2513 | 2513 |
fl64.l_len = tswapl(target_fl64->l_len); |
2514 | 2514 |
fl64.l_pid = tswap16(target_fl64->l_pid); |
2515 | 2515 |
unlock_user_struct(target_fl64, arg, 0); |
2516 |
ret = fcntl(fd, cmd >> 1, &fl64);
|
|
2516 |
ret = get_errno(fcntl(fd, cmd >> 1, &fl64));
|
|
2517 | 2517 |
if (ret == 0) { |
2518 | 2518 |
if (!lock_user_struct(VERIFY_WRITE, target_fl64, arg, 0)) |
2519 | 2519 |
return -TARGET_EFAULT; |
... | ... | |
2524 | 2524 |
target_fl64->l_pid = tswapl(fl64.l_pid); |
2525 | 2525 |
unlock_user_struct(target_fl64, arg, 1); |
2526 | 2526 |
} |
2527 |
break;
|
|
2527 |
break;
|
|
2528 | 2528 |
case TARGET_F_SETLK64: |
2529 | 2529 |
case TARGET_F_SETLKW64: |
2530 | 2530 |
if (!lock_user_struct(VERIFY_READ, target_fl64, arg, 1)) |
... | ... | |
2535 | 2535 |
fl64.l_len = tswapl(target_fl64->l_len); |
2536 | 2536 |
fl64.l_pid = tswap16(target_fl64->l_pid); |
2537 | 2537 |
unlock_user_struct(target_fl64, arg, 0); |
2538 |
ret = fcntl(fd, cmd >> 1, &fl64);
|
|
2538 |
ret = get_errno(fcntl(fd, cmd >> 1, &fl64));
|
|
2539 | 2539 |
break; |
2540 | 2540 |
|
2541 | 2541 |
case F_GETFL: |
2542 |
ret = fcntl(fd, cmd, arg); |
|
2543 |
ret = host_to_target_bitmask(ret, fcntl_flags_tbl); |
|
2542 |
ret = get_errno(fcntl(fd, cmd, arg)); |
|
2543 |
if (ret >= 0) { |
|
2544 |
ret = host_to_target_bitmask(ret, fcntl_flags_tbl); |
|
2545 |
} |
|
2544 | 2546 |
break; |
2545 | 2547 |
|
2546 | 2548 |
case F_SETFL: |
2547 |
ret = fcntl(fd, cmd, target_to_host_bitmask(arg, fcntl_flags_tbl));
|
|
2549 |
ret = get_errno(fcntl(fd, cmd, target_to_host_bitmask(arg, fcntl_flags_tbl)));
|
|
2548 | 2550 |
break; |
2549 | 2551 |
|
2550 | 2552 |
default: |
2551 |
ret = fcntl(fd, cmd, arg);
|
|
2553 |
ret = get_errno(fcntl(fd, cmd, arg));
|
|
2552 | 2554 |
break; |
2553 | 2555 |
} |
2554 | 2556 |
return ret; |
... | ... | |
3209 | 3211 |
ret = do_ioctl(arg1, arg2, arg3); |
3210 | 3212 |
break; |
3211 | 3213 |
case TARGET_NR_fcntl: |
3212 |
ret = get_errno(do_fcntl(arg1, arg2, arg3));
|
|
3214 |
ret = do_fcntl(arg1, arg2, arg3);
|
|
3213 | 3215 |
break; |
3214 | 3216 |
#ifdef TARGET_NR_mpx |
3215 | 3217 |
case TARGET_NR_mpx: |
... | ... | |
4988 | 4990 |
case TARGET_F_GETLK64: |
4989 | 4991 |
#ifdef TARGET_ARM |
4990 | 4992 |
if (((CPUARMState *)cpu_env)->eabi) { |
4991 |
if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) { |
|
4992 |
ret = -TARGET_EFAULT; |
|
4993 |
goto fail; |
|
4994 |
} |
|
4993 |
if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) |
|
4994 |
goto efault; |
|
4995 | 4995 |
fl.l_type = tswap16(target_efl->l_type); |
4996 | 4996 |
fl.l_whence = tswap16(target_efl->l_whence); |
4997 | 4997 |
fl.l_start = tswap64(target_efl->l_start); |
... | ... | |
5001 | 5001 |
} else |
5002 | 5002 |
#endif |
5003 | 5003 |
{ |
5004 |
if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) { |
|
5005 |
ret = -TARGET_EFAULT; |
|
5006 |
goto fail; |
|
5007 |
} |
|
5004 |
if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) |
|
5005 |
goto efault; |
|
5008 | 5006 |
fl.l_type = tswap16(target_fl->l_type); |
5009 | 5007 |
fl.l_whence = tswap16(target_fl->l_whence); |
5010 | 5008 |
fl.l_start = tswap64(target_fl->l_start); |
... | ... | |
5016 | 5014 |
if (ret == 0) { |
5017 | 5015 |
#ifdef TARGET_ARM |
5018 | 5016 |
if (((CPUARMState *)cpu_env)->eabi) { |
5019 |
if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, 0)) { |
|
5020 |
ret = -TARGET_EFAULT; |
|
5021 |
goto fail; |
|
5022 |
} |
|
5017 |
if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, 0)) |
|
5018 |
goto efault; |
|
5023 | 5019 |
target_efl->l_type = tswap16(fl.l_type); |
5024 | 5020 |
target_efl->l_whence = tswap16(fl.l_whence); |
5025 | 5021 |
target_efl->l_start = tswap64(fl.l_start); |
... | ... | |
5029 | 5025 |
} else |
5030 | 5026 |
#endif |
5031 | 5027 |
{ |
5032 |
if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, 0)) { |
|
5033 |
ret = -TARGET_EFAULT; |
|
5034 |
goto fail; |
|
5035 |
} |
|
5028 |
if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, 0)) |
|
5029 |
goto efault; |
|
5036 | 5030 |
target_fl->l_type = tswap16(fl.l_type); |
5037 | 5031 |
target_fl->l_whence = tswap16(fl.l_whence); |
5038 | 5032 |
target_fl->l_start = tswap64(fl.l_start); |
... | ... | |
5047 | 5041 |
case TARGET_F_SETLKW64: |
5048 | 5042 |
#ifdef TARGET_ARM |
5049 | 5043 |
if (((CPUARMState *)cpu_env)->eabi) { |
5050 |
if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) { |
|
5051 |
ret = -TARGET_EFAULT; |
|
5052 |
goto fail; |
|
5053 |
} |
|
5044 |
if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) |
|
5045 |
goto efault; |
|
5054 | 5046 |
fl.l_type = tswap16(target_efl->l_type); |
5055 | 5047 |
fl.l_whence = tswap16(target_efl->l_whence); |
5056 | 5048 |
fl.l_start = tswap64(target_efl->l_start); |
... | ... | |
5060 | 5052 |
} else |
5061 | 5053 |
#endif |
5062 | 5054 |
{ |
5063 |
if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) { |
|
5064 |
ret = -TARGET_EFAULT; |
|
5065 |
goto fail; |
|
5066 |
} |
|
5055 |
if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) |
|
5056 |
goto efault; |
|
5067 | 5057 |
fl.l_type = tswap16(target_fl->l_type); |
5068 | 5058 |
fl.l_whence = tswap16(target_fl->l_whence); |
5069 | 5059 |
fl.l_start = tswap64(target_fl->l_start); |
... | ... | |
5074 | 5064 |
ret = get_errno(fcntl(arg1, cmd, &fl)); |
5075 | 5065 |
break; |
5076 | 5066 |
default: |
5077 |
ret = get_errno(do_fcntl(arg1, cmd, arg3));
|
|
5067 |
ret = do_fcntl(arg1, cmd, arg3);
|
|
5078 | 5068 |
break; |
5079 | 5069 |
} |
5080 | 5070 |
break; |
Also available in: Unified diff