syscall.c (f20a9ca6d09796a50e850bd105ba03aa96918e5f) syscall.c (02fb28e8effe5090ded4d36ea1c947a615099c26)
1/*
2 * Linux syscalls
3 *
4 * Copyright (c) 2003 Fabrice Bellard
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or

--- 8975 unchanged lines hidden (view full) ---

8984 struct target_sigaction act, oact, *pact = 0;
8985 struct target_old_sigaction *old_act;
8986 if (arg2) {
8987 if (!lock_user_struct(VERIFY_READ, old_act, arg2, 1))
8988 return -TARGET_EFAULT;
8989 act._sa_handler = old_act->_sa_handler;
8990 target_siginitset(&act.sa_mask, old_act->sa_mask);
8991 act.sa_flags = old_act->sa_flags;
1/*
2 * Linux syscalls
3 *
4 * Copyright (c) 2003 Fabrice Bellard
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or

--- 8975 unchanged lines hidden (view full) ---

8984 struct target_sigaction act, oact, *pact = 0;
8985 struct target_old_sigaction *old_act;
8986 if (arg2) {
8987 if (!lock_user_struct(VERIFY_READ, old_act, arg2, 1))
8988 return -TARGET_EFAULT;
8989 act._sa_handler = old_act->_sa_handler;
8990 target_siginitset(&act.sa_mask, old_act->sa_mask);
8991 act.sa_flags = old_act->sa_flags;
8992 act.ka_restorer = 0;
8993 unlock_user_struct(old_act, arg2, 0);
8994 pact = &act;
8995 }
8992 unlock_user_struct(old_act, arg2, 0);
8993 pact = &act;
8994 }
8996 ret = get_errno(do_sigaction(arg1, pact, &oact));
8995 ret = get_errno(do_sigaction(arg1, pact, &oact, 0));
8997 if (!is_error(ret) && arg3) {
8998 if (!lock_user_struct(VERIFY_WRITE, old_act, arg3, 0))
8999 return -TARGET_EFAULT;
9000 old_act->_sa_handler = oact._sa_handler;
9001 old_act->sa_mask = oact.sa_mask.sig[0];
9002 old_act->sa_flags = oact.sa_flags;
9003 unlock_user_struct(old_act, arg3, 1);
9004 }

--- 7 unchanged lines hidden (view full) ---

9012 target_siginitset(&act.sa_mask, old_act->sa_mask.sig[0]);
9013 act.sa_flags = old_act->sa_flags;
9014 unlock_user_struct(old_act, arg2, 0);
9015 pact = &act;
9016 } else {
9017 pact = NULL;
9018 }
9019
8996 if (!is_error(ret) && arg3) {
8997 if (!lock_user_struct(VERIFY_WRITE, old_act, arg3, 0))
8998 return -TARGET_EFAULT;
8999 old_act->_sa_handler = oact._sa_handler;
9000 old_act->sa_mask = oact.sa_mask.sig[0];
9001 old_act->sa_flags = oact.sa_flags;
9002 unlock_user_struct(old_act, arg3, 1);
9003 }

--- 7 unchanged lines hidden (view full) ---

9011 target_siginitset(&act.sa_mask, old_act->sa_mask.sig[0]);
9012 act.sa_flags = old_act->sa_flags;
9013 unlock_user_struct(old_act, arg2, 0);
9014 pact = &act;
9015 } else {
9016 pact = NULL;
9017 }
9018
9020 ret = get_errno(do_sigaction(arg1, pact, &oact));
9019 ret = get_errno(do_sigaction(arg1, pact, &oact, 0));
9021
9022 if (!is_error(ret) && arg3) {
9023 if (!lock_user_struct(VERIFY_WRITE, old_act, arg3, 0))
9024 return -TARGET_EFAULT;
9025 old_act->_sa_handler = oact._sa_handler;
9026 old_act->sa_flags = oact.sa_flags;
9027 old_act->sa_mask.sig[0] = oact.sa_mask.sig[0];
9028 old_act->sa_mask.sig[1] = 0;

--- 6 unchanged lines hidden (view full) ---

9035 struct target_sigaction act, oact, *pact;
9036 if (arg2) {
9037 if (!lock_user_struct(VERIFY_READ, old_act, arg2, 1))
9038 return -TARGET_EFAULT;
9039 act._sa_handler = old_act->_sa_handler;
9040 target_siginitset(&act.sa_mask, old_act->sa_mask);
9041 act.sa_flags = old_act->sa_flags;
9042 act.sa_restorer = old_act->sa_restorer;
9020
9021 if (!is_error(ret) && arg3) {
9022 if (!lock_user_struct(VERIFY_WRITE, old_act, arg3, 0))
9023 return -TARGET_EFAULT;
9024 old_act->_sa_handler = oact._sa_handler;
9025 old_act->sa_flags = oact.sa_flags;
9026 old_act->sa_mask.sig[0] = oact.sa_mask.sig[0];
9027 old_act->sa_mask.sig[1] = 0;

--- 6 unchanged lines hidden (view full) ---

9034 struct target_sigaction act, oact, *pact;
9035 if (arg2) {
9036 if (!lock_user_struct(VERIFY_READ, old_act, arg2, 1))
9037 return -TARGET_EFAULT;
9038 act._sa_handler = old_act->_sa_handler;
9039 target_siginitset(&act.sa_mask, old_act->sa_mask);
9040 act.sa_flags = old_act->sa_flags;
9041 act.sa_restorer = old_act->sa_restorer;
9043#ifdef TARGET_ARCH_HAS_KA_RESTORER
9044 act.ka_restorer = 0;
9045#endif
9046 unlock_user_struct(old_act, arg2, 0);
9047 pact = &act;
9048 } else {
9049 pact = NULL;
9050 }
9042 unlock_user_struct(old_act, arg2, 0);
9043 pact = &act;
9044 } else {
9045 pact = NULL;
9046 }
9051 ret = get_errno(do_sigaction(arg1, pact, &oact));
9047 ret = get_errno(do_sigaction(arg1, pact, &oact, 0));
9052 if (!is_error(ret) && arg3) {
9053 if (!lock_user_struct(VERIFY_WRITE, old_act, arg3, 0))
9054 return -TARGET_EFAULT;
9055 old_act->_sa_handler = oact._sa_handler;
9056 old_act->sa_mask = oact.sa_mask.sig[0];
9057 old_act->sa_flags = oact.sa_flags;
9058 old_act->sa_restorer = oact.sa_restorer;
9059 unlock_user_struct(old_act, arg3, 1);

--- 20 unchanged lines hidden (view full) ---

9080 return -TARGET_EINVAL;
9081 }
9082 if (arg2) {
9083 if (!lock_user_struct(VERIFY_READ, rt_act, arg2, 1))
9084 return -TARGET_EFAULT;
9085 act._sa_handler = rt_act->_sa_handler;
9086 act.sa_mask = rt_act->sa_mask;
9087 act.sa_flags = rt_act->sa_flags;
9048 if (!is_error(ret) && arg3) {
9049 if (!lock_user_struct(VERIFY_WRITE, old_act, arg3, 0))
9050 return -TARGET_EFAULT;
9051 old_act->_sa_handler = oact._sa_handler;
9052 old_act->sa_mask = oact.sa_mask.sig[0];
9053 old_act->sa_flags = oact.sa_flags;
9054 old_act->sa_restorer = oact.sa_restorer;
9055 unlock_user_struct(old_act, arg3, 1);

--- 20 unchanged lines hidden (view full) ---

9076 return -TARGET_EINVAL;
9077 }
9078 if (arg2) {
9079 if (!lock_user_struct(VERIFY_READ, rt_act, arg2, 1))
9080 return -TARGET_EFAULT;
9081 act._sa_handler = rt_act->_sa_handler;
9082 act.sa_mask = rt_act->sa_mask;
9083 act.sa_flags = rt_act->sa_flags;
9088 act.ka_restorer = arg5;
9089 unlock_user_struct(rt_act, arg2, 0);
9090 pact = &act;
9091 }
9084 unlock_user_struct(rt_act, arg2, 0);
9085 pact = &act;
9086 }
9092 ret = get_errno(do_sigaction(arg1, pact, &oact));
9087 ret = get_errno(do_sigaction(arg1, pact, &oact, arg5));
9093 if (!is_error(ret) && arg3) {
9094 if (!lock_user_struct(VERIFY_WRITE, rt_act, arg3, 0))
9095 return -TARGET_EFAULT;
9096 rt_act->_sa_handler = oact._sa_handler;
9097 rt_act->sa_mask = oact.sa_mask;
9098 rt_act->sa_flags = oact.sa_flags;
9099 unlock_user_struct(rt_act, arg3, 1);
9100 }
9101#else
9102#ifdef TARGET_SPARC
9103 target_ulong restorer = arg4;
9104 target_ulong sigsetsize = arg5;
9105#else
9106 target_ulong sigsetsize = arg4;
9088 if (!is_error(ret) && arg3) {
9089 if (!lock_user_struct(VERIFY_WRITE, rt_act, arg3, 0))
9090 return -TARGET_EFAULT;
9091 rt_act->_sa_handler = oact._sa_handler;
9092 rt_act->sa_mask = oact.sa_mask;
9093 rt_act->sa_flags = oact.sa_flags;
9094 unlock_user_struct(rt_act, arg3, 1);
9095 }
9096#else
9097#ifdef TARGET_SPARC
9098 target_ulong restorer = arg4;
9099 target_ulong sigsetsize = arg5;
9100#else
9101 target_ulong sigsetsize = arg4;
9102 target_ulong restorer = 0;
9107#endif
9108 struct target_sigaction *act;
9109 struct target_sigaction *oact;
9110
9111 if (sigsetsize != sizeof(target_sigset_t)) {
9112 return -TARGET_EINVAL;
9113 }
9114 if (arg2) {
9115 if (!lock_user_struct(VERIFY_READ, act, arg2, 1)) {
9116 return -TARGET_EFAULT;
9117 }
9103#endif
9104 struct target_sigaction *act;
9105 struct target_sigaction *oact;
9106
9107 if (sigsetsize != sizeof(target_sigset_t)) {
9108 return -TARGET_EINVAL;
9109 }
9110 if (arg2) {
9111 if (!lock_user_struct(VERIFY_READ, act, arg2, 1)) {
9112 return -TARGET_EFAULT;
9113 }
9118#ifdef TARGET_ARCH_HAS_KA_RESTORER
9119 act->ka_restorer = restorer;
9120#endif
9121 } else {
9122 act = NULL;
9123 }
9124 if (arg3) {
9125 if (!lock_user_struct(VERIFY_WRITE, oact, arg3, 0)) {
9126 ret = -TARGET_EFAULT;
9127 goto rt_sigaction_fail;
9128 }
9129 } else
9130 oact = NULL;
9114 } else {
9115 act = NULL;
9116 }
9117 if (arg3) {
9118 if (!lock_user_struct(VERIFY_WRITE, oact, arg3, 0)) {
9119 ret = -TARGET_EFAULT;
9120 goto rt_sigaction_fail;
9121 }
9122 } else
9123 oact = NULL;
9131 ret = get_errno(do_sigaction(arg1, act, oact));
9124 ret = get_errno(do_sigaction(arg1, act, oact, restorer));
9132 rt_sigaction_fail:
9133 if (act)
9134 unlock_user_struct(act, arg2, 0);
9135 if (oact)
9136 unlock_user_struct(oact, arg3, 1);
9137#endif
9138 }
9139 return ret;

--- 4173 unchanged lines hidden ---
9125 rt_sigaction_fail:
9126 if (act)
9127 unlock_user_struct(act, arg2, 0);
9128 if (oact)
9129 unlock_user_struct(oact, arg3, 1);
9130#endif
9131 }
9132 return ret;

--- 4173 unchanged lines hidden ---