tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

re: Problem with syscall_disestablish() - PR kern/50430



additional problems i've realised:

- this should be process specific, not LWP specific.

- we might need some way to copy this across fork().

- as l_sysent seems unreliable, we should just remove it.


> In a nut-shell, we cannot rely on the struct lwp's l_sysent member
> to determine if a particular syscall is "active", since it could be
> overwritten during signal handling.  As a result, it is possible to
> unload modules which have active syscalls, and when those syscalls
> are resumed they'll return into memory that most likely no longer
> contains the syscall code.  (A big "Thanks!" goes out to Masao
> Uebayashi for identifying this bug.)

ah, i think i understand this now.  i wonder if any of the system
calls that support being restarted actually are modloadable (ie,
is this a non-problem?)  most system calls aren't and the few that
are are pretty basic.

i have another idea.

if these calls, at entry, mark the module as "busy in proc X".  then
when the unload is attempted, if X is still around, fail.  that
pushes all the resources into the module again, and seems to plug
all the holes.


.mrg.


Home | Main Index | Thread Index | Old Index