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 --- |