[PATCH] arm64: ptrace: user_regset_copyin_ignore() always returns 0

Catalin Marinas catalin.marinas at arm.com
Mon Sep 26 07:01:55 PDT 2022


On Thu, Sep 22, 2022 at 08:37:57PM +0300, Sergey Shtylyov wrote:
> On 9/22/22 2:59 PM, Will Deacon wrote:
> [...]
> >> user_regset_copyin_ignore() always return 0, so checking its result seems
> >> pointless -- don't do this...
> >>
> >> Found by Linux Verification Center (linuxtesting.org) with the SVACE static
> >> analysis tool.
> >>
> >> Signed-off-by: Sergey Shtylyov <s.shtylyov at omp.ru>
> >>
> >> ---
> >> This patch is against the 'for-next/core' branch of the ARM64 repo...
> >>
> >>  arch/arm64/kernel/ptrace.c |   16 ++++------------
> >>  1 file changed, 4 insertions(+), 12 deletions(-)
> >>
> >> Index: linux/arch/arm64/kernel/ptrace.c
> >> ===================================================================
> >> --- linux.orig/arch/arm64/kernel/ptrace.c
> >> +++ linux/arch/arm64/kernel/ptrace.c
> >> @@ -514,9 +514,7 @@ static int hw_break_set(struct task_stru
> >>  
> >>  	/* Resource info and pad */
> >>  	offset = offsetof(struct user_hwdebug_state, dbg_regs);
> >> -	ret = user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf, 0, offset);
> >> -	if (ret)
> >> -		return ret;
> >> +	user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf, 0, offset);
> >>  
> >>  	/* (address, ctrl) registers */
> >>  	limit = regset->n * regset->size;
> >> @@ -543,11 +541,8 @@ static int hw_break_set(struct task_stru
> >>  			return ret;
> >>  		offset += PTRACE_HBP_CTRL_SZ;
> >>  
> >> -		ret = user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf,
> >> -						offset,
> >> -						offset + PTRACE_HBP_PAD_SZ);
> >> -		if (ret)
> >> -			return ret;
> >> +		user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf,
> >> +					  offset, offset + PTRACE_HBP_PAD_SZ);
> >>  		offset += PTRACE_HBP_PAD_SZ;
> >>  		idx++;
> >>  	}
> >> @@ -939,10 +934,7 @@ static int sve_set_common(struct task_st
> >>  
> >>  	start = end;
> >>  	end = SVE_PT_SVE_FPSR_OFFSET(vq);
> >> -	ret = user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf,
> >> -					start, end);
> >> -	if (ret)
> >> -		goto out;
> >> +	user_regset_copyin_ignore(&pos, &count, &kbuf, &ubuf, start, end);
> > 
> > I think it would be better to have user_regset_copyin_ignore() return void
> > so that we don't run the risk of missing an error code if it starts
> > returning one in future.
> 
>    That's the plan! But I need to convert the users 1st, right?

Right, though normally we'd like to see the full series that does the
arch clean-up followed by the user_regset_copyin_ignore() return changed
to void. If for some reason the last patch is rejected by the maintainer
because there are plans to actually return some non-zero value, we'd
have to revert the above.

-- 
Catalin



More information about the linux-arm-kernel mailing list