Re: [PATCH v11 0/2 hurd] Add irqhelp library and clean up ddekit

2024-03-24 Thread Damien Zammit
Hi,

On 24 Mar 2024, 11:05 pm, Samuel Thibault < samuel.thiba...@gnu.org> wrote:
> Ok, but there's not even a comment about it. If somebody else comes and 
> changes the code a bit, they'll very easily get to the unsafe side again. And 
> really, accessing local variables from nested functions is something we want 
> to kill because it ends up making the stack executable.

OK I will attempt to remove the local access from nested function in v12.

Damien

Re: [PATCH v11 0/2 hurd] Add irqhelp library and clean up ddekit

2024-03-24 Thread Samuel Thibault
Damien Zammit, le dim. 24 mars 2024 11:40:27 +, a ecrit:
> \ Original Message 
> On 24 Mar 2024, 9:32 pm, Samuel Thibault
> >... Your version 11 is however still accessing the \`irq\` local parameter, 
> >so it's still only by luck that it's working. You need to restore allocating 
> >the params structure to store irq and priv, which was precisely meant to 
> >avoid this kind issue.
> 
> Actually, the ddekit semaphore protects the irq variable from disappearing 
> because the function is guaranteed to not return until after the semaphore 
> has signalled it has run the thread\_init and used the irq local.

Ok, but there's not even a comment about it. If somebody else comes
and changes the code a bit, they'll very easily get to the unsafe side
again. And really, accessing local variables from nested functions
is something we want to kill because it ends up making the stack
executable.

Samuel



Re: [PATCH v11 0/2 hurd] Add irqhelp library and clean up ddekit

2024-03-24 Thread Damien Zammit
Hi Samuel,

 Original Message 
On 24 Mar 2024, 9:32 pm, Samuel Thibault
>... Your version 11 is however still accessing the `irq` local parameter, so 
>it's still only by luck that it's working. You need to restore allocating the 
>params structure to store irq and priv, which was precisely meant to avoid 
>this kind issue.

Actually, the ddekit semaphore protects the irq variable from disappearing 
because the function is guaranteed to not return until after the semaphore has 
signalled it has run the thread_init and used the irq local.

Damien

Re: [PATCH v11 0/2 hurd] Add irqhelp library and clean up ddekit

2024-03-24 Thread Samuel Thibault
Damien Zammit, le dim. 24 mars 2024 10:08:30 +, a ecrit:
> The previous problem was that calling a function with a global param
> from inside the wrapped_server_loop was crashing netdde
> due to a bogus stack offset. This is fixed.

Ah, it's not a global param, but a local param. Passing a nested
function that access local parameters to a thread is indeed a way to
mayhem since as soon as the caller function exits after creating the
thread, the local parameters don't exist any more. Also note that such
local access from nested function is exactly what makes the stack
executable because gcc has to put some trampoline there.

Your version 11 is however still accessing the `irq` local parameter,
so it's still only by luck that it's working.  You need to restore
allocating the params structure to store irq and priv, which was
precisely meant to avoid this kind issue.

Samuel