Revision 9ee1fa2c linux-user/syscall.c

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