Commit d105d692 authored by Mark Brown's avatar Mark Brown Committed by Will Deacon

arm64/ptrace: Don't clear calling process' TIF_SME on OOM

If allocating memory for the target SVE state in za_set() fails we clear
TIF_SME for the ptracing task which is obviously not correct.  If we are
here we know that the target task already had neither TIF_SVE nor
TIF_SME set since we only need to allocate if either the target had not
used either SVE or SME and had no need to allocate state before or we
just changed the vector length with vec_set_vector_length() which clears
TIF_ for us on allocation failure so just remove the clear entirely.
Reported-by: default avatarWang ShaoBo <bobo.shaobowang@huawei.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
Link: https://lore.kernel.org/r/20220902132802.39682-1-broonie@kernel.orgSigned-off-by: default avatarWill Deacon <will@kernel.org>
parent c0a454b9
...@@ -1084,7 +1084,6 @@ static int za_set(struct task_struct *target, ...@@ -1084,7 +1084,6 @@ static int za_set(struct task_struct *target,
if (!target->thread.sve_state) { if (!target->thread.sve_state) {
sve_alloc(target, false); sve_alloc(target, false);
if (!target->thread.sve_state) { if (!target->thread.sve_state) {
clear_thread_flag(TIF_SME);
ret = -ENOMEM; ret = -ENOMEM;
goto out; goto out;
} }
...@@ -1094,7 +1093,6 @@ static int za_set(struct task_struct *target, ...@@ -1094,7 +1093,6 @@ static int za_set(struct task_struct *target,
sme_alloc(target); sme_alloc(target);
if (!target->thread.za_state) { if (!target->thread.za_state) {
ret = -ENOMEM; ret = -ENOMEM;
clear_tsk_thread_flag(target, TIF_SME);
goto out; goto out;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment