[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <87h8p1kim6.fsf@concordia.ellerman.id.au>
Date: Tue, 27 Mar 2018 19:50:09 +1100
From: Michael Ellerman <mpe@...erman.id.au>
To: Mathieu Malaterre <malat@...ian.org>
Cc: Benjamin Herrenschmidt <benh@...nel.crashing.org>,
Paul Mackerras <paulus@...ba.org>,
Jiri Slaby <jslaby@...e.com>,
linuxppc-dev <linuxppc-dev@...ts.ozlabs.org>,
LKML <linux-kernel@...r.kernel.org>,
Al Viro <viro@...iv.linux.org.uk>
Subject: Re: [PATCH 17/21] powerpc: Add missing prototype for sys_debug_setcontext
Hi Mathieu,
Mathieu Malaterre <malat@...ian.org> writes:
> On Thu, Mar 8, 2018 at 11:36 AM, Michael Ellerman <mpe@...erman.id.au> wrote:
>> Mathieu Malaterre <malat@...ian.org> writes:
>>> On Sun, Mar 4, 2018 at 11:54 AM, Michael Ellerman <mpe@...erman.id.au> wrote:
>>>> Mathieu Malaterre <malat@...ian.org> writes:
>>>>> In commit 81e7009ea46c ("powerpc: merge ppc signal.c and ppc64 signal32.c")
>>>>> the function sys_debug_setcontext was added without a prototype.
>>>>>
>>>>> Fix compilation warning (treated as error in W=1):
>>>>>
>>>>> CC arch/powerpc/kernel/signal_32.o
>>>>> arch/powerpc/kernel/signal_32.c:1227:5: error: no previous prototype for ‘sys_debug_setcontext’ [-Werror=missing-prototypes]
>>>>> int sys_debug_setcontext(struct ucontext __user *ctx,
>>>>> ^~~~~~~~~~~~~~~~~~~~
>>>>> cc1: all warnings being treated as errors
>>>>
>>>> This one should actually be using the SYSCALL_DEFINE syntax, so that it
>>>> can be used with CONFIG_FTRACE_SYSCALLS.
>>>>
>>>> See eg. our mmap:
>>>>
>>>> SYSCALL_DEFINE6(mmap, unsigned long, addr, size_t, len,
>>>> unsigned long, prot, unsigned long, flags,
>>>> unsigned long, fd, off_t, offset)
>>>> {
>>>> return do_mmap2(addr, len, prot, flags, fd, offset, PAGE_SHIFT);
>>>> }
>>>>
>>>>
>>>> We probably still need this patch, but I'm not entirely sure because the
>>>> SYSCALL_DEFINE macro does all sorts of shenanigans.
>>>
>>> I see. Could you please drop this patch then. The patch does not look
>>> that trivial anymore. I'll need to dig a bit more on how to do the
>>> syscall stuff with a 7 params function.
>>
>> Ergh, yuck, seems we're the first suckers to need do that.
>>
>> I think I'll take this patch for now, it's still good for now at least,
>> and then the SYSCALL_DEFINE stuff can be an addition.
>
> Just to close the loop (for later reference). Here is what Al Viro
> told me about this function
>
> [begin quote]
> int sys_debug_setcontext(struct ucontext __user *ctx,
> int ndbg, struct sig_dbg_op __user *dbg,
> int r6, int r7, int r8,
> struct pt_regs *regs)
>
> can't be converted to SYSCALL_DEFINE... not because it's a 7-argument
> syscall (it isn't); the problem is that the last argument here does
> *not* come from userland. What it really is trying to be is
> 3-argument syscall:
> SYSCALL_DEFINE3(debug_setcontext, struct ucontext __user *, ctx,
> int, ndbg,
> struct sig_dbg_op __user *, dbg)
> with no dummy r6/r7/r8. The thing is, ppc dispatcher combines the
> "pass 6 arguments" and "pass pt_regs *" by passing both.
>
> debug_setcontext(), swapcontext(), sigreturn() and rt_sigreturn() are,
> AFAICS, the only ppc syscalls that make use of that argument. All of
> those are relying upon regs == current_pt_regs() == current->thread.regs,
> [...]
> But in any case, these are not 7-argument syscalls - debug_setcontext(2)
> and swapcontext(2) are 3-argument and sigreturn()/rt_sigreturn() have
> no arguments at all.
> [end quote]
Awesome follow-up thanks.
I should have realised that's what the code was doing, but I didn't look
closely enough. Apologies to Al for having to stare at our horrible
signal code again :)
We should really clean all that up, I can't see any reason those
syscalls aren't using current_pt_regs().
That would then mean we could use SYSCALL_DEFINE.
I wrote that down so we don't (might not) forget:
https://github.com/linuxppc/linux/issues/131
> Sorry about the wrong analysis in the number of arguments count. I
> believe commit 0d60619e1c0ca (powerpc/next) should be just fine for
> now.
No worries.
cheers
Powered by blists - more mailing lists